adviseChange() публичный Метод

public adviseChange ( TSF.UmlToolingFramework.UML element ) : void
element TSF.UmlToolingFramework.UML
Результат void
Пример #1
0
        /// <summary>
        /// Correct detected defect based on value in contentCorrect attribute
        /// </summary>
        /// <param name="element">Defected element</param>
        /// <param name="model">Wrapper EA.Repository object</param>
        /// <returns>true if correction was successful, else false</returns>
        public bool correct(object element, Model model)
        {
            string[] correctCall = contentCorrect.Split('@');

            for (int i = 0; i < correctCall.Length; i++)
            {
                try
                {
                    if (correctCall[i].StartsWith("setName"))
                    {
                        string[] nameExpression = correctCall[i].Split('(', ')')[1].Split('.');
                        for (int j = 0; j < nameExpression.Length; j++)
                        {
                            if (nameExpression[j] == "dict")
                            {
                                Dictionary dict = new Dictionary();
                                if (nameExpression[j + 1].StartsWith("getBaseNoun"))
                                {
                                    string attributeName = correctCall[i].Split('(', ')')[2];
                                    string value = getStringAttributeValue(element, attributeName);
                                    string word = dict.getBaseNoun(value);

                                    if (word == "")
                                    {
                                        return false;
                                    }

                                    setStringAttributeValue(element, attributeName, word);
                                    try
                                    {
                                        model.adviseChange((new ElementWrapper(model, (EA.Element)element)));
                                        RuleService.active.Remove(getStringAttributeValue(element, "GUID"));
                                    }
                                    catch (Exception ex) { }

                                    return true;
                                }
                            }
                            else
                            {
                                setStringAttributeValue(element, attributeType, nameExpression[j]);
                                try
                                {
                                    if (element is EA.Connector)
                                    {
                                        model.adviseChange(new ConnectorWrapper(model, (EA.Connector)element));
                                    }
                                    else
                                    {
                                        model.adviseChange(new ElementWrapper(model, (EA.Element)element));
                                    }
                                }
                                catch (Exception ex) { }

                                return true;
                            }
                        }
                    }

                    if (correctCall[i].StartsWith("setCardinalities"))
                    {
                        string nameExpression = correctCall[i].Split('(', ')')[1];

                        object objectClient = getAttributeValue(element, "ClientEnd");
                        string cardinalityClient = getStringAttributeValue(objectClient, "Cardinality");

                        object objectSupplier = getAttributeValue(element, "SupplierEnd");
                        string cardinalitySupplier = getStringAttributeValue(objectSupplier, "Cardinality");

                        if (String.IsNullOrEmpty(cardinalityClient))
                        {
                            setStringAttributeValue(objectClient, "Cardinality", nameExpression);
                        }

                        if (String.IsNullOrEmpty(cardinalitySupplier))
                        {
                            setStringAttributeValue(objectSupplier, "Cardinality", nameExpression);
                        }

                        try
                        {
                            model.adviseChange(new ConnectorWrapper(model, (EA.Connector)element));
                        }
                        catch (Exception ex) { }
                    }

                    if (correctCall[i].StartsWith("setExtensionPointsCount"))
                    {
                        string nameExpression = correctCall[i].Split('(', ')')[1];
                        if (nameExpression.StartsWith("Connector"))
                        {
                            string expr = nameExpression.Split('.')[1];
                            if (expr == "getStereotypeCount")
                            {
                                string stereotype = correctCall[i].Split('(', ')')[2];
                                int stereotypeCount = 0;

                                foreach (EA.Connector con in (EA.Collection)getAttributeValue(element, "Connectors"))
                                {
                                    if (stereotype == con.Stereotype)
                                    {
                                        stereotypeCount++;
                                    }
                                }

                                string extensionPoints = getStringAttributeValue(element, attributeType);
                                int num = Math.Abs(extensionPoints.Count(c => c == ',') - stereotypeCount);
                                if (num > 1) num--;

                                for (int k = 0; k < num; k++)
                                {
                                    extensionPoints += "," + k + 1 + " extension point,";
                                }

                                setStringAttributeValue(element, attributeType, extensionPoints);

                                try
                                {
                                    model.adviseChange((new ElementWrapper(model, (EA.Element)element)));
                                    RuleService.active.Remove(getStringAttributeValue(element, "GUID"));
                                }
                                catch (Exception ex) { }

                                return true;
                            }
                        }
                    }

                    if (correctCall[i].StartsWith("setTransitionGuard"))
                    {
                        string nameExpression = correctCall[i].Split('(', ')')[1];

                        setStringAttributeValue(element, attributeType, nameExpression);

                        try
                        {
                            model.adviseChange(new ConnectorWrapper(model, (EA.Connector)element));
                        }
                        catch (Exception ex) { }
                    }

                    if (correctCall[i] == "createDecisionNode")
                    {
                        object owner = getConnectorOwner(element, model, "src");
                        object target = getConnectorOwner(element, model, "target");

                        EA.Collection collection = (EA.Collection)getAttributeValue(owner, "Connectors");
                        EA.Collection elements = model.getWrappedModel().GetPackageByID(Convert.ToInt32(getStringAttributeValue(owner, "PackageID"))).Elements;
                        EA.Collection connectors = model.getWrappedModel().GetPackageByID(Convert.ToInt32(getStringAttributeValue(owner, "PackageID"))).Connectors;

                        EA.Element decisionNode = (EA.Element)elements.AddNew("", "Decision");
                        decisionNode.Update();
                        elements.Refresh();

                        EA.Diagram diagram = model.getWrappedModel().GetCurrentDiagram();
                        EA.DiagramObject ownerDO = new Diagram(model, diagram).getdiagramObjectForElement(new ElementWrapper(model, (EA.Element)owner));

                        int l = ownerDO.left;
                        int b = ownerDO.bottom;
                        string coordinates = "l=" + (l + 20) + "r=" + (l + 60) + "t=" + (b - 50) + "b=" + (b - 90) + ";";

                        EA.DiagramObject displayElement = (EA.DiagramObject)diagram.DiagramObjects.AddNew(coordinates, "");

                        displayElement.ElementID = decisionNode.ElementID;
                        displayElement.Sequence = 1;
                        displayElement.Update();
                        diagram.DiagramObjects.Refresh();
                        diagram.Update();

                        EA.Connector connector = (EA.Connector)connectors.AddNew("", "ControlFlow");
                        connectors.Refresh();

                        connector.ClientID = Convert.ToInt32(getStringAttributeValue(owner, "ElementID"));
                        connector.SupplierID = decisionNode.ElementID;
                        connector.Update();

                        foreach (EA.Connector con in (EA.Collection)getAttributeValue(owner, "Connectors"))
                        {
                            if (con.ClientID == ((EA.Element)owner).ElementID)
                            {
                                con.ClientID = decisionNode.ElementID;
                                con.TransitionGuard = "guard";
                                con.Update();
                            }
                        }

                        model.refreshDiagram(new Diagram(model, diagram));

                        return true;
                    }

                    if (correctCall[i] == "createInitialNode")
                    {
                        EA.Diagram diagram = model.getWrappedModel().GetCurrentDiagram();
                        EA.Collection elements = model.getWrappedModel().GetPackageByID(Convert.ToInt32(getStringAttributeValue(diagram, "PackageID"))).Elements;

                        EA.Element initialNode = (EA.Element)elements.AddNew("", "StateNode");
                        initialNode.Subtype = 100;
                        initialNode.Name = "pociatocny uzol";
                        initialNode.Update();
                        elements.Refresh();

                        EA.DiagramObject displayElement = (EA.DiagramObject)diagram.DiagramObjects.AddNew("l=0;r=0;t=0;b=0;", "");
                        displayElement.ElementID = initialNode.ElementID;
                        displayElement.Sequence = 1;
                        displayElement.Update();
                        diagram.DiagramObjects.Refresh();
                        diagram.Update();

                        model.refreshDiagram(new Diagram(model, diagram));

                        return true;
                    }

                    if (correctCall[i] == "createFinalNode")
                    {
                        EA.Diagram diagram = model.getWrappedModel().GetCurrentDiagram();
                        EA.Collection elements = model.getWrappedModel().GetPackageByID(Convert.ToInt32(getStringAttributeValue(diagram, "PackageID"))).Elements;

                        EA.Element initialNode = (EA.Element)elements.AddNew("", "StateNode");
                        initialNode.Subtype = 101;
                        initialNode.Name = "koncovy uzol";
                        initialNode.Update();
                        elements.Refresh();

                        EA.DiagramObject displayElement = (EA.DiagramObject)diagram.DiagramObjects.AddNew("l=0;r=0;t=0;b=0;", "");
                        displayElement.ElementID = initialNode.ElementID;
                        displayElement.Sequence = 1;
                        displayElement.Update();
                        diagram.DiagramObjects.Refresh();
                        diagram.Update();

                        model.refreshDiagram(new Diagram(model, diagram));

                        return true;
                    }

                    if (correctCall[i] == "addIncludeToScenario")
                    {
                        EA.Collection scenarios = (EA.Collection)getAttributeValue(element, "Scenarios");
                        EA.Scenario scenario = (EA.Scenario)scenarios.GetAt(0);
                        XElement xElement = XElement.Parse(scenario.XMLContent);

                        try
                        {
                            EA.Collection connectors = (EA.Collection)getAttributeValue(element, "Connectors");
                            IEnumerable<XElement> max = from el in xElement.Elements("step") select el;
                            int maxLevel = max.Max(x => Convert.ToInt32((string)x.Attribute("level")));

                            foreach (EA.Connector con in connectors)
                            {
                                if (con.Stereotype == "include")
                                {
                                    string targetName = getConnectorOwnerName(con, model, "target");

                                    IEnumerable<XElement> steps = from el in xElement.Elements("step")
                                                                  where ((string)el.Attribute("name")).Contains(targetName)
                                                                  select el;
                                    try
                                    {
                                        steps.First();
                                    }
                                    catch (Exception ex)
                                    {
                                        xElement.Add(new XElement("step", new XAttribute("name", "<include> " + targetName), new XAttribute("guid", "{" + Guid.NewGuid().ToString().ToUpper() + "}"),
                                            new XAttribute("level", maxLevel + 1), new XAttribute("uses", ""), new XAttribute("useslist", ""), new XAttribute("result", ""), new XAttribute("state", ""),
                                            new XAttribute("trigger", "0"), new XAttribute("link", "")));

                                        scenario.XMLContent = xElement.ToString();
                                        scenario.Update();

                                        model.adviseChange(new ElementWrapper(model, (EA.Element)element));

                                        return true;
                                    }
                                }
                            }
                        }
                        catch (Exception ex) { }
                    }

                    if (correctCall[i] == "addExtendToScenario")
                    {
                        EA.Collection scenarios = (EA.Collection)getAttributeValue(element, "Scenarios");
                        EA.Scenario scenario = (EA.Scenario)scenarios.GetAt(0);
                        XElement xElement = XElement.Parse(scenario.XMLContent);

                        try
                        {
                            EA.Collection connectors = (EA.Collection)getAttributeValue(element, "Connectors");
                            IEnumerable<XElement> max = from el in xElement.Elements("step") select el;
                            int maxLevel = max.Max(x => Convert.ToInt32((string)x.Attribute("level")));

                            foreach (EA.Connector con in connectors)
                            {
                                if (con.Stereotype == "extend")
                                {
                                    string sourceName = getConnectorOwnerName(con, model, "src");

                                    IEnumerable<XElement> steps = from el in xElement.Elements("step")
                                                                  where ((string)el.Attribute("name")).Contains(sourceName)
                                                                  select el;
                                    try
                                    {
                                        steps.First();
                                    }
                                    catch (Exception ex)
                                    {
                                        xElement.Add(new XElement("step", new XAttribute("name", "<extend> " + sourceName), new XAttribute("guid", "{" + Guid.NewGuid().ToString().ToUpper() + "}"),
                                            new XAttribute("level", maxLevel + 1), new XAttribute("uses", ""), new XAttribute("useslist", ""), new XAttribute("result", ""), new XAttribute("state", ""),
                                            new XAttribute("trigger", "0"), new XAttribute("link", "")));

                                        scenario.XMLContent = xElement.ToString();
                                        scenario.Update();

                                        model.adviseChange(new ElementWrapper(model, (EA.Element)element));

                                        return true;
                                    }
                                }
                            }
                        }
                        catch (Exception ex) { }
                    }

                    if (correctCall[i] == "addIncludeDependency")
                    {
                        EA.Collection scenarios = (EA.Collection)getAttributeValue(element, "Scenarios");
                        EA.Scenario scenario = (EA.Scenario)scenarios.GetAt(0);
                        XElement xElement = XElement.Parse(scenario.XMLContent);

                        IEnumerable<XElement> steps = from el in xElement.Elements("step")
                                                      where ((string)el.Attribute("name")).ToLowerInvariant().Contains("<include>")
                                                      select el;

                        try
                        {
                            EA.Collection connectors = (EA.Collection)getAttributeValue(element, "Connectors");
                            bool rslt = false;

                            foreach (XElement e in steps)
                            {
                                string name = (string)e.Attribute("name");

                                if (findElementInCurDiagramtByName(model, name.Substring(name.IndexOf("UC"))) == null)
                                {
                                    continue;
                                }

                                foreach (EA.Connector con in connectors)
                                {
                                    if (con.Stereotype == "include" && con.ClientID == Convert.ToInt32(getAttributeValue(element, "ElementID")))
                                    {
                                        string targetName = getConnectorOwnerName(con, model, "target");

                                        rslt |= targetName == name.Substring(name.IndexOf("UC"));
                                    }
                                }

                                if (!rslt)
                                {
                                    EA.Element el = findElementInCurDiagramtByName(model, name.Substring(name.IndexOf("UC")));
                                    EA.Collection connectorsPcg = model.getWrappedModel().GetPackageByID(Convert.ToInt32(getStringAttributeValue(element, "PackageID"))).Connectors;

                                    EA.Connector connector = (EA.Connector)connectors.AddNew("", "Dependency");
                                    connector.Stereotype = "include";
                                    connector.ClientID = Convert.ToInt32(getStringAttributeValue(element, "ElementID"));
                                    connector.SupplierID = el.ElementID;
                                    connector.Update();
                                    connectors.Refresh();

                                    model.refreshDiagram(new Diagram(model, model.getWrappedModel().GetCurrentDiagram()));
                                    return true;
                                }
                            }
                        }
                        catch (Exception ex) { };
                    }
                }
                catch (Exception ex) { }
            }

            return false;
        }