コード例 #1
0
        /// <summary>
        /// Create structure based on the subsystem structure
        /// </summary>
        /// <param name="SourceNode"></param>
        public override void AcceptDrop(BaseTreeNode SourceNode)
        {
            base.AcceptDrop(SourceNode);

            if (SourceNode is RuleConditionTreeNode)
            {
                RuleConditionTreeNode node = SourceNode as RuleConditionTreeNode;
                DataDictionary.Rules.RuleCondition ruleCondition = node.Item;
                node.Delete();
                AddRuleCondition(ruleCondition);
            }
            else if (SourceNode is SpecificationView.ParagraphTreeNode)
            {
                SpecificationView.ParagraphTreeNode    node     = SourceNode as SpecificationView.ParagraphTreeNode;
                DataDictionary.Specification.Paragraph paragaph = node.Item;

                DataDictionary.Rules.RuleCondition ruleCondition = (DataDictionary.Rules.RuleCondition)DataDictionary.Generated.acceptor.getFactory().createRuleCondition();
                ruleCondition.Name = paragaph.Name;

                DataDictionary.ReqRef reqRef = (DataDictionary.ReqRef)DataDictionary.Generated.acceptor.getFactory().createReqRef();
                reqRef.Name = paragaph.FullId;
                ruleCondition.appendRequirements(reqRef);
                AddRuleCondition(ruleCondition);
            }
        }
コード例 #2
0
        public void TestSubRulesPriority()
        {
            Dictionary test = CreateDictionary("Test");
            NameSpace  n1   = CreateNameSpace(test, "N1");
            Variable   v1   = CreateVariable(n1, "V", "Integer");

            v1.setDefaultValue("0");
            Variable v2 = CreateVariable(n1, "V2", "Integer");

            v2.setDefaultValue("0");
            // Priority is Processing
            RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1");
            Action        a1  = CreateAction(rc1, "V2 <- V2 + 1");
            // Priority is Update out
            RuleCondition rc2 = CreateRuleAndCondition(rc1, "Rule2");

            rc2.EnclosingRule.setPriority(acceptor.RulePriority.aUpdateOUT);
            Action a2 = CreateAction(rc2, "V <- V + 1");

            // ReSharper disable once UseObjectOrCollectionInitializer
            Runner runner = new Runner(false);

            runner.Cycle();

            IntValue value = v1.Value as IntValue;

            Assert.IsNotNull(value);
            Assert.AreEqual(1, value.Val);

            value = v2.Value as IntValue;
            Assert.IsNotNull(value);
            Assert.AreEqual(1, value.Val);
        }
コード例 #3
0
        public void TestRefactorStructureName()
        {
            Dictionary test       = CreateDictionary("Test");
            NameSpace  n1         = CreateNameSpace(test, "N1");
            Collection collection = CreateCollection(n1, "Col", "Integer", 10);
            Variable   v          = CreateVariable(n1, "V", "Col");

            v.setDefaultValue("[]");
            RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1");
            Action        a1  = CreateAction(rc1, "INSERT 1 IN V");
            RuleCondition rc2 = CreateRuleAndCondition(n1, "Rule2");
            Action        a2  = CreateAction(rc2, "INSERT 2 IN V");

            // ReSharper disable once UseObjectOrCollectionInitializer
            Runner runner = new Runner(false);

            runner.CheckForCompatibleChanges = true;
            runner.Cycle();

            ListValue listValue = v.Value as ListValue;

            Assert.IsNotNull(listValue);
            Assert.AreEqual(2, listValue.Val.Count);
            Assert.AreEqual(0, a1.Messages.Count);
            Assert.AreEqual(0, a2.Messages.Count);
        }
コード例 #4
0
        /// <summary>
        ///     Creates a rule condition in a rule
        /// </summary>
        /// <param name="rule"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        private RuleCondition CreateRuleCondition(Rule rule, string name)
        {
            RuleCondition retVal = (RuleCondition)Factory.createRuleCondition();

            rule.appendConditions(retVal);
            retVal.Name = name;
            return(retVal);
        }
