示例#1
0
        public Main()
        {
            sdmModeling   = new SDMModelingMain();
            ecoreModeling = new ECOREModelingMain();

            tggModeling = new TGGModelingMain(ecoreModeling);

            incrementalUpdateAdapter = new EcoreDiagramUpdateAdapter();
        }
        public void EA_OnPostOpenDiagram(EA.Repository repository, EA.Diagram openedDiagram)
        {
            if (openedDiagram.MetaType == TGGModelingMain.TggRuleDiagramMetatype[0])
            {
                SDMModelingMain.createAnchorElementIfNecessary(repository, openedDiagram, true);
            }

            else if (openedDiagram.MetaType == TGGModelingMain.TggRulesDiagramMetatype[0])
            {
                SDMModelingMain.createAnchorElementIfNecessary(repository, openedDiagram, true);
            }
        }
示例#3
0
        private void appendNewMethodAndSdm()
        {
            repository.SaveDiagram(oldSDMDiagram.DiagramID);


            EA.Element eClass = getContainingClass();
            this.newMethod = eClass.Methods.AddNew(textBoxNewSDM.Text, "void") as EA.Method;
            newMethod.Update();

            SDMModelingMain.createStoryDiagram(sqlRepository.GetMethodByID(newMethod.MethodID), sqlRepository.GetOriginalRepository(), oldSDMDiagram);
            newSdmContainer = sqlRepository.GetOriginalRepository().GetElementByID(sqlRepository.GetCurrentDiagram().ParentID);
            EA.Diagram newSdmDiagram = newSdmContainer.Diagrams.GetAt(0) as EA.Diagram;
            EA.Element newStartNode  = findNewStartNode(newSdmContainer);
            createExtractedSDMStatementNode();

            int leftMax = 10000000;
            int topMax  = -100000;

            computeLeftAndTopMin(ref leftMax, ref topMax);

            //copy elements
            foreach (EA.Element selectedElement in this.selectedActivityNodes)
            {
                selectedElement.ParentID = newSdmContainer.ElementID;
                EA.DiagramObject newPatternDiagramObject = null;
                copyDiagramObjects(leftMax - 100, topMax + 100, newSdmDiagram, selectedElement);
                EA.DiagramObject selectedDiagramObject = getDiagramObject(selectedElement.ElementID);
                if (selectedDiagramObject != null)
                {
                    newPatternDiagramObject = copyDiagramObject(leftMax - 100, topMax + 100, newSdmDiagram, selectedDiagramObject, selectedElement, 2);
                    EAUtil.deleteDiagramObject(repository, oldSDMDiagram, selectedElement);
                }

                //deleteUnselectedConnectors(selectedElement);
                selectedElement.Update();

                arrangeUnselectedConnectors(newSdmContainer, newSdmDiagram, newStartNode, selectedElement, newPatternDiagramObject.bottom, newPatternDiagramObject.left);
            }



            repository.ReloadDiagram(newSdmDiagram.DiagramID);
            repository.ReloadDiagram(oldSDMDiagram.DiagramID);
            repository.OpenDiagram(oldSDMDiagram.DiagramID);
        }
