private static T CreateChildElement <T>(ModelElement parent, bool raiseInstantiateEvents) where T : ModelElement { var childClass = parent.Partition.DomainDataDirectory.DomainClasses .FirstOrDefault(dci => typeof(T).IsAssignableFrom(dci.ImplementationClass) && !dci.ImplementationClass.IsAbstract); var elementOperations = new ElementOperations(parent.Store, parent.Partition); if (elementOperations != null) { var elementGroupPrototype = new ElementGroupPrototype(parent.Partition, childClass.Id); var partition = elementOperations.ChooseMergeTarget(parent, elementGroupPrototype).Partition; var element = (T)partition.ElementFactory.CreateElement(childClass); var elementGroup = new ElementGroup(partition); elementGroup.Add(element); elementGroup.MarkAsRoot(element); elementOperations.MergeElementGroup(parent, elementGroup); // Flag the element in the state so that the ProductStore class sees it and doesn't // raise the instantiation event. if (!raiseInstantiateEvents) { element.Store.PropertyBag.Add(element, null); } return(element); } return(default(T)); }
private bool PasteShapes() { // Get prototypes from clipboard, if they exist IDataObject dataObject = Clipboard.GetDataObject(); ElementGroupPrototype elementGroupPrototype = ElementOperations.GetElementGroupPrototype(ServiceProvider, dataObject); // if we're not pasting on the diagram (i.e., the ModelRoot), we're pasting the prototype if (TargetElement is ModelRoot && CurrentModelingDocView is EFModelDocView efModelDocView && efModelDocView.Diagram is EFModelDiagram currentDiagram && currentDiagram?.Store != null && elementGroupPrototype != null) { Store store = efModelDocView.Diagram.Store; // get matching elements from the store List <ModelElement> modelElements = elementGroupPrototype.ProtoElements .Select(p => store.ElementDirectory.FindElement(p.ElementId)) .Where(e => e != null) .ToList(); if (modelElements.Any()) { List <ModelClass> modelClasses = modelElements.OfType <ModelClass>().ToList(); List <Comment> comments = modelElements.OfType <Comment>().ToList(); List <ModelElement> everythingElse = modelElements.Except(modelClasses).Except(comments).ToList(); List <ShapeElement> newShapes = new List <ShapeElement>(); using (Transaction t = store.TransactionManager.BeginTransaction()) { // paste classes and comments first to ensure that any possible connector end is present before the connectors arrive newShapes.AddRange(modelClasses.Select(e => EFModelDiagram.AddExistingModelElement(currentDiagram, e))); newShapes.AddRange(comments.Select(e => EFModelDiagram.AddExistingModelElement(currentDiagram, e))); newShapes.AddRange(everythingElse.Select(e => EFModelDiagram.AddExistingModelElement(currentDiagram, e))); newShapes = newShapes.Where(s => s != null).ToList(); // if nothing got pasted (because it's already there), we succeeded in our paste but didn't really change // the display, so nothing further needs done if (!newShapes.Any()) { return(true); } t.Commit(); } using (Transaction t = store.TransactionManager.BeginTransaction()) { Commands.LayoutDiagram(currentDiagram, newShapes); t.Commit(); } currentDiagram.Invalidate(); return(true); } } return(false); }
public string GetKey_ReturnsKey(int[] descendants) { IElement element = Message.Build(Any.Message()); element = (descendants ?? new int[] {}).Aggregate(element, (current, index) => current[index]); return(ElementOperations.GetKey(element)); }
private static void CopyElementGraph(Store targetStore, ModelElement targetElement, ModelElement element) { var dataObject = new DataObject(); var elementOperations = new ElementOperations(targetStore, targetStore.DefaultPartition); tracer.Verbose(string.Format(CultureInfo.InvariantCulture, Properties.Resources.PatternModelCloner_CloningElement, element.Id)); elementOperations.Copy(dataObject, new List <ModelElement> { element }); targetStore.TransactionManager.DoWithinTransaction(() => elementOperations.Merge(targetElement, dataObject)); }
public void IsEncodingCharacterField_ReturnsFalse_OnSubcomponent() { var element = Message.Build(Any.Message()); ElementOperations.IsEncodingCharacterField(element[1][3][1][1][1]).Should().BeFalse(); }
public void IsEncodingCharacterField_ReturnsFalse_OnSegment(int index) { var element = Message.Build(Any.Message()); ElementOperations.IsEncodingCharacterField(element[index]).Should().BeFalse(); }
public bool IsEncodingCharacterField_ReturnsTrue_OnlyOnEncodingFields(int fieldIndex) { var element = Message.Build(Any.Message()); return(ElementOperations.IsEncodingCharacterField(element[1][fieldIndex])); }
private static void CopyElementGraph(Store targetStore, ModelElement targetElement, ModelElement element) { var dataObject = new DataObject(); var elementOperations = new ElementOperations(targetStore, targetStore.DefaultPartition); tracer.Verbose(string.Format(CultureInfo.InvariantCulture, Properties.Resources.PatternModelCloner_CloningElement, element.Id)); elementOperations.Copy(dataObject, new List<ModelElement> { element }); targetStore.TransactionManager.DoWithinTransaction(() => elementOperations.Merge(targetElement, dataObject)); }