private static void onCSPConstraintDoubleClicked(SQLRepository sqlRepository, EA.Element doubleClickedElement)
        {
            TGG tggPackage = new TGG(sqlRepository, EAUtil.getOutermostPackage(doubleClickedElement, sqlRepository));

            tggPackage.loadTreeFromTaggedValue();
            CSPInstanceDialog CSPConstraintDialog = new CSPInstanceDialog(sqlRepository, sqlRepository.GetElementByID(doubleClickedElement.ElementID), new TGGCSPController(tggPackage));

            CSPConstraintDialog.ShowDialog();
        }
        public void doRulesForPackages(List <SQLPackage> packagesToValidate, SQLRepository repository)
        {
            if (packagesToValidate.Count > 0)
            {
                List <SQLElement>   listOfElements   = new List <SQLElement>();
                List <SQLConnector> listOfConnectors = new List <SQLConnector>();
                List <SQLAttribute> listOfAttributes = new List <SQLAttribute>();
                List <SQLMethod>    listofMethods    = new List <SQLMethod>();
                List <SQLParameter> listofParameters = new List <SQLParameter>();
                List <SQLPackage>   listOfPackages   = new List <SQLPackage>();
                listOfPackages.AddRange(packagesToValidate);
                int z = listOfPackages.Count;

                //wait for progressbar to be initialized
                while (consistencyProgressbar == null)
                {
                }
                consistencyProgressbar.invokeProgressBarAndPrepare();
                for (int i = 0; i < z; i++)
                {
                    if (Canceled)
                    {
                        return;
                    }
                    SQLPackage actPackage       = (SQLPackage)listOfPackages[i];
                    SQLPackage currentMetamodel = EAUtil.getOutermostPackage(actPackage, repository);

                    foreach (SQLElement actElement in actPackage.Elements)
                    {
                        if (Canceled)
                        {
                            return;
                        }
                        addElementChildFeatures(listOfElements, listOfConnectors, listOfAttributes, listofMethods, listofParameters, actElement);
                    }
                    foreach (SQLPackage actpackage in actPackage.Packages)
                    {
                        if (Canceled)
                        {
                            return;
                        }
                        listOfPackages.Add(actpackage);
                        z++;
                    }
                }
                doRulesForFeatures(repository, listOfElements, listOfConnectors, listOfAttributes, listofMethods, listofParameters, listOfPackages);
            }
        }
示例#3
0
        public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
            {
                SQLPackage containingPackage = EAUtil.getOutermostPackage(eaElement, repository);

                SQLElement correspondenceTypeElement = EAUtil.getClassifierElement(repository, eaElement.ClassifierID);
                SQLPackage corrTypeContainingPackage = EAUtil.getOutermostPackage(correspondenceTypeElement, repository);

                if (correspondenceTypeElement != null && containingPackage.PackageGUID != corrTypeContainingPackage.PackageGUID)
                {
                    results.Add("the correspondence classifier is not located in the current tgg package");
                }
            }
            return(results);
        }
        public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaElement.Stereotype == ECOREModelingMain.EClassStereotype)
            {
                SQLPackage containingPackage = repository.GetPackageByID(eaElement.PackageID);
                if (containingPackage.Name == eaElement.Name)
                {
                    results.Add("EClasses shouldnt have the same name as their containing package");
                }

                SQLPackage metamodel = EAUtil.getOutermostPackage(eaElement, repository);
                if (metamodel.Name + "Package" == eaElement.Name)
                {
                    results.Add("No EClass should be named \"<NameOfProject>Package\" as this is reserved for EMF by convention.");
                }
            }
            return(results);
        }
        private Boolean isLocked()
        {
            //checks if ObjectToBeTagged is locked and adds outermost package name to Export
            Boolean    locked        = false;
            SQLElement lockedElement = null;

            if (getObjectToBeTagged() is SQLElement)
            {
                SQLElement elemn = getObjectToBeTagged() as SQLElement;
                locked        = elemn.Locked;
                lockedElement = elemn;
            }
            else if (getObjectToBeTagged() is SQLPackage)
            {
                SQLPackage elemn = getObjectToBeTagged() as SQLPackage;
                if (elemn.Element != null)
                {
                    locked = elemn.Element.Locked;
                }
                lockedElement = elemn.Element;
            }
            else if (getObjectToBeTagged() is SQLConnector)
            {
                SQLConnector elemn  = getObjectToBeTagged() as SQLConnector;
                SQLElement   source = Repository.GetElementByID(elemn.ClientID);
                locked        = source.Locked;
                lockedElement = source;
            }
            if (locked)
            {
                SQLPackage outermostPkg = EAUtil.getOutermostPackage(lockedElement, Repository);

                if (outermostPkg != null && !Export.AutoUpdatePackages.Contains(outermostPkg.Name))
                {
                    Export.AutoUpdatePackages.Add(outermostPkg.Name);
                }
            }
            return(locked);
        }