示例#4
0
        private void buttonToMethodCallExpression_Click(object sender, EventArgs e)
        {
            Object selectedSource = expressionProvider.getSelectedSecond();

            if (selectedSource is SDMExpressionHelper.SecondObject)
            {
                SDMExpressionHelper.SecondObject secondObject = selectedSource as SDMExpressionHelper.SecondObject;

                if (secondObject.eaObject is SQLMethod)
                {
                    SQLMethod selectedOperation = secondObject.eaObject as SQLMethod;

                    if (selectedOperation != null)
                    {
                        SQLMethod  method         = repository.GetMethodByID(selectedOperation.MethodID);
                        EA.Diagram currentDiagram = repository.GetCurrentDiagram();
                        int        sdmDiagramId   = SDMUtil.getSDMDiagramID(repository, method);
                        if (sdmDiagramId != SDMUtil.UNKNOWN_SDM_DIAGRAM_ID)
                        {
                            Navigator.addAnchorEntry(sdmDiagramId, currentDiagram.DiagramID);
                            repository.OpenDiagram(sdmDiagramId);
                            this.ParentForm.Close();
                        }
                        else
                        {
                            CreateSDMDialog.CreateSDMDialog createSdmDialog = new CreateSDMDialog.CreateSDMDialog();
                            if (createSdmDialog.ShowDialog() == DialogResult.OK)
                            {
                                SDMModelingMain.createStoryDiagram(method, repository.eaRepository, currentDiagram);
                                this.ParentForm.Close();
                            }
                        }
                    }
                }
            }
        }
        private void extractStoryPattern()
        {
            Dictionary <EA.DiagramObject, EA.Element> diagramObjectsToElement = new Dictionary <EA.DiagramObject, EA.Element>();

            EA.Diagram newDiagram = null;
            //create new diagram if necessary
            if (activityTabsForm.ActivityNode.ActivityNodeEAElement.Diagrams.Count == 0)
            {
                newDiagram = (EA.Diagram)activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement().Diagrams.AddNew(activityTabsForm.ActivityNode.ActivityNodeEAElement.Name, SDMModelingMain.SdmDiagramMetatype[0]);
            }
            //or choose already existing diagram
            else
            {
                newDiagram      = (activityTabsForm.ActivityNode.ActivityNodeEAElement.Diagrams.GetAt(0) as SQLDiagram).getRealDiagram();
                newDiagram.Name = activityTabsForm.ActivityNode.ActivityNodeEAElement.Name;
                newDiagram.Update();
            }
            newDiagram.ParentID = activityTabsForm.ActivityNode.ActivityNodeEAElement.ElementID;
            repository.SaveDiagram(newDiagram.DiagramID);
            newDiagram.Update();

            int leftMin = int.MaxValue;
            int topMax  = int.MinValue;

            //compute the minimal left value and the maximal top value of all object variables contained by current StoryNode
            foreach (SQLElement actElement in activityTabsForm.ActivityNode.ActivityNodeEAElement.Elements)
            {
                EA.DiagramObject actDiagObj = EAEcoreAddin.Util.EAUtil.findDiagramObject(repository, actElement.getRealElement(), currentSdmDiagram);
                if (actDiagObj != null)
                {
                    if (leftMin > actDiagObj.left)
                    {
                        leftMin = actDiagObj.left;
                    }
                    if (topMax < actDiagObj.top)
                    {
                        topMax = actDiagObj.top;
                    }
                    diagramObjectsToElement.Add(actDiagObj, actElement.getRealElement());
                }
            }
            //compute the difference for the new diagram objects so they are pinned on the left top corner
            int differenceLeftRight = leftMin - 40;

            if (differenceLeftRight < 0)
            {
                differenceLeftRight = 40;
            }
            int differenceTopBottom = topMax + 40;

            if (differenceTopBottom > 0)
            {
                differenceTopBottom = -40;
            }

            //delete all old diagramobjects and create new ones on the extracted diagram-
            foreach (EA.DiagramObject oldDiagramObject in diagramObjectsToElement.Keys)
            {
                EA.Element element = diagramObjectsToElement[oldDiagramObject];
                EAUtil.deleteDiagramObject(repository.GetOriginalRepository(), currentSdmDiagram, element);

                EA.DiagramObject newDiaObj = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew("", element.Type);
                newDiaObj.left      = oldDiagramObject.left - differenceLeftRight;
                newDiaObj.right     = oldDiagramObject.right - differenceLeftRight;
                newDiaObj.top       = oldDiagramObject.top - differenceTopBottom;
                newDiaObj.bottom    = oldDiagramObject.bottom - differenceTopBottom;
                newDiaObj.ElementID = element.ElementID;
                newDiaObj.Update();
            }

            activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement().Update();
            repository.SaveDiagram(currentSdmDiagram.DiagramID);
            repository.ReloadDiagram(currentSdmDiagram.DiagramID);
            repository.ReloadDiagram(newDiagram.DiagramID);
            buttonEvacuate.Text = "Embed Story Pattern";

            Navigator.addAnchorEntry(newDiagram.DiagramID, currentSdmDiagram.DiagramID);

            repository.OpenDiagram(newDiagram.DiagramID);

            SDMModelingMain.setAnchorElementTags(repository, currentSdmDiagram, activityTabsForm.ActivityNode.ActivityNodeEAElement);

            this.ParentForm.Close();
            EAEcoreAddin.Util.EAUtil.setTaggedValue(repository, activityTabsForm.ActivityNode.ActivityNodeEAElement.getRealElement(), Main.MoflonExtractedStoryPatternTaggedValueName, "true");
        }