コード例 #5
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="item"></param>
 /// <param name="children"></param>
 public RulePreConditionsTreeNode(DataDictionary.Rules.RuleCondition item)
     : base(item, "Pre conditions", true, false)
 {
     foreach (DataDictionary.Rules.PreCondition preCondition in item.PreConditions)
     {
         Nodes.Add(new PreConditionTreeNode(preCondition));
     }
 }
コード例 #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="item"></param>
 public SubRulesTreeNode(DataDictionary.Rules.RuleCondition item)
     : base(item, "Sub rules", true, false)
 {
     foreach (DataDictionary.Rules.Rule rule in item.SubRules)
     {
         Nodes.Add(new RuleTreeNode(rule));
     }
     SortSubNodes();
 }
コード例 #7
0
        /// <summary>
        ///     Creates a precondition in the enclosing rule condition
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="expression"></param>
        /// <returns></returns>
        protected PreCondition CreatePreCondition(RuleCondition enclosing, string expression)
        {
            PreCondition retVal = (PreCondition)Factory.createPreCondition();

            enclosing.appendPreConditions(retVal);
            retVal.ExpressionText = expression;

            return(retVal);
        }
コード例 #8
0
        /// <summary>
        ///     Creates a rule and a rule condition in the rule condition
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected RuleCondition CreateRuleAndCondition(RuleCondition enclosing, string name)
        {
            Rule rule = (Rule)Factory.createRule();

            enclosing.appendSubRules(rule);
            rule.Name = name;
            rule.setPriority(acceptor.RulePriority.aProcessing);

            return(CreateRuleCondition(rule, name));
        }
コード例 #9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="item"></param>
 public ActionsTreeNode(DataDictionary.Rules.RuleCondition item)
     : base(item, "Actions", true, false)
 {
     foreach (DataDictionary.Rules.Action action in item.Actions)
     {
         Nodes.Add(new ActionTreeNode(action));
     }
     if (Item.EnclosingRule != null && !Item.EnclosingRule.BelongsToAProcedure())
     {
         SortSubNodes();
     }
 }
コード例 #10
0
        private void AddHandler(object sender, EventArgs args)
        {
            RuleCondition ruleCondition = (RuleCondition)acceptor.getFactory().createRuleCondition();

            if (Item.RuleConditions.Count == 0)
            {
                ruleCondition.Name = Item.Name;
            }
            else
            {
                ruleCondition.Name = Item.Name + (Item.RuleConditions.Count + 1);
            }
            Item.appendConditions(ruleCondition);
        }
コード例 #11
0
        /// <summary>
        /// Provides the transition control which corresponds to the rule
        /// </summary>
        /// <param name="ruleCondition"></param>
        /// <returns></returns>
        public TransitionControl getTransitionControl(DataDictionary.Rules.RuleCondition ruleCondition)
        {
            TransitionControl retVal = null;

            foreach (TransitionControl control in transitions.Values)
            {
                if (control.Transition.RuleCondition == ruleCondition)
                {
                    retVal = control;
                    break;
                }
            }

            return(retVal);
        }
