示例#1
0
        /// clones a diagram cloning all diagramElements and their related
        /// elements
        public UML.Diagrams.Diagram cloneDiagram(UML.Classes.Kernel.Element owner,
                                                 UML.Diagrams.Diagram diagram)
        {
            Dictionary <UML.Diagrams.DiagramElement, UML.Diagrams.DiagramElement>
            diagramElementsMap = new Dictionary <UML.Diagrams.DiagramElement,
                                                 UML.Diagrams.DiagramElement>();
            Dictionary <UML.Classes.Kernel.Element, UML.Classes.Kernel.Element>
            elementsMap = new Dictionary <UML.Classes.Kernel.Element,
                                          UML.Classes.Kernel.Element>();

            UML.Diagrams.Diagram clonedDiagram = null;

            if (diagram is UML.Diagrams.ClassDiagram)
            {
                clonedDiagram = this.createNewDiagram <UML.Diagrams.ClassDiagram>(owner, diagram.name);
            }

            else if (diagram is UML.Diagrams.SequenceDiagram)
            {
                clonedDiagram = this.createNewDiagram <UML.Diagrams.SequenceDiagram>(owner, diagram.name);
            }

            clonedDiagram.name    = diagram.name;
            clonedDiagram.width   = diagram.width;
            clonedDiagram.height  = diagram.height;
            clonedDiagram.comment = diagram.comment;

            List <UML.Diagrams.DiagramElement> diagramElements =
                diagram.diagramElements.ToList();

            diagramElements = this.sortDiagramElements(diagramElements);

            foreach (UML.Diagrams.DiagramElement diagramElement in diagramElements)
            {
                UML.Diagrams.DiagramElement clonedDiagramElement =
                    this.cloneDiagramElement(clonedDiagram, diagramElement, elementsMap);
                if (clonedDiagramElement != null)
                {
                    diagramElementsMap.Add(diagramElement, clonedDiagramElement);
                    elementsMap.Add(diagramElement.element,
                                    clonedDiagramElement.element);
                }
            }

            foreach (UML.Classes.Kernel.Element element in elementsMap.Keys)
            {
                foreach (UML.Classes.Kernel.Element subElement in
                         element.ownedElements)
                {
                    this.cloneElement(elementsMap[element], subElement, elementsMap,
                                      true);
                }
            }
            return(clonedDiagram);
        }
        /// creates a set of stereotypes based on the comma separated names string
        /// and attaches it to the given Diagram
        public HashSet <UML.Profiles.Stereotype> createStereotypes
            (UML.Diagrams.Diagram owner, String names)
        {
            HashSet <UML.Profiles.Stereotype> newStereotypes =
                new HashSet <UML.Profiles.Stereotype>();

            String[] stereotypeNames = names.Split(',');
            foreach (String name in stereotypeNames)
            {
                if (name != String.Empty)
                {
                    UML.Profiles.Stereotype stereotype =
                        this.createStereotype(owner, name);
                    if (stereotype != null)
                    {
                        newStereotypes.Add(stereotype);
                    }
                }
            }
            return(newStereotypes);
        }
示例#3
0
        public UML.Diagrams.DiagramElement cloneDiagramElement
            (UML.Diagrams.Diagram ownerDiagram,
            UML.Diagrams.DiagramElement diagramElement,
            Dictionary <UML.Classes.Kernel.Element, UML.Classes.Kernel.Element>
            clonedElementsMap)
        {
            // clone the element itself
            UML.Classes.Kernel.Element clonedElement =
                this.cloneElement(ownerDiagram.owner, diagramElement.element,
                                  clonedElementsMap, false);
            // create the new DiagramElement
            UML.Diagrams.DiagramElement clonedDiagramElement =
                this.createNewDiagramElement(ownerDiagram, clonedElement);

            if (clonedDiagramElement != null)
            {
                // copy the attributes
                clonedDiagramElement.xPosition = diagramElement.xPosition;
                clonedDiagramElement.yPosition = diagramElement.yPosition;
            }
            return(clonedDiagramElement);
        }
示例#4
0
 public abstract UML.Diagrams.DiagramElement createNewDiagramElement
     (UML.Diagrams.Diagram owner, UML.Classes.Kernel.Element element);
 public override UML.Diagrams.DiagramElement createNewDiagramElement
     (UML.Diagrams.Diagram owner, UML.Classes.Kernel.Element element)
 {
     return(owner.addToDiagram(element));
 }
 /// returns a new stereotype based on the given name and attached to the
 /// given diagram
 public UML.Profiles.Stereotype createStereotype
     (UML.Diagrams.Diagram owner, String name)
 {
     return(new Stereotype(this.model as Model, owner as Element, name));
 }