private void buttonOk_Click(object sender, EventArgs e) { List <String> constraintEntries = new List <string>(); foreach (CSPInstanceEntry entry in constraintInstance.createdEntries) { constraintEntries.Add(entry.ToString()); } //save existing connectors List <SQLConnector> existingConnectors = new List <SQLConnector>(); foreach (SQLConnector actCon in constraintElement.Connectors) { existingConnectors.Add(actCon); } Dictionary <SQLElement, EA.DiagramObject> elementsToDiagramObjects = new Dictionary <SQLElement, EA.DiagramObject>(); List <SQLConnector> validConnectors = new List <SQLConnector>(); EA.Diagram currentDiagram = repository.GetCurrentDiagram(); if (currentDiagram != null) { repository.SaveDiagram(currentDiagram.DiagramID); foreach (EA.DiagramObject diagObject in currentDiagram.DiagramObjects) { SQLElement currentElement = repository.GetElementByID(diagObject.ElementID); elementsToDiagramObjects.Add(currentElement, diagObject); } //check for all constrant entries foreach (String consString in constraintEntries) { MatchCollection matches = Regex.Matches(consString, @"[a-z0-9_]+\.[a-z0-9_]+", RegexOptions.IgnoreCase); foreach (Match match in matches) { Boolean connectionAlreadyExisting = false; String[] values = match.Value.Split('.'); String objectName = values[0]; String attributeName = values[1]; //if connection already existing connectionAlreadyExisting = checkForConnectionExistence(existingConnectors, validConnectors, objectName, attributeName); //otherwise create new connection to object for current constraint entry if (!connectionAlreadyExisting) { EA.Connector newConnection = createNewConnection(elementsToDiagramObjects, currentDiagram, objectName, attributeName); if (newConnection != null) { validConnectors.Add(repository.GetConnectorByID(newConnection.ConnectorID)); } } } } //find all invalid connectors List <SQLConnector> consToDelete = new List <SQLConnector>(); constraintElement.Connectors.Refresh(); foreach (SQLConnector con in constraintElement.Connectors) { Boolean conValid = false; foreach (SQLConnector validCon in validConnectors) { if (con.ConnectorID == validCon.ConnectorID) { conValid = true; } } if (!conValid) { consToDelete.Add(con); } } //delete all invalid connectors foreach (SQLConnector toDelete in consToDelete) { EAUtil.deleteConnector(toDelete.getRealConnector(), repository.GetOriginalRepository()); } repository.ReloadDiagram(currentDiagram.DiagramID); } constraintInstance.saveTreeToEATaggedValue(true); Close(); }
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); } }