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