コード例 #12
0
        public void TestCollectionConcatenation()
        {
            Dictionary dictionary = CreateDictionary("Test");
            NameSpace  nameSpace  = CreateNameSpace(dictionary, "NameSpace");

            Structure        structure  = CreateStructure(nameSpace, "ModelElement");
            StructureElement structElem = CreateStructureElement(structure, "Value", "Boolean");

            structElem.setDefault("True");

            Collection collection = CreateCollection(nameSpace, "Coll", "ModelElement", 10);

            collection.Type = structure;
            collection.setMaxSize(3);
            collection.Default = "[]";

            Variable variable = CreateVariable(nameSpace, "V", "Coll");

            RuleCondition ruleCondition = CreateRuleAndCondition(nameSpace, "Test");
            Action        action        = CreateAction(ruleCondition, "V <- V + [ModelElement{Value => True}] ");

            RuleCheckerVisitor visitor = new RuleCheckerVisitor(dictionary);

            visitor.visit(nameSpace);

            Util.IsThereAnyError isThereAnyError = new Util.IsThereAnyError();
            Assert.AreEqual(0, isThereAnyError.ErrorsFound.Count);
            Assert.AreEqual("[]", variable.Value.LiteralName);

            Runner runner = new Runner(false);

            runner.Cycle();
            Assert.AreEqual("[" + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName);

            runner.Cycle();
            Assert.AreEqual("[" + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName);

            runner.Cycle();
            Assert.AreEqual("[" + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName);

            // In this case, the new collection cannot be placed in the variable
            runner.Cycle();
            Assert.AreEqual(1, action.Messages.Count);
            Assert.AreEqual(ElementLog.LevelEnum.Error, action.Messages[0].Level);
        }
コード例 #13
0
        /// <summary>
        ///     Splits the selected action to several sub-actions
        /// </summary>
        public virtual void SplitHandler(object sender, EventArgs args)
        {
            Statement statement = new Parser().Statement(Item, Item.ExpressionText);
            VariableUpdateStatement variableUpdateStatement = statement as VariableUpdateStatement;

            if (variableUpdateStatement != null)
            {
                Expression       expression       = variableUpdateStatement.Expression;
                StructExpression structExpression = expression as StructExpression;
                if (structExpression != null)
                {
                    Dictionary <Designator, Expression> associations = structExpression.Associations;
                    foreach (KeyValuePair <Designator, Expression> value in associations)
                    {
                        Action action = (Action)acceptor.getFactory().createAction();
                        action.ExpressionText = structExpression.Structure + "." + value.Key + " <- " +
                                                value.Value;
                        ActionTreeNode actionTreeNode = new ActionTreeNode(action, true);

                        BaseTreeNode parent = Parent as BaseTreeNode;
                        if (parent != null)
                        {
                            RuleCondition ruleCondition = Item.Enclosing as RuleCondition;
                            if (ruleCondition != null)
                            {
                                ruleCondition.appendActions(action);
                            }
                            else
                            {
                                SubStep subStep = Item.Enclosing as SubStep;
                                if (subStep != null)
                                {
                                    subStep.appendActions(action);
                                }
                            }
                            parent.Nodes.Add(actionTreeNode);
                        }
                    }
                }
            }
            Delete();
        }
コード例 #14
0
        /// <summary>
        /// Splits the selected action to several sub-actions
        /// </summary>
        public virtual void SplitHandler(object sender, EventArgs args)
        {
            DataDictionary.Interpreter.Statement.Statement statement = Item.EFSSystem.Parser.Statement(Item, Item.ExpressionText);
            DataDictionary.Interpreter.Statement.VariableUpdateStatement variableUpdateStatement = statement as DataDictionary.Interpreter.Statement.VariableUpdateStatement;
            if (variableUpdateStatement != null)
            {
                DataDictionary.Interpreter.Expression       expression       = variableUpdateStatement.Expression;
                DataDictionary.Interpreter.StructExpression structExpression = expression as DataDictionary.Interpreter.StructExpression;
                if (structExpression != null)
                {
                    Dictionary <string, DataDictionary.Interpreter.Expression> associations = structExpression.Associations;
                    foreach (KeyValuePair <string, DataDictionary.Interpreter.Expression> value in associations)
                    {
                        DataDictionary.Rules.Action action = (DataDictionary.Rules.Action)DataDictionary.Generated.acceptor.getFactory().createAction();
                        action.Expression = structExpression.Structure.ToString() + "." + value.Key + " <- " + value.Value.ToString();
                        string         aString        = value.Value.ToString();
                        ActionTreeNode actionTreeNode = new ActionTreeNode(action);

                        BaseTreeNode parent = Parent as BaseTreeNode;
                        if ((parent != null) && (parent.Nodes != null))
                        {
                            DataDictionary.Rules.RuleCondition ruleCondition = Item.Enclosing as DataDictionary.Rules.RuleCondition;
                            if (ruleCondition != null)
                            {
                                ruleCondition.appendActions(action);
                            }
                            else
                            {
                                DataDictionary.Tests.SubStep subStep = Item.Enclosing as DataDictionary.Tests.SubStep;
                                if (subStep != null)
                                {
                                    subStep.appendActions(action);
                                }
                            }
                            parent.Nodes.Add(actionTreeNode);
                        }
                    }
                }
            }
            Delete();
            SortSubNodes();
        }
