/// <summary> /// Extends a model element with the corresponding ObjectExtender based of the ExtenderProvider. /// </summary> /// <param name="context">The context.</param> /// <param name="value">The value.</param> protected virtual void ExtendModelElements(ITypeDescriptorContext context, object value) { ModelElement rootElement = context.Instance as ModelElement; if (rootElement == null) { return; } IList <ModelElement> extensibleObjects = new List <ModelElement>(); ElementWalker walker = new DepthFirstElementWalker( new TypeMatchingElementVisitor <IExtensibleObject>(extensibleObjects), new EmbeddingVisitorFilter() ); walker.DoTraverse(rootElement); if (extensibleObjects.Count > 0) { using (Transaction transaction = rootElement.Store.TransactionManager.BeginTransaction()) { foreach (ModelElement mel in extensibleObjects) { ProvideObjectExtender(mel, mel as IExtensibleObject, value as IExtensionProvider); } transaction.Commit(); } } }
public void ShouldReturnEmptyListIfNoMatches() { List<ModelElement> elementList = new List<ModelElement>(); Store store = new Store(new Type[] { typeof(MockDomainModel) }); Partition partition = new Partition(store); using (Transaction t = store.TransactionManager.BeginTransaction()) { UnextendedMockModelElement unextendedModelElement = new UnextendedMockModelElement(partition); DepthFirstElementWalker elementWalker = new DepthFirstElementWalker( new TypeMatchingElementVisitor<IExtensibleObject>(elementList), new EmbeddingVisitorFilter() ); elementWalker.DoTraverse(unextendedModelElement); t.Rollback(); Assert.AreEqual<int>(0, elementList.Count); } }
public void ShouldAddElementThatMatchType() { List<ModelElement> elementList = new List<ModelElement>(); Store store = new Store(new Type[] { typeof(MockDomainModel) }); Partition partition = new Partition(store); using (Transaction t = store.TransactionManager.BeginTransaction()) { ExtensibleMockModelElement myModelElement = new ExtensibleMockModelElement(partition, "TestMessage"); DepthFirstElementWalker elementWalker = new DepthFirstElementWalker( new TypeMatchingElementVisitor<IExtensibleObject>(elementList), new EmbeddingVisitorFilter() ); elementWalker.DoTraverse(myModelElement); t.Rollback(); Assert.AreEqual<int>(1, elementList.Count); } }
public void ShouldReturnEmptyListIfNoMatches() { List <ModelElement> elementList = new List <ModelElement>(); Store store = new Store(new Type[] { typeof(MockDomainModel) }); Partition partition = new Partition(store); using (Transaction t = store.TransactionManager.BeginTransaction()) { UnextendedMockModelElement unextendedModelElement = new UnextendedMockModelElement(partition); DepthFirstElementWalker elementWalker = new DepthFirstElementWalker( new TypeMatchingElementVisitor <IExtensibleObject>(elementList), new EmbeddingVisitorFilter() ); elementWalker.DoTraverse(unextendedModelElement); t.Rollback(); Assert.AreEqual <int>(0, elementList.Count); } }
public void ShouldAddElementThatMatchType() { List <ModelElement> elementList = new List <ModelElement>(); Store store = new Store(new Type[] { typeof(MockDomainModel) }); Partition partition = new Partition(store); using (Transaction t = store.TransactionManager.BeginTransaction()) { ExtensibleMockModelElement myModelElement = new ExtensibleMockModelElement(partition, "TestMessage"); DepthFirstElementWalker elementWalker = new DepthFirstElementWalker( new TypeMatchingElementVisitor <IExtensibleObject>(elementList), new EmbeddingVisitorFilter() ); elementWalker.DoTraverse(myModelElement); t.Rollback(); Assert.AreEqual <int>(1, elementList.Count); } }
/// <summary> /// Extends a model element with the corresponding ObjectExtender based of the ExtenderProvider. /// </summary> /// <param name="context">The context.</param> /// <param name="value">The value.</param> protected virtual void ExtendModelElements(ITypeDescriptorContext context, object value) { ModelElement rootElement = context.Instance as ModelElement; if (rootElement == null) { return; } IList<ModelElement> extensibleObjects = new List<ModelElement>(); ElementWalker walker = new DepthFirstElementWalker( new TypeMatchingElementVisitor<IExtensibleObject>(extensibleObjects), new EmbeddingVisitorFilter() ); walker.DoTraverse(rootElement); if (extensibleObjects.Count > 0) { using (Transaction transaction = rootElement.Store.TransactionManager.BeginTransaction()) { foreach (ModelElement mel in extensibleObjects) { ProvideObjectExtender(mel, mel as IExtensibleObject, value as IExtensionProvider); } transaction.Commit(); } } }