示例#6
0
        private void buttonDeleteSdms_Click(object sender, EventArgs e)
        {
            ConfirmDeleteSDMs confirmDialog = new ConfirmDeleteSDMs();

            if (confirmDialog.ShowDialog() == DialogResult.OK)
            {
                SQLPackage selectedPackage  = repository.GetTreeSelectedPackage();
                SQLPackage outermostPackage = EAUtil.getOutermostPackage(selectedPackage, repository);

                String sqlResult = repository.SQLQuery("SELECT * FROM t_object WHERE Stereotype = '" + SDMModelingMain.SdmContainerStereotype + "'");
                foreach (String row in EAUtil.getXMLNodeContentFromSQLQueryString(sqlResult, "Row"))
                {
                    if (row != "")
                    {
                        SQLElement element = new SQLElement(repository, row);
                        if (EAUtil.getOutermostPackage(element, repository).PackageGUID == outermostPackage.PackageGUID)
                        {
                            EAUtil.deleteElement(element.getRealElement(), repository);
                        }
                    }
                }
            }
        }
示例#7
0
        private void buttonOk_Click(object sender, EventArgs e)
        {
            if (!checkBoxCreateNew.Checked)
            {
                if (this.comboBoxCorrClasses.SelectedIndex != -1)
                {
                    int i = 0;
                    foreach (int corId in this.possibleCorrespondencesLinkWithConnectors.Keys)
                    {
                        if (i++ == this.comboBoxCorrClasses.SelectedIndex)
                        {
                            this.selectedCorrespondenceLinkId = corId;
                        }
                    }

                    EA.Element selectedLink = sqlRepository.GetOriginalRepository().GetElementByID(selectedCorrespondenceLinkId);
                    corrObject.getRealElement().ClassifierID = selectedLink.ElementID;
                    corrObject.getRealElement().Name         = textBoxObjectName.Text;
                    corrObject.getRealElement().Update();

                    TGGCorrespondence tggCorrOv = new TGGCorrespondence(sqlRepository.GetElementByID(corrObject.ElementID), sqlRepository);
                    tggCorrOv.BindingOperator = this.bo;
                    tggCorrOv.saveTreeToEATaggedValue(true);
                    Close();
                }
            }
            else if (checkBoxCreateNew.Checked)
            {
                EA.Package   tggOutermostPackage = EAUtil.sqlEAObjectToOriginalObject(sqlRepository, EAUtil.getOutermostPackage(corrObject, sqlRepository)) as EA.Package;
                EA.Connector connectorToSource;
                EA.Connector connectorToTarget;

                EA.Element selectedLink = createNewCorrespondenceLink(tggOutermostPackage, out connectorToSource, out connectorToTarget);
                this.corrObject.getRealElement().ClassifierID = selectedLink.ElementID;
                this.corrObject.getRealElement().Name         = textBoxObjectName.Text;
                this.corrObject.getRealElement().Update();



                TGGCorrespondence tggCorrOv = new TGGCorrespondence(sqlRepository.GetElementByID(corrObject.ElementID), sqlRepository);
                tggCorrOv.BindingOperator = this.bo;
                tggCorrOv.saveTreeToEATaggedValue(true);

                List <SQLConnector> references = new List <SQLConnector>();
                references.Add(sqlRepository.GetConnectorByID(connectorToSource.ConnectorID));
                references.Add(sqlRepository.GetConnectorByID(connectorToTarget.ConnectorID));

                possibleCorrespondencesLinkWithConnectors.Add(selectedLink.ElementID, references);

                Close();
            }
        }
        public bool EA_OnPostNewElement(SQLRepository sqlRepository, EA.Element newElement, EA.Diagram currentDiagram)
        {
            EA.Repository repository = sqlRepository.GetOriginalRepository();

            try
            {
                //a correspondence is created as an instance of CorrespondenceType
                //Therefore its stereotype is at first time "CorrespondenceType"
                //but we want to change it to "Correspondence"

                if (TGGModelingMain.TggRuleDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;

                    if (newElement.Type == Main.EAObjectType)
                    {
                        TGGObjectVariable tggOv = null;

                        //drag & drop is used
                        if (newElement.ClassifierID != 0)
                        {
                            SQLElement classifier = sqlRepository.GetElementByID(newElement.ClassifierID);
                            if (classifier.Stereotype == ECOREModelingMain.EClassStereotype)
                            {
                                tggOv                     = new TGGObjectVariable(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                tggOv.Name                = classifier.Name.ToLower().Substring(0, 1) + classifier.Name.Substring(1, classifier.Name.Length - 1);
                                tggOv.BindingOperator     = BindingOperator.CREATE;
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                            else if (classifier.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype)
                            {
                                tggOv                     = new TGGCorrespondence(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                tggOv.Name                = classifier.Name.ToLower().Substring(0, 1) + classifier.Name.Substring(1, classifier.Name.Length - 1);
                                tggOv.BindingOperator     = BindingOperator.CREATE;
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                        }
                        else
                        {
                            //toolbox is used
                            if (newElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype)
                            {
                                tggOv = new TGGObjectVariable(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                ObjectVariableDialog.ShowDialog();
                            }
                            else if (newElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype)
                            {
                                tggOv = new TGGCorrespondence(sqlRepository.GetElementByID(newElement.ElementID), sqlRepository);
                                this.ObjectVariableDialog = new OvDialog(sqlRepository, tggOv);
                                this.ObjectVariableDialog.ShowDialog();
                            }
                            else if (newElement.Stereotype == SDMModelingMain.CSPInstanceStereotype)
                            {
                                TGG tggPackage = new TGG(sqlRepository, EAUtil.getOutermostPackage(newElement, sqlRepository));
                                tggPackage.loadTreeFromTaggedValue();

                                CSPInstanceDialog cspInstanceDialog = new CSPInstanceDialog(sqlRepository, sqlRepository.GetElementByID(newElement.ElementID), new TGGCSPController(tggPackage));
                                cspInstanceDialog.ShowDialog();
                            }
                        }
                    }
                }
                else if (TGGModelingMain.TggRulesDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;
                    if (newElement.Type == Main.EAClassType && (newElement.Stereotype == TGGModelingMain.TggRuleStereotype))
                    {
                        newElement = EAUtil.sqlEAObjectToOriginalObject(sqlRepository, newElement) as EA.Element;

                        EA.Diagram ruleDiagram = newElement.Diagrams.AddNew(newElement.Name, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram;
                        ruleDiagram.Update();

                        EA_OnNotifyContextItemModified(sqlRepository.GetOriginalRepository(), newElement.ElementGUID, EA.ObjectType.otElement);
                    }
                }
                else if (TGGModelingMain.TggPatternsDiagramMetatype.Contains(currentDiagram.MetaType))
                {
                    sqlRepository.SuppressEADialogs = true;
                }
            }
            catch
            {
            }
            return(true);
        }
        private Boolean createCorrespondenceObjectWithLinks(EA.Repository Repositorya, EA.EventProperties Info)
        {
            DateTime      t1         = DateTime.Now;
            SQLRepository Repository = new SQLRepository(Repositorya, false);

            EA.Diagram curDiagram = Repository.GetCurrentDiagram();

            int tggPackageId = EAUtil.getOutermostPackage(curDiagram, Repository).PackageID;

            BindingOperator newBindingOperator = BindingOperator.CHECK_ONLY;

            SQLElement clientOv   = Repository.GetElementByID(int.Parse(Info.Get("ClientID").Value.ToString()));
            SQLElement supplierOv = Repository.GetElementByID(int.Parse(Info.Get("SupplierID").Value.ToString()));

            EA.Element ruleClass = Repository.GetOriginalRepository().GetElementByID(clientOv.ParentID);

            SQLElement clientClassifier   = Repository.GetElementByID(clientOv.ClassifierID);
            SQLElement supplierClassifier = Repository.GetElementByID(supplierOv.ClassifierID);

            //compute domains of source and target classifiers
            DomainType clientDomain   = TGGModelingUtil.getDomainOfObjectVariable(Repository, new TGGObjectVariable(clientOv, Repository));
            DomainType supplierDomain = TGGModelingUtil.getDomainOfObjectVariable(Repository, new TGGObjectVariable(supplierOv, Repository));

            //get possible correspondence classes with connectors
            Dictionary <int, List <SQLConnector> > possibleCorrespondencesLinkWithConnectors = computeCorrespondencesWithLinks(clientClassifier, supplierClassifier, Repository, tggPackageId);

            //check for existing bindingOperator
            SQLTaggedValue bindingOperatorTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(clientOv, ObjectVariable.BindingOperatorTaggedValueName);

            if (bindingOperatorTag != null)
            {
                newBindingOperator = (BindingOperator)Enum.Parse(typeof(BindingOperator), bindingOperatorTag.Value.ToUpper());
            }

            //create new correspondence ov
            EA.Element tggCorrespondenceObject = ruleClass.Elements.AddNew("", Main.EAObjectType) as EA.Element;
            tggCorrespondenceObject.Update();

            //dont know what this line does :)
            EA_OnNotifyContextItemModified(Repository.GetOriginalRepository(), tggCorrespondenceObject.ElementGUID, EA.ObjectType.otElement);

            //create connector from correspondence object to client ov
            EA.Connector connectorToClient = tggCorrespondenceObject.Connectors.AddNew("", ECOREModelingMain.EReferenceConnectorType) as EA.Connector;
            connectorToClient.SupplierID = clientOv.ElementID;

            connectorToClient.Direction = "Unspecified";
            connectorToClient.Update();
            tggCorrespondenceObject.Connectors.Refresh();

            //create connector from correspondence object to supplier ov
            EA.Connector connectorToTarget = tggCorrespondenceObject.Connectors.AddNew("", ECOREModelingMain.EReferenceConnectorType) as EA.Connector;
            connectorToTarget.SupplierID = supplierOv.ElementID;
            connectorToTarget.Direction  = "Unspecified";
            connectorToTarget.Update();
            tggCorrespondenceObject.Connectors.Refresh();

            createCorrespondenceDiagramObject(curDiagram, Repository.GetOriginalRepository(), clientOv.getRealElement(), supplierOv.getRealElement(), tggCorrespondenceObject);

            SelectCorrespondenceObject selectCorr = new SelectCorrespondenceObject(possibleCorrespondencesLinkWithConnectors, Repository.GetElementByID(tggCorrespondenceObject.ElementID), Repository, newBindingOperator, clientClassifier, supplierClassifier, clientOv, supplierOv);

            if (selectCorr.DialogResult == DialogResult.Cancel)
            {
                return(true);
            }

            //compute correct linkDialogueEntries so the rolenames can be set correctly

            LinkDialogueEntry sourceEntry = computeLinkDialogEntry("source", possibleCorrespondencesLinkWithConnectors[selectCorr.selectedCorrespondenceLinkId]);
            LinkDialogueEntry targetEntry = computeLinkDialogEntry("target", possibleCorrespondencesLinkWithConnectors[selectCorr.selectedCorrespondenceLinkId]);

            TGGLinkVariable sourceLv = new TGGLinkVariable(Repository.GetConnectorByID(connectorToClient.ConnectorID), Repository);

            sourceLv.BindingOperator = newBindingOperator;

            TGGLinkVariable targetLv = new TGGLinkVariable(Repository.GetConnectorByID(connectorToTarget.ConnectorID), Repository);

            targetLv.BindingOperator = newBindingOperator;

            if (clientDomain == DomainType.SOURCE && supplierDomain == DomainType.TARGET)
            {
                sourceLv.linkDialogueEntry = sourceEntry;
                targetLv.linkDialogueEntry = targetEntry;
            }
            else if (clientDomain == DomainType.TARGET && supplierDomain == DomainType.SOURCE)
            {
                sourceLv.linkDialogueEntry = targetEntry;
                targetLv.linkDialogueEntry = sourceEntry;
            }
            else
            {
                sourceLv.linkDialogueEntry = sourceEntry;
                targetLv.linkDialogueEntry = targetEntry;
            }
            sourceLv.saveTreeToEATaggedValue(true);
            targetLv.saveTreeToEATaggedValue(true);


            Repository.ReloadDiagram(curDiagram.DiagramID);



            return(true);
        }
        private Dictionary <int, List <SQLConnector> > computeCorrespondencesWithLinks(SQLElement clientClassifier, SQLElement targetClassifier, SQLRepository Repository, int tggPackageId)
        {
            DateTime time1 = DateTime.Now;

            Dictionary <int, List <SQLConnector> > possibleCorrespondencesLinkWithConnectors = new Dictionary <int, List <SQLConnector> >();

            foreach (SQLElement clientAndBases in EAUtil.getBaseClasses(clientClassifier))
            {
                foreach (SQLConnector conOfClientClassifier in clientAndBases.Connectors)
                {
                    SQLElement elementOnOtherSide = null;
                    if (conOfClientClassifier.ClientID == clientAndBases.ElementID)
                    {
                        elementOnOtherSide = Repository.GetElementByID(conOfClientClassifier.SupplierID);
                    }
                    else if (conOfClientClassifier.SupplierID == clientAndBases.ElementID)
                    {
                        elementOnOtherSide = Repository.GetElementByID(conOfClientClassifier.ClientID);
                    }
                    if (elementOnOtherSide.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype && EAUtil.getOutermostPackage(elementOnOtherSide, Repository).PackageID == tggPackageId)
                    {
                        foreach (SQLConnector conOfTGGCorrType in elementOnOtherSide.Connectors)
                        {
                            foreach (SQLElement targetAndBases in EAUtil.getBaseClasses(targetClassifier))
                            {
                                if (conOfTGGCorrType.ClientID == targetAndBases.ElementID || conOfTGGCorrType.SupplierID == targetAndBases.ElementID)
                                {
                                    foreach (SQLElement subClass in EAUtil.findSubclasses(elementOnOtherSide, Repository))
                                    {
                                        List <SQLConnector> refs = new List <SQLConnector>();
                                        refs.Add(conOfTGGCorrType);
                                        refs.Add(conOfClientClassifier);
                                        if (!possibleCorrespondencesLinkWithConnectors.ContainsKey(subClass.ElementID))
                                        {
                                            possibleCorrespondencesLinkWithConnectors.Add(subClass.ElementID, refs);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(possibleCorrespondencesLinkWithConnectors);
        }