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); } }
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); }
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); } } } } }
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); }