コード例 #15
0
        /// <summary>
        ///     Create structure based on the subsystem structure
        /// </summary>
        /// <param name="sourceNode"></param>
        public override void AcceptDrop(BaseTreeNode sourceNode)
        {
            base.AcceptDrop(sourceNode);

            if (sourceNode is RuleConditionTreeNode)
            {
                RuleConditionTreeNode node          = sourceNode as RuleConditionTreeNode;
                RuleCondition         ruleCondition = node.Item;
                node.Delete();
                Item.appendConditions(ruleCondition);
            }
            else if (sourceNode is ParagraphTreeNode)
            {
                ParagraphTreeNode node      = sourceNode as ParagraphTreeNode;
                Paragraph         paragraph = node.Item;

                RuleCondition ruleCondition = RuleCondition.CreateDefault(Item.RuleConditions);
                Item.appendConditions(ruleCondition);
                ruleCondition.FindOrCreateReqRef(paragraph);
            }
        }
コード例 #16
0
 /// <summary>
 /// Adds a new rule to the model
 /// </summary>
 /// <param name="ruleCondition"></param>
 public void AddRuleCondition(DataDictionary.Rules.RuleCondition ruleCondition)
 {
     Item.appendConditions(ruleCondition);
     Nodes.Add(new DataDictionaryView.RuleConditionTreeNode(ruleCondition));
 }
コード例 #17
0
 private void AddHandler(object sender, EventArgs args)
 {
     DataDictionary.Rules.RuleCondition rule = (DataDictionary.Rules.RuleCondition)DataDictionary.Generated.acceptor.getFactory().createRuleCondition();
     rule.Name = "<RuleCondition" + (GetNodeCount(false) + 1) + ">";
     AddRuleCondition(rule);
 }
コード例 #18
0
        /// <summary>
        ///     Creates a rule and a rule condition in the rule condition
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        protected RuleCondition CreateRuleAndCondition(RuleCondition enclosing, string name)
        {
            Rule rule = (Rule)Factory.createRule();
            enclosing.appendSubRules(rule);
            rule.Name = name;
            rule.setPriority(acceptor.RulePriority.aProcessing);

            return CreateRuleCondition(rule, name);
        }
コード例 #19
0
        /// <summary>
        ///     Creates a precondition in the enclosing rule condition
        /// </summary>
        /// <param name="enclosing"></param>
        /// <param name="expression"></param>
        /// <returns></returns>
        protected PreCondition CreatePreCondition(RuleCondition enclosing, string expression)
        {
            PreCondition retVal = (PreCondition) Factory.createPreCondition();
            enclosing.appendPreConditions(retVal);
            retVal.ExpressionText = expression;

            return retVal;
        }
コード例 #20
0
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="item"></param>
 /// <param name="buildSubNodes"></param>
 public ActionsTreeNode(RuleCondition item, bool buildSubNodes)
     : base(item, buildSubNodes, "Actions", false)
 {
 }
コード例 #21
0
 /// <summary>
 ///     Constructor
 /// </summary>
 /// <param name="item"></param>
 /// <param name="buildSubNodes"></param>
 public SubRulesTreeNode(RuleCondition item, bool buildSubNodes)
     : base(item, buildSubNodes, "Sub rules", false)
 {
 }