public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (Serialization.MocaTaggableElement.isIgnored(eaElement))
            {
                return(results);
            }

            if (eaElement.Stereotype == SDMModelingMain.StoryNodeStereotype)
            {
                StoryNode storyNode = new StoryNode(repository, eaElement);
                if (!storyNode.loadTreeFromTaggedValue())
                {
                    results.Add("StoryNode is invalid and has to be updated manually");
                }
            }
            else if (eaElement.Stereotype == SDMModelingMain.StatementNodeStereotype)
            {
                StatementNode stNode = new StatementNode(repository, eaElement);
                if (!stNode.loadTreeFromTaggedValue())
                {
                    results.Add("StatementNode is invalid and has to be updated manually");
                }
            }
            else if (eaElement.Stereotype == SDMModelingMain.StopNodeStereotype)
            {
                StopNode stopNode = new StopNode(repository, eaElement);
                if (!stopNode.loadTreeFromTaggedValue())
                {
                    results.Add("StopNode is invalid and has to be updated manually");
                }
            }
            return(results);
        }
        public override List <String> doRule(SQLElement eaElement, SQLWrapperClasses.SQLRepository repository)
        {
            List <String> results = new List <string>();

            if (eaElement.Stereotype == SDMModelingMain.StatementNodeStereotype)
            {
                StatementNode statementNode = new StatementNode(repository, eaElement);
                statementNode.loadTreeFromTaggedValue();

                if (statementNode.StatementExpression != null)
                {
                    String result = statementNode.StatementExpression.ToString();
                    if (!ConsistencyUtil.checkExpression(eaElement, statementNode.StatementExpression, repository))
                    {
                        results.Add("StatementExpression is invalid: (" + result + ")");
                    }
                }
                else
                {
                    results.Add("StatementExpression is missing");
                }

                foreach (SQLConnector outgoingCon in eaElement.Connectors)
                {
                    if (outgoingCon.ClientID == eaElement.ElementID)
                    {
                        ActivityEdge edge = new ActivityEdge(repository, outgoingCon);
                        edge.loadTreeFromTaggedValue();
                        if (edge.GuardType == EdgeGuard.FAILURE || edge.GuardType == EdgeGuard.SUCCESS)
                        {
                            if (statementNode.StatementExpression is MethodCallExpression)
                            {
                                MethodCallExpression mCe    = statementNode.StatementExpression as MethodCallExpression;
                                SQLMethod            method = repository.GetMethodByGuid(mCe.MethodGuid);

                                if (method != null && method.ReturnType != "EBoolean")
                                {
                                    results.Add("Method must be of type EBoolean if StatementNode has success/failure guards");
                                }
                            }
                        }
                    }
                }
            }
            return(results);
        }
Exemplo n.º 3
0
        private void buttonJump_Click(object sender, EventArgs e)
        {
            EA.Diagram currentDiagram = repository.GetCurrentDiagram();

            Boolean handled = false;

            if (currentDiagram != null && currentDiagram.SelectedObjects.Count == 1)
            {
                EA.DiagramObject selectedDiagramObject = currentDiagram.SelectedObjects.GetAt(0) as EA.DiagramObject;
                SQLElement       selectedElement       = repository.GetElementByID(selectedDiagramObject.ElementID);

                EA.Diagram calledDiagram = null;

                Expression callExpression = null;

                if (selectedElement.Stereotype == SDMModelingMain.StatementNodeStereotype)
                {
                    StatementNode statementNode = new StatementNode(repository, selectedElement);
                    statementNode.loadTreeFromTaggedValue();
                    callExpression = statementNode.StatementExpression;
                }
                else if (selectedElement.Stereotype == SDMModelingMain.ObjectVariableStereotype)
                {
                    ObjectVariable ov = new ObjectVariable(selectedElement, repository);
                    ov.loadTreeFromTaggedValue();
                    callExpression = ov.BindingExpression;
                }
                else if (selectedElement.Stereotype == SDMModelingMain.StopNodeStereotype)
                {
                    StopNode stopNode = new StopNode(repository, selectedElement);
                    stopNode.loadTreeFromTaggedValue();
                    callExpression = stopNode.ReturnValue;
                }

                if (callExpression is MethodCallExpression)
                {
                    MethodCallExpression mcE          = callExpression as MethodCallExpression;
                    SQLMethod            calledMethod = repository.GetMethodByGuid(mcE.MethodGuid);
                    if (calledMethod != null)
                    {
                        int sdmDiagramId = SDMUtil.getSDMDiagramID(repository, calledMethod);
                        if (sdmDiagramId != SDMUtil.UNKNOWN_SDM_DIAGRAM_ID)
                        {
                            calledDiagram = repository.GetOriginalRepository().GetDiagramByID(sdmDiagramId);
                        }
                    }
                }

                if (calledDiagram != null)
                {
                    Navigator.addAnchorEntry(calledDiagram.DiagramID, currentDiagram.DiagramID);
                    repository.OpenDiagram(calledDiagram.DiagramID);
                    handled = true;
                }
            }

            if (!handled)
            {
                if (currentDiagram != null)
                {
                    Navigator.jumpToAnchorSuccessor(repository.GetOriginalRepository(), currentDiagram.DiagramID);
                }
            }
        }