private static void printCSPConstraintObject(EA.Element child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints) { SQLRepository sqlRep = new SQLRepository(repository, false); TGGObjectVariable ov = new TGGObjectVariable(sqlRep.GetElementByID(child.ElementID), sqlRep); ov.loadTreeFromTaggedValue(); int x = 4; int y = 1; while (usedPoints.Contains(new Point(x, y))) { y++; } EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject; diagObject.ElementID = child.ElementID; diagObject.left = x * 200; diagObject.right = diagObject.left + 125; diagObject.top = y * -100; diagObject.bottom = diagObject.top - 50; diagObject.Update(); usedPoints.Add(new Point(x, y)); }
private void addTGGElementToRuleFromSchema(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied) { EA.Element newElement = newRuleElement.Elements.AddNew(elementToBeCopied.Name.Substring(0, 1).ToLower() + elementToBeCopied.Name.Substring(1, elementToBeCopied.Name.Length - 1), Main.EAObjectType) as EA.Element; newElement.ClassifierID = elementToBeCopied.ElementID; newElement.Update(); newElementIdToNewElement.Add(newElement.ElementID, newElement); oldElementIdToNewElementId.Add(elementToBeCopied.ElementID, newElement.ElementID); EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newElement.Type) as EA.DiagramObject; newDiagramObject.ElementID = newElement.ElementID; newDiagramObject.left = diagramObjectToBeCopied.left; newDiagramObject.right = diagramObjectToBeCopied.right; newDiagramObject.top = diagramObjectToBeCopied.top; newDiagramObject.bottom = diagramObjectToBeCopied.bottom; newDiagramObject.Update(); SQLElement sqlElement = repository.GetElementByID(newElement.ElementID); if (elementToBeCopied.Stereotype == ECOREModeling.ECOREModelingMain.EClassStereotype) { TGGObjectVariable tggOv = new TGGObjectVariable(sqlElement, repository); tggOv.loadTreeFromTaggedValue(); tggOv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE; tggOv.saveTreeToEATaggedValue(true); } else if (elementToBeCopied.Stereotype == TGGModelingMain.TggCorrespondenceTypeStereotype) { TGGCorrespondence tggCorr = new TGGCorrespondence(sqlElement, repository); tggCorr.loadTreeFromTaggedValue(); tggCorr.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CREATE; tggCorr.saveTreeToEATaggedValue(true); } }
private static void printTGGOvObject(SQLElement child, EA.Diagram diagram, EA.Repository repository, List <Point> usedPoints) { TGGObjectVariable ov = new TGGObjectVariable(child, new SQLRepository(repository, false)); ov.loadTreeFromTaggedValue(); int x = 1; int y = 1; if (ov.domain == DomainType.TARGET) { x = 3; } while (usedPoints.Contains(new Point(x, y))) { y++; } EA.DiagramObject diagObject = diagram.DiagramObjects.AddNew("", "") as EA.DiagramObject; diagObject.ElementID = child.ElementID; diagObject.left = x * 200; diagObject.right = diagObject.left + 125; diagObject.top = y * -100; diagObject.bottom = diagObject.top - 50; diagObject.Update(); usedPoints.Add(new Point(x, y)); }
private void onTggOvDoubleClicked(SQLRepository sqlRepository, EA.Element doubleClickedElement) { TGGObjectVariable tggObjectVariable = new TGGObjectVariable(sqlRepository.GetElementByID(doubleClickedElement.ElementID), sqlRepository); this.ObjectVariableDialog = new OvDialog(sqlRepository, tggObjectVariable); ObjectVariableDialog.ShowDialog(); }
private static DomainType determineDomainUsingPrefixConvention(TGGObjectVariable tggOv, SQLRepository repository) { if (tggOv.Name.StartsWith("src__")) { return(DomainType.SOURCE); } else if (tggOv.Name.StartsWith("trg__")) { return(DomainType.TARGET); } return(DomainType.UNDEFINED); }
public static List <ObjectVariable> getTGGObjectVariablesInTggRule(TGGRule tggRule, SQLRepository repository) { List <ObjectVariable> ovs = new List <ObjectVariable>(); String tggOvQuery = repository.SQLQuery("select a.Name, max(a.Classifier) as Classifier from t_object a where a.Stereotype = '" + TGGModelingMain.TggObjectVariableStereotype + "' and a.ParentID = " + tggRule.rule.ElementID + " group by a.Name"); foreach (String row in EAEcoreAddin.Util.EAUtil.getXMLNodeContentFromSQLQueryString(tggOvQuery, "Row")) { SQLElement actOV = new SQLElement(repository, row); TGGObjectVariable tggOv = new TGGObjectVariable(actOV, repository); ovs.Add(tggOv); } return(ovs); }
public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository) { List <String> results = new List <string>(); if (eaElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype || eaElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype) { TGGObjectVariable tggOV = new TGGObjectVariable(eaElement, repository); DomainType domain = TGGModelingUtil.getDomainOfObjectVariable(repository, tggOV); if (domain == DomainType.UNDEFINED) { results.Add("Domain of the Object Variable (source or target) cannot be defined. Prefix the name of this object variable with \"src__\" or \"trg__\"."); } } return(results); }
public static DomainType getDomainOfLinkVariable(SQLRepository repository, SQLConnector tggLv) { TGGObjectVariable supplier = new TGGObjectVariable(repository.GetElementByID(tggLv.SupplierID), repository); TGGObjectVariable client = new TGGObjectVariable(repository.GetElementByID(tggLv.ClientID), repository); DomainType supplierDom = getDomainOfObjectVariable(repository, supplier); DomainType clientDom = getDomainOfObjectVariable(repository, client); if (!supplierDom.Equals(clientDom)) { return(DomainType.CORRESPONDENCE); } else { return(supplierDom); } }
public MocaNode processTggObjectVariable(SQLElement objectVariable) { SQLTaggedValue mocaTreeTag = EAEcoreAddin.Util.EAUtil.findTaggedValue(objectVariable, Main.MoflonExportTreeTaggedValueName); ObjectVariable ov = null; if (objectVariable.Stereotype == TGGModelingMain.TggObjectVariableStereotype) { ov = new TGGObjectVariable(objectVariable, repository); } else if (objectVariable.Stereotype == TGGModelingMain.TggCorrespondenceStereotype) { ov = new TGGCorrespondence(objectVariable, repository); } SQLElement classifier = repository.GetElementByID(objectVariable.ClassifierID); ExportMain.computeAndAddToDependencies(repository, classifier); MocaNode ovMocaNode = new MocaNode(); ovMocaNode.deserializeFromXmlTree(MocaTreeUtil.stringToXmlDocument(mocaTreeTag.Notes).DocumentElement.FirstChild as XmlElement); ov.addAttributesDuringExport(ovMocaNode); this.currentNode.appendChildNode(ovMocaNode); foreach (SQLConnector linkVariable in objectVariable.Connectors) { try { SQLElement source = repository.GetElementByID(linkVariable.ClientID); SQLElement target = repository.GetElementByID(linkVariable.SupplierID); if ((linkVariable.Stereotype == TGGModelingMain.TggLinkVariableStereotype || linkVariable.Type == Main.EAAssociationType) && linkVariable.ClientID == objectVariable.ElementID) { this.currentNode = ovMocaNode.getChildNodeWithName(ObjectVariable.OutgoingLinksNodeName); processTggLinkVariable(linkVariable); } } catch { } } return(ovMocaNode); }
private static DomainType determineDomainSimple(SQLRepository repository, TGGObjectVariable tggOv) { if (tggOv.sqlElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype) { return(DomainType.CORRESPONDENCE); } EClass classifierElement = tggOv.Classifier; if (classifierElement != null) { SQLElement eClass = repository.GetElementByID(classifierElement.EaElement.ElementID); SQLPackage wantedDomainPkg = repository.GetPackageByID(eClass.PackageID); while (!wantedDomainPkg.IsModel) { wantedDomainPkg = repository.GetPackageByID(wantedDomainPkg.ParentID); } SQLPackage tggPackage = repository.GetPackageByID(tggOv.sqlElement.PackageID); while (!tggPackage.IsModel) { tggPackage = repository.GetPackageByID(tggPackage.ParentID); } TGG tgg = new TGG(repository, tggPackage); tgg.loadTreeFromTaggedValue(); // source metamodel == target metamodel if (tgg.getDomain(DomainType.SOURCE).MetamodelGuid == tgg.getDomain(DomainType.TARGET).MetamodelGuid) { return(determineDomainUsingPrefixConvention(tggOv, repository)); } if (wantedDomainPkg.PackageGUID == tgg.getDomain(DomainType.SOURCE).MetamodelGuid) { return(DomainType.SOURCE); } else if (wantedDomainPkg.PackageGUID == tgg.getDomain(DomainType.TARGET).MetamodelGuid) { return(DomainType.TARGET); } } return(determineDomainUsingPrefixConvention(tggOv, repository)); }
public static ObjectVariable createCorrectOvType(SQLElement eaElement, SQLRepository repository) { ObjectVariable ov = null; if (eaElement.Stereotype == SDMModelingMain.ObjectVariableStereotype) { ov = new ObjectVariable(eaElement, repository); } else if (eaElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype) { ov = new TGGObjectVariable(eaElement, repository); } else if (eaElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype) { ov = new TGGCorrespondence(eaElement, repository); } return(ov); }
private static DomainType determineDomainUsingDirectCorrespondence(TGGObjectVariable tggOv, SQLRepository repository) { int itsID = tggOv.sqlElement.ElementID; foreach (SQLConnector connector in tggOv.sqlElement.Connectors) { if (connector.ClientID == itsID && connector.ClientEnd.Role == "target") { TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.SupplierID), repository); if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE) { return(DomainType.TARGET); } } else if (connector.SupplierID == itsID && connector.SupplierEnd.Role == "target") { TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.ClientID), repository); if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE) { return(DomainType.TARGET); } } else if (connector.ClientID == itsID && connector.ClientEnd.Role == "source") { TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.SupplierID), repository); if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE) { return(DomainType.SOURCE); } } else if (connector.SupplierID == itsID && connector.SupplierEnd.Role == "source") { TGGObjectVariable potentialCorr = new TGGObjectVariable(repository.GetElementByID(connector.ClientID), repository); if (getDomainOfObjectVariable(repository, potentialCorr) == DomainType.CORRESPONDENCE) { return(DomainType.SOURCE); } } } return(DomainType.UNDEFINED); }
public override void doRuleQuickFix(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository, int i, String errorMessage) { if (errorMessage == "AttributeAssignments and BindingOperator check_only is not allowed") { if (i == 0) { TGGObjectVariable tggOv = new TGGObjectVariable(eaElement, repository); tggOv.loadTreeFromTaggedValue(); TGGModelingUtil.assignmentsToConstraints(tggOv, repository); tggOv.saveTreeToEATaggedValue(true); } else if (i == 1) { TGGObjectVariable tggOv = new TGGObjectVariable(eaElement, repository); tggOv.loadTreeFromTaggedValue(); tggOv.BindingOperator = BindingOperator.CREATE; tggOv.saveTreeToEATaggedValue(true); } } }
private static DomainType determineDomainUsingConnectivity(TGGObjectVariable tggOv, SQLRepository repository, HashSet <int> alreadyVisited) { alreadyVisited.Add(tggOv.sqlElement.ElementID); DomainType result = DomainType.UNDEFINED; result = determineDomainSimple(repository, tggOv); if (result != DomainType.UNDEFINED) { return(result); } result = determineDomainUsingDirectCorrespondence(tggOv, repository); if (result != DomainType.UNDEFINED) { return(result); } int itsID = tggOv.sqlElement.ElementID; foreach (SQLConnector connector in tggOv.sqlElement.Connectors) { SQLElement client = repository.GetElementByID(connector.ClientID); SQLElement supplier = repository.GetElementByID(connector.SupplierID); SQLElement neighbour = client.ElementID == itsID ? supplier : client; if (!alreadyVisited.Contains(neighbour.ElementID) && neighbour.Stereotype == TGGModelingMain.TggObjectVariableStereotype) { DomainType neigbourDomain = determineDomainUsingConnectivity(new TGGObjectVariable(neighbour, repository), repository, alreadyVisited); if (neigbourDomain != DomainType.UNDEFINED) { return(neigbourDomain); } } } return(DomainType.UNDEFINED); }
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 void addElementCopyToRule(EA.Element elementToBeCopied, EA.DiagramObject diagramObjectToBeCopied) { EA.Element newElement = newRuleElement.Elements.AddNew(elementToBeCopied.Name.Substring(0, 1).ToLower() + elementToBeCopied.Name.Substring(1, elementToBeCopied.Name.Length - 1), elementToBeCopied.Type) as EA.Element; newElement.Stereotype = elementToBeCopied.Stereotype; newElement.ClassifierID = elementToBeCopied.ClassifierID; newElement.Notes = elementToBeCopied.Notes; newElement.Update(); newElementIdToNewElement.Add(newElement.ElementID, newElement); oldElementIdToNewElementId.Add(elementToBeCopied.ElementID, newElement.ElementID); foreach (EA.TaggedValue tags in elementToBeCopied.TaggedValues) { EA.TaggedValue newTag = newElement.TaggedValues.AddNew(tags.Name, "") as EA.TaggedValue; if (!checkBoxExactCopy.Checked) { newTag.Value = tags.Value.Replace(elementToBeCopied.ElementGUID, newElement.ElementGUID).Replace("create", "check_only"); newTag.Notes = tags.Notes.Replace(elementToBeCopied.ElementGUID, newElement.ElementGUID).Replace("\"bindingOperator\" value=\"create", "\"bindingOperator\" value=\"check_only"); } else { newTag.Value = tags.Value; newTag.Notes = tags.Notes; } newTag.Update(); } EA.DiagramObject newDiagramObject = newRuleDiagram.DiagramObjects.AddNew("", newElement.Type) as EA.DiagramObject; newDiagramObject.ElementID = newElement.ElementID; newDiagramObject.left = diagramObjectToBeCopied.left; newDiagramObject.right = diagramObjectToBeCopied.right; newDiagramObject.top = diagramObjectToBeCopied.top; newDiagramObject.bottom = diagramObjectToBeCopied.bottom; newDiagramObject.Update(); if (newElement.Stereotype == TGGModelingMain.TggObjectVariableStereotype) { TGGObjectVariable tggOv = new TGGObjectVariable(repository.GetElementByID(newElement.ElementID), repository); tggOv.loadTreeFromTaggedValue(); if (!checkBoxExactCopy.Checked) { tggOv.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CHECK_ONLY; TGGModelingUtil.assignmentsToConstraints(tggOv, repository); } tggOv.saveTreeToEATaggedValue(true); } else if (newElement.Stereotype == TGGModelingMain.TggCorrespondenceStereotype) { TGGCorrespondence tggCorr = new TGGCorrespondence(repository.GetElementByID(newElement.ElementID), repository); tggCorr.loadTreeFromTaggedValue(); if (!checkBoxExactCopy.Checked) { tggCorr.BindingOperator = SDMModeling.SDMExportWrapper.patterns.BindingOperator.CHECK_ONLY; TGGModelingUtil.assignmentsToConstraints(tggCorr, repository); } tggCorr.saveTreeToEATaggedValue(true); } else if (newElement.Stereotype == TGGModelingMain.CSPConstraintStereotype) { CSPInstance instance = new CSPInstance(repository, repository.GetElementByID(newElement.ElementID)); instance.loadTreeFromTaggedValue(); instance.saveTreeToEATaggedValue(true); } }
public TggOvExpressionProvider(TGGObjectVariable ov, SQLRepository repository) : base(ov, repository) { }
public static DomainType getDomainOfObjectVariable(SQLRepository repository, TGGObjectVariable tggOv) { return(determineDomainUsingConnectivity(tggOv, repository, new HashSet <int>())); }
private void importRule(SQLPackage modelPackage, MocaNode ruleNode) { EA.Element ruleElement = MainImport.getInstance().EcoreImport.getOrCreateElement(modelPackage, ruleNode, Main.EAClassType); if (ruleElement.Diagrams.Count == 0) { EA.Diagram ruleDiagram = ruleElement.Diagrams.AddNew(ruleElement.Name, TGGModelingMain.TggRuleDiagramMetatype[0]) as EA.Diagram; ruleDiagram.Update(); MainImport.getInstance().DiagramsToBeFilled.Add(ruleDiagram); } EA.Method mainMethod = MainImport.getInstance().EcoreImport.getOrCreateMethod(sqlRep.GetElementByID(ruleElement.ElementID), ruleNode.getAttributeOrCreate("mainMethodGuid").Value, ruleElement.Name, ""); MocaNode parametersNode = ruleNode.getChildNodeWithName(EOperation.ParametersChildNodeName); if (parametersNode != null) { foreach (MocaNode paramNode in parametersNode.Children) { EA.Parameter parameter = MainImport.getInstance().EcoreImport.getOrCreateParameter(mainMethod, paramNode); MainImport.getInstance().OldGuidToNewGuid.Add(paramNode.getAttributeOrCreate(Main.GuidStringName).Value, parameter.ParameterGUID); } } EClass eClass = MainImport.getInstance().EcoreImport.importEClassFeatures(ruleNode, sqlRep.GetElementByID(ruleElement.ElementID)); MainImport.getInstance().MocaTaggableElements.Remove(eClass); TGGRule rule = new TGGRule(sqlRep, sqlRep.GetElementByID(ruleElement.ElementID)); rule.deserializeFromMocaTree(ruleNode); MainImport.getInstance().MocaTaggableElements.Add(rule); foreach (MocaNode ovNode in ruleNode.getChildNodeWithName(StoryPattern.ObjectVariablesChildNodeName).Children) { if (ovNode.Name == TGGModelingMain.TggObjectVariableStereotype) { ObjectVariable ov = MainImport.getInstance().SdmImport.importObjectVariable(sqlRep.GetElementByID(ruleElement.ElementID), ovNode); MainImport.getInstance().MocaTaggableElements.Remove(ov); ov = new TGGObjectVariable(ov.sqlElement, sqlRep); ov.deserializeFromMocaTree(ovNode); MainImport.getInstance().MocaTaggableElements.Add(ov); } else if (ovNode.Name == TGGCorrespondence.CorrespondenceNodeName) { ObjectVariable ov = MainImport.getInstance().SdmImport.importObjectVariable(sqlRep.GetElementByID(ruleElement.ElementID), ovNode); MainImport.getInstance().MocaTaggableElements.Remove(ov); ov = new TGGCorrespondence(ov.sqlElement, sqlRep); ov.deserializeFromMocaTree(ovNode); MainImport.getInstance().MocaTaggableElements.Add(ov); } } MocaNode cspsNode = ruleNode.getChildNodeWithName(TGGRule.CspsChildNodeName); if (cspsNode != null) { foreach (MocaNode cspInstanceNode in cspsNode.Children) { importTGGCSP(sqlRep.GetElementByID(ruleElement.ElementID), cspInstanceNode); } } else { if (ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value != "") { EA.Element constraintElement = ruleElement.Elements.AddNew("", Main.EAClassType) as EA.Element; constraintElement.Stereotype = TGGModelingMain.CSPConstraintStereotype; constraintElement.Notes = ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value; constraintElement.Update(); CSPInstance cspInstance = new CSPInstance(sqlRep, sqlRep.GetElementByID(constraintElement.ElementID)); cspInstance.CspStringValueFromImport = ruleNode.getAttributeOrCreate(TGGRule.CspSpecAttributeName).Value; MainImport.getInstance().MocaTaggableElements.Add(cspInstance); } } }