public HashSet <UML.Diagrams.DiagramElement> createDiagramElements (List <UML.Classes.Kernel.Element> elements, Diagram diagram) { HashSet <UML.Diagrams.DiagramElement> returnedDiagramElements = new HashSet <UML.Diagrams.DiagramElement>(); foreach (UML.Classes.Kernel.Element element in elements) { UML.Diagrams.DiagramElement diagramElement = null; if (element is ConnectorWrapper) { diagramElement = new DiagramLinkWrapper (this.model as Model, element as ConnectorWrapper, diagram); // don't return isHidden relations if (((DiagramLinkWrapper)diagramElement).isHidden) { diagramElement = null; } } else if (element is ElementWrapper) { diagramElement = new DiagramObjectWrapper (this.model as Model, element as ElementWrapper, diagram); } if (diagramElement != null) { returnedDiagramElements.Add(diagramElement); } } return(returnedDiagramElements); }
/// <summary> /// adds an element to the diagram /// </summary> /// <param name="element">the element to add</param> /// <returns>the new diagramElement</returns> public UML.Diagrams.DiagramElement addToDiagram(UML.Classes.Kernel.Element element) { UML.Diagrams.DiagramElement diagramElement = null; if (element != null) { //first check whether this element is not already added to this diagram diagramElement = this.getDiagramElement(element); if (diagramElement == null) { if (element is EA.ElementWrapper) { //first save the diagram to make sure we don't lose any unsaved changes this.model.saveOpenedDiagram(this); global::EA.DiagramObject newDiagramObject = this.wrappedDiagram.DiagramObjects.AddNew("", "") as global::EA.DiagramObject; diagramElement = ((Factory)this.model.factory).createDiagramElement(newDiagramObject); diagramElement.element = element; //save the element diagramObject ((DiagramObjectWrapper)diagramElement).save(); // now refresh to make sure we see the new element on the diagram this.reFresh(); } else if (!(element.owner is UML.Classes.Kernel.Package)) { diagramElement = this.addToDiagram(element.owner); } } } return(diagramElement); }
/// <summary> /// update the given diagrams with the schema elements that don't appear ont he diagram yet. /// </summary> /// <param name="schema">the schema that should be visualised</param> /// <param name="subsetDiagrams">list of diagrams to update</param> void updateExistingDiagrams(Schema schema, HashSet <UML.Diagrams.Diagram> subsetDiagrams) { //add all elements to all diagrams in the same package as the messageElement foreach (UML.Diagrams.Diagram diagram in subsetDiagrams) { int xPos = 10; int yPos = 10; foreach (SchemaElement schemaElement in schema.elements) { if (this.shouldElementBeOnDiagram(schemaElement.subsetElement) && !diagram.contains(schemaElement.subsetElement)) { UML.Diagrams.DiagramElement diagramElement = diagram.addToDiagram(schemaElement.subsetElement); if (diagramElement != null) { //save before changing the element position diagramElement.save(); diagramElement.xPosition = xPos; diagramElement.yPosition = yPos; diagramElement.save(); xPos += 50; yPos += 20; } } } //show the diagram diagram.reFresh(); diagram.open(); } }
public void selectItem(UML.Extended.UMLItem itemToSelect) { if (itemToSelect is Operation) { bool found = false; //if the item is a relation or an operation then search through the links first foreach (DiagramLinkWrapper diagramLinkWrapper in this.diagramLinkWrappers) { if (itemToSelect is Operation && diagramLinkWrapper.relation is Message) { Message message = (Message)diagramLinkWrapper.relation; if (itemToSelect.Equals(message.calledOperation)) { this.wrappedDiagram.SelectedConnector = message.wrappedConnector; found = true; //done, no need to loop further break; } } } //The operation could also be called in an Action. if (!found) { List <UML.Actions.BasicActions.CallOperationAction> actions = ((Operation)itemToSelect).getDependentCallOperationActions().ToList(); List <UML.Diagrams.DiagramElement> diagramObjects = this.diagramObjectWrappers.ToList(); foreach (Action action in actions) { //try to find an diagramObjectwrapper that refrences the action UML.Diagrams.DiagramElement diagramObject = diagramObjects.Find( x => x.element.Equals(action)); if (diagramObject != null) { //found it, select the action and break out of for loop this.selectItem(action); found = true; break; } } } if (!found) { //can't find a message on this diagram that calls the operation. //then we try it with the operations parent this.selectItem(((Operation)itemToSelect).owner); } } else if (itemToSelect is ConnectorWrapper) { this.wrappedDiagram.SelectedConnector = ((ConnectorWrapper)itemToSelect).wrappedConnector; //check if it worked if (wrappedDiagram.SelectedConnector == null && itemToSelect is Message) { this.selectItem(((Message)itemToSelect).calledOperation); } } else if (itemToSelect is ElementWrapper) { ElementWrapper elementToSelect = (ElementWrapper)itemToSelect; this.wrappedDiagram.SelectedObjects.AddNew(elementToSelect.wrappedElement.ElementID.ToString(), elementToSelect.wrappedElement.Type); } }