예제 #1
0
        public void test_Model_getRules()
        {
            Rule ar  = new  AlgebraicRule(2, 4);
            Rule scr = new  AssignmentRule(2, 4);
            Rule cvr = new  AssignmentRule(2, 4);
            Rule pr  = new  AssignmentRule(2, 4);

            scr.setVariable("r2");
            cvr.setVariable("r3");
            pr.setVariable("r4");
            ar.setFormula("x + 1");
            scr.setFormula("k * t/(1 + k)");
            cvr.setFormula("0.10 * t");
            pr.setFormula("k3/k2");
            M.addRule(ar);
            M.addRule(scr);
            M.addRule(cvr);
            M.addRule(pr);
            assertTrue(M.getNumRules() == 4);
            ar  = M.getRule(0);
            scr = M.getRule(1);
            cvr = M.getRule(2);
            pr  = M.getRule(3);
            assertTrue(("x + 1" == ar.getFormula()));
            assertTrue(("k * t/(1 + k)" == scr.getFormula()));
            assertTrue(("0.10 * t" == cvr.getFormula()));
            assertTrue(("k3/k2" == pr.getFormula()));
        }
        public void test_AssignmentRule()
        {
            AssignmentRule r = new AssignmentRule(2, 4);

            assertEquals(false, (r.hasRequiredElements()));
            r.setMath(libsbml.parseFormula("ar"));
            assertEquals(true, r.hasRequiredElements());
            r = null;
        }
예제 #3
0
        public void test_AssignmentRule()
        {
            AssignmentRule r = new AssignmentRule(2, 4);

            assertEquals(false, (r.hasRequiredAttributes()));
            r.setVariable("r");
            assertEquals(true, r.hasRequiredAttributes());
            r = null;
        }
        public void test_AssignmentRule_parent_create()
        {
            Model          m  = new Model(2, 4);
            AssignmentRule r  = m.createAssignmentRule();
            ListOf         lo = m.getListOfRules();

            assertTrue(lo == m.getRule(0).getParentSBMLObject());
            assertTrue(lo == r.getParentSBMLObject());
            assertTrue(m == lo.getParentSBMLObject());
        }
        public void test_AssignmentRule_createWithMath()
        {
            ASTNode math = libsbml.parseFormula("1 + 1");
            Rule    ar   = new  AssignmentRule(2, 4);

            ar.setVariable("s");
            ar.setMath(math);
            assertTrue(ar.getTypeCode() == libsbml.SBML_ASSIGNMENT_RULE);
            assertTrue(ar.getMetaId() == "");
            assertTrue(("s" == ar.getVariable()));
            assertTrue(("1 + 1" == ar.getFormula()));
            assertTrue(ar.getMath() != math);
            ar = null;
        }
        public void test_Model_addRule3()
        {
            Model m = new  Model(2, 2);
            Rule  r = new  AssignmentRule(1, 2);

            r.setVariable("f");
            r.setMath(libsbml.parseFormula("a-n"));
            int i = m.addRule(r);

            assertTrue(i == libsbml.LIBSBML_LEVEL_MISMATCH);
            assertTrue(m.getNumRules() == 0);
            r = null;
            m = null;
        }
        public void test_Rule_setUnits4()
        {
            Rule R1 = new  AssignmentRule(1, 2);

            R1.setL1TypeCode(libsbml.SBML_PARAMETER_RULE);
            int i = R1.setUnits("second");

            assertTrue(i == libsbml.LIBSBML_OPERATION_SUCCESS);
            assertEquals(true, R1.isSetUnits());
            i = R1.setUnits("");
            assertTrue(i == libsbml.LIBSBML_OPERATION_SUCCESS);
            assertEquals(false, R1.isSetUnits());
            R1 = null;
        }
예제 #8
0
        public void test_Model_addRules()
        {
            Rule r1 = new  AlgebraicRule(2, 4);
            Rule r2 = new  AssignmentRule(2, 4);
            Rule r3 = new  RateRule(2, 4);

            r2.setVariable("r2");
            r3.setVariable("r3");
            r1.setMath(libsbml.parseFormula("2"));
            r2.setMath(libsbml.parseFormula("2"));
            r3.setMath(libsbml.parseFormula("2"));
            M.addRule(r1);
            M.addRule(r2);
            M.addRule(r3);
            assertTrue(M.getNumRules() == 3);
        }
예제 #9
0
        public void test_AssignmentRule_ancestor_create()
        {
            Model          m  = new Model(2, 4);
            AssignmentRule r  = m.createAssignmentRule();
            ListOf         lo = m.getListOfRules();

            assertTrue(r.getAncestorOfType(libsbml.SBML_MODEL) == m);
            assertTrue(r.getAncestorOfType(libsbml.SBML_LIST_OF) == lo);
            assertTrue(r.getAncestorOfType(libsbml.SBML_DOCUMENT) == null);
            assertTrue(r.getAncestorOfType(libsbml.SBML_EVENT) == null);
            Rule obj = m.getRule(0);

            assertTrue(obj.getAncestorOfType(libsbml.SBML_MODEL) == m);
            assertTrue(obj.getAncestorOfType(libsbml.SBML_LIST_OF) == lo);
            assertTrue(obj.getAncestorOfType(libsbml.SBML_DOCUMENT) == null);
            assertTrue(obj.getAncestorOfType(libsbml.SBML_EVENT) == null);
        }
        public void test_Model_addRule1()
        {
            Model m = new  Model(2, 2);
            Rule  r = new  AssignmentRule(2, 2);
            int   i = m.addRule(r);

            assertTrue(i == libsbml.LIBSBML_INVALID_OBJECT);
            r.setVariable("f");
            i = m.addRule(r);
            assertTrue(i == libsbml.LIBSBML_INVALID_OBJECT);
            r.setMath(libsbml.parseFormula("a-n"));
            i = m.addRule(r);
            assertTrue(i == libsbml.LIBSBML_OPERATION_SUCCESS);
            assertTrue(m.getNumRules() == 1);
            r = null;
            m = null;
        }
예제 #11
0
파일: Reader.cs 프로젝트: dorchard/mucell
        public void AssignmentRuleElement(Hashtable attrs)
        {
            String variable;
            SBase parameter = null;

            if (attrs.Contains("variable"))
            {
            variable = (String)attrs["variable"];

            if (this.model.findObject(variable) != null)
                parameter = (SBase)this.model.findObject(variable);
            }
            // else throw exception on required attribute

            AssignmentRule assignmentRule = new AssignmentRule(this.model, parameter);
            this.model.listOfRules.Add(assignmentRule);

            elementStack.Push(assignmentRule);
        }
예제 #12
0
        public void test_AssignmentRule_createWithFormula()
        {
            ASTNode math;
            string  formula;
            Rule    ar = new  AssignmentRule(2, 4);

            ar.setVariable("s");
            ar.setFormula("1 + 1");
            assertTrue(ar.getTypeCode() == libsbml.SBML_ASSIGNMENT_RULE);
            assertTrue(ar.getMetaId() == "");
            assertTrue(("s" == ar.getVariable()));
            math = ar.getMath();
            assertTrue(math != null);
            formula = libsbml.formulaToString(math);
            assertTrue(formula != null);
            assertTrue(("1 + 1" == formula));
            assertTrue((formula == ar.getFormula()));
            ar = null;
        }
예제 #13
0
        public void test_AssignmentRule_createWithNS()
        {
            XMLNamespaces xmlns = new  XMLNamespaces();

            xmlns.add("http://www.sbml.org", "testsbml");
            SBMLNamespaces sbmlns = new  SBMLNamespaces(2, 1);

            sbmlns.addNamespaces(xmlns);
            Rule object1 = new  AssignmentRule(sbmlns);

            assertTrue(object1.getTypeCode() == libsbml.SBML_ASSIGNMENT_RULE);
            assertTrue(object1.getMetaId() == "");
            assertTrue(object1.getNotes() == null);
            assertTrue(object1.getAnnotation() == null);
            assertTrue(object1.getLevel() == 2);
            assertTrue(object1.getVersion() == 1);
            assertTrue(object1.getNamespaces() != null);
            assertTrue(object1.getNamespaces().getLength() == 2);
            object1 = null;
        }
        public void test_Model_addRule5()
        {
            Model m  = new  Model(2, 2);
            Rule  ar = new  AssignmentRule(2, 2);

            ar.setVariable("ar");
            ar.setMath(libsbml.parseFormula("a-j"));
            Rule ar1 = new  AssignmentRule(2, 2);

            ar1.setVariable("ar");
            ar1.setMath(libsbml.parseFormula("a-j"));
            int i = m.addRule(ar);

            assertTrue(i == libsbml.LIBSBML_OPERATION_SUCCESS);
            assertTrue(m.getNumRules() == 1);
            i = m.addRule(ar1);
            assertTrue(i == libsbml.LIBSBML_DUPLICATE_OBJECT_ID);
            assertTrue(m.getNumRules() == 1);
            ar  = null;
            ar1 = null;
            m   = null;
        }
예제 #15
0
        static void testClone(SBase s)
        {
            string ename = s.getElementName();
            SBase  c     = s.clone();

            if (c is Compartment)
            {
                Compartment x = (s as Compartment).clone(); c = x;
            }
            else if (c is CompartmentType)
            {
                CompartmentType x = (s as CompartmentType).clone(); c = x;
            }
            else if (c is Constraint)
            {
                Constraint x = (s as Constraint).clone(); c = x;
            }
            else if (c is Delay)
            {
                Delay x = (s as Delay).clone(); c = x;
            }
            else if (c is Event)
            {
                Event x = (s as Event).clone(); c = x;
            }
            else if (c is EventAssignment)
            {
                EventAssignment x = (s as EventAssignment).clone(); c = x;
            }
            else if (c is FunctionDefinition)
            {
                FunctionDefinition x = (s as FunctionDefinition).clone(); c = x;
            }
            else if (c is InitialAssignment)
            {
                InitialAssignment x = (s as InitialAssignment).clone(); c = x;
            }
            else if (c is KineticLaw)
            {
                KineticLaw x = (s as KineticLaw).clone(); c = x;
            }
            // currently return type of ListOf::clone() is SBase
            else if (c is ListOf)
            {
                SBase x = (s as ListOf).clone(); c = x;
            }
            else if (c is Model)
            {
                Model x = (s as Model).clone(); c = x;
            }
            else if (c is Parameter)
            {
                Parameter x = (s as Parameter).clone(); c = x;
            }
            else if (c is Reaction)
            {
                Reaction x = (s as Reaction).clone(); c = x;
            }
            else if (c is AlgebraicRule)
            {
                AlgebraicRule x = (s as AlgebraicRule).clone(); c = x;
            }
            else if (c is AssignmentRule)
            {
                AssignmentRule x = (s as AssignmentRule).clone(); c = x;
            }
            else if (c is RateRule)
            {
                RateRule x = (s as RateRule).clone(); c = x;
            }
            else if (c is SBMLDocument)
            {
                SBMLDocument x = (s as SBMLDocument).clone(); c = x;
            }
            else if (c is Species)
            {
                Species x = (s as Species).clone(); c = x;
            }
            else if (c is SpeciesReference)
            {
                SpeciesReference x = (s as SpeciesReference).clone(); c = x;
            }
            else if (c is SpeciesType)
            {
                SpeciesType x = (s as SpeciesType).clone(); c = x;
            }
            else if (c is SpeciesReference)
            {
                SpeciesReference x = (s as SpeciesReference).clone(); c = x;
            }
            else if (c is StoichiometryMath)
            {
                StoichiometryMath x = (s as StoichiometryMath).clone(); c = x;
            }
            else if (c is Trigger)
            {
                Trigger x = (s as Trigger).clone(); c = x;
            }
            else if (c is Unit)
            {
                Unit x = (s as Unit).clone(); c = x;
            }
            else if (c is UnitDefinition)
            {
                UnitDefinition x = (s as UnitDefinition).clone(); c = x;
            }
            else if (c is ListOfCompartmentTypes)
            {
                ListOfCompartmentTypes x = (s as ListOfCompartmentTypes).clone(); c = x;
            }
            else if (c is ListOfCompartments)
            {
                ListOfCompartments x = (s as ListOfCompartments).clone(); c = x;
            }
            else if (c is ListOfConstraints)
            {
                ListOfConstraints x = (s as ListOfConstraints).clone(); c = x;
            }
            else if (c is ListOfEventAssignments)
            {
                ListOfEventAssignments x = (s as ListOfEventAssignments).clone(); c = x;
            }
            else if (c is ListOfEvents)
            {
                ListOfEvents x = (s as ListOfEvents).clone(); c = x;
            }
            else if (c is ListOfFunctionDefinitions)
            {
                ListOfFunctionDefinitions x = (s as ListOfFunctionDefinitions).clone(); c = x;
            }
            else if (c is ListOfInitialAssignments)
            {
                ListOfInitialAssignments x = (s as ListOfInitialAssignments).clone(); c = x;
            }
            else if (c is ListOfParameters)
            {
                ListOfParameters x = (s as ListOfParameters).clone(); c = x;
            }
            else if (c is ListOfReactions)
            {
                ListOfReactions x = (s as ListOfReactions).clone(); c = x;
            }
            else if (c is ListOfRules)
            {
                ListOfRules x = (s as ListOfRules).clone(); c = x;
            }
            else if (c is ListOfSpecies)
            {
                ListOfSpecies x = (s as ListOfSpecies).clone(); c = x;
            }
            else if (c is ListOfSpeciesReferences)
            {
                ListOfSpeciesReferences x = (s as ListOfSpeciesReferences).clone(); c = x;
            }
            else if (c is ListOfSpeciesTypes)
            {
                ListOfSpeciesTypes x = (s as ListOfSpeciesTypes).clone(); c = x;
            }
            else if (c is ListOfUnitDefinitions)
            {
                ListOfUnitDefinitions x = (s as ListOfUnitDefinitions).clone(); c = x;
            }
            else if (c is ListOfUnits)
            {
                ListOfUnits x = (s as ListOfUnits).clone(); c = x;
            }
            else
            {
                ERR("[testClone] Error: (" + ename + ") : clone() failed.");
                return;
            }

            if (c == null)
            {
                ERR("[testClone] Error: (" + ename + ") : clone() failed.");
                return;
            }

            string enameClone = c.getElementName();

            if (ename == enameClone)
            {
                //Console.Out.WriteLine("[testClone] OK: (" + ename + ") clone(" + enameClone + ") : type match.");
                OK();
            }
            else
            {
                ERR("[testClone] Error: (" + ename + ") clone(" + enameClone + ") : type mismatch.");
            }
        }
예제 #16
0
        private void SetRuleValues(WonkaBizRule poTargetRule, string psRuleExpression)
        {
            char[] acRuleValuesDelim = new char[1] {
                ','
            };

            int nValueStartIdx = psRuleExpression.LastIndexOf(CONST_RULE_TOKEN_START_DELIM);

            if (nValueStartIdx >= 0)
            {
                int nValueEndIdx =
                    psRuleExpression.IndexOf(CONST_RULE_TOKEN_END_DELIM, nValueStartIdx + 1);

                if (nValueEndIdx > 0)
                {
                    string sValues =
                        psRuleExpression.Substring(nValueStartIdx + 1, (nValueEndIdx - nValueStartIdx - 1));

                    string[] asValueSet = sValues.Split(acRuleValuesDelim);

                    if (poTargetRule.RuleType == RULE_TYPE.RT_DOMAIN)
                    {
                        DomainRule Rule = (DomainRule)poTargetRule;

                        Rule.SetDomain(asValueSet);
                    }
                    else if (poTargetRule.RuleType == RULE_TYPE.RT_ARITHMETIC)
                    {
                        ArithmeticRule Rule = (ArithmeticRule)poTargetRule;

                        Rule.SetDomain(asValueSet);
                    }
                    else if (poTargetRule.RuleType == RULE_TYPE.RT_ARITH_LIMIT)
                    {
                        ArithmeticLimitRule Rule = (ArithmeticLimitRule)poTargetRule;

                        Rule.SetMinAndMax(psRuleExpression, asValueSet);
                    }
                    else if (poTargetRule.RuleType == RULE_TYPE.RT_ASSIGNMENT)
                    {
                        AssignmentRule Rule = (AssignmentRule)poTargetRule;

                        Rule.SetAssignValue(asValueSet);
                    }
                    else if (poTargetRule.RuleType == RULE_TYPE.RT_DATE_LIMIT)
                    {
                        DateLimitRule Rule = (DateLimitRule)poTargetRule;

                        Rule.SetMinAndMax(psRuleExpression, asValueSet);
                    }
                    else if (poTargetRule.RuleType == RULE_TYPE.RT_CUSTOM_OP)
                    {
                        CustomOperatorRule Rule = (CustomOperatorRule)poTargetRule;

                        string sCustomOpKey = CustomOpSources.Keys.Where(s => psRuleExpression.Contains(s)).FirstOrDefault();

                        if (!string.IsNullOrEmpty(sCustomOpKey))
                        {
                            Rule.SetDomain(asValueSet);

                            Rule.CustomOpName   = sCustomOpKey;
                            Rule.CustomOpSource = CustomOpSources[sCustomOpKey];
                        }
                    }
                }
            }
        }
예제 #17
0
        private void ParseSingleRule(XmlNode poRuleXmlNode, WonkaBizRuleSet poTargetRuleSet)
        {
            int    nNewRuleId      = ++(this.RuleIdCounter);
            string sRuleExpression = poRuleXmlNode.InnerText;

            WonkaBizRule NewRule = null;

            if (this.CustomOpSources.Keys.Any(s => sRuleExpression.Contains(s)))
            {
                string sFoundKey = this.CustomOpSources.Keys.FirstOrDefault(s => sRuleExpression.Contains(s));

                if (!String.IsNullOrEmpty(sFoundKey) && (this.CustomOpSources[sFoundKey].CustomOpRuleBuilder != null))
                {
                    WonkaBizSource CustomOpSource = this.CustomOpSources[sFoundKey];

                    NewRule = CustomOpSource.CustomOpRuleBuilder.Invoke(CustomOpSource, nNewRuleId);
                }
                else
                {
                    NewRule = new CustomOperatorRule()
                    {
                        RuleId = nNewRuleId
                    };
                }
            }
            else if (this.ArithmeticLimitOps.Any(s => sRuleExpression.Contains(s)))
            {
                NewRule = new ArithmeticLimitRule()
                {
                    RuleId = nNewRuleId
                };
            }
            else if (this.DateLimitOps.Any(s => sRuleExpression.Contains(s)))
            {
                NewRule = new DateLimitRule()
                {
                    RuleId = nNewRuleId
                };
            }
            else if (sRuleExpression.Contains("NOT POPULATED"))
            {
                NewRule = new PopulatedRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                };
            }
            else if (sRuleExpression.Contains("POPULATED"))
            {
                NewRule = new PopulatedRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                };
            }
            else if (sRuleExpression.Contains("!="))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                };
            }
            else if (sRuleExpression.Contains("=="))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                };
            }
            else if (sRuleExpression.Contains("NOT IN"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                };
            }
            else if (sRuleExpression.Contains("IN"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                };
            }
            else if (sRuleExpression.Contains("EXISTS AS"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, SearchAllDataRows = true
                };
            }
            else if (sRuleExpression.Contains("DEFAULT"))
            {
                NewRule = new AssignmentRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, DefaultAssignment = true
                };
            }
            else if (sRuleExpression.Contains("ASSIGN_SUM"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_SUM
                };
            }
            else if (sRuleExpression.Contains("ASSIGN_DIFF"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_DIFF
                };
            }
            else if (sRuleExpression.Contains("ASSIGN_PROD"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_PROD
                };
            }
            else if (sRuleExpression.Contains("ASSIGN_QUOT"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_QUOT
                };
            }
            else if (sRuleExpression.Contains("ASSIGN"))
            {
                NewRule = new AssignmentRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                };
            }

            if (NewRule != null)
            {
                var RuleId = poRuleXmlNode.Attributes.GetNamedItem(CONST_RULE_ID_ATTR);
                if (RuleId != null)
                {
                    NewRule.DescRuleId = RuleId.Value;
                }

                NewRule.ParentRuleSetId = poTargetRuleSet.RuleSetId;

                SetTargetAttribute(NewRule, sRuleExpression);

                if (NewRule.RuleType != RULE_TYPE.RT_POPULATED)
                {
                    SetRuleValues(NewRule, sRuleExpression);
                }

                if (RulesHostEngine != null)
                {
                    NewRule.RulesHostEngine = RulesHostEngine;

                    if (RulesHostEngine.StdOpMap != null)
                    {
                        if ((NewRule is ArithmeticLimitRule) && RulesHostEngine.StdOpMap.ContainsKey(STD_OP_TYPE.STD_OP_BLOCK_NUM))
                        {
                            ((ArithmeticLimitRule)NewRule).BlockNumDelegate = RulesHostEngine.StdOpMap[STD_OP_TYPE.STD_OP_BLOCK_NUM];
                        }
                    }
                }
            }

            if (NewRule != null)
            {
                poTargetRuleSet.AddRule(NewRule);
            }
        }
예제 #18
0
        private void ParseSingleRule(XmlNode poRuleXmlNode, WonkaBreRuleSet poTargetRuleSet)
        {
            int          nNewRuleId      = ++(this.RuleIdCounter);
            string       sRuleExpression = poRuleXmlNode.InnerText;
            WonkaBreRule NewRule         = null;

            if (this.CustomOpSources.Keys.Any(s => sRuleExpression.Contains(s)))
            {
                NewRule = new CustomOperatorRule()
                {
                    RuleId = nNewRuleId
                }
            }
            ;
            else if (this.ArithmeticLimitOps.Any(s => sRuleExpression.Contains(s)))
            {
                NewRule = new ArithmeticLimitRule()
                {
                    RuleId = nNewRuleId
                }
            }
            ;
            else if (this.DateLimitOps.Any(s => sRuleExpression.Contains(s)))
            {
                NewRule = new DateLimitRule()
                {
                    RuleId = nNewRuleId
                }
            }
            ;
            else if (sRuleExpression.Contains("NOT POPULATED"))
            {
                NewRule = new PopulatedRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                }
            }
            ;
            else if (sRuleExpression.Contains("POPULATED"))
            {
                NewRule = new PopulatedRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                }
            }
            ;
            else if (sRuleExpression.Contains("!="))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                }
            }
            ;
            else if (sRuleExpression.Contains("=="))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                }
            }
            ;
            else if (sRuleExpression.Contains("NOT IN"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = true
                }
            }
            ;
            else if (sRuleExpression.Contains("IN"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                }
            }
            ;
            else if (sRuleExpression.Contains("EXISTS AS"))
            {
                NewRule = new DomainRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, SearchAllDataRows = true
                }
            }
            ;
            else if (sRuleExpression.Contains("DEFAULT"))
            {
                NewRule = new AssignmentRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, DefaultAssignment = true
                }
            }
            ;
            else if (sRuleExpression.Contains("ASSIGN_SUM"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_SUM
                }
            }
            ;
            else if (sRuleExpression.Contains("ASSIGN_DIFF"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_DIFF
                }
            }
            ;
            else if (sRuleExpression.Contains("ASSIGN_PROD"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_PROD
                }
            }
            ;
            else if (sRuleExpression.Contains("ASSIGN_QUOT"))
            {
                NewRule = new ArithmeticRule()
                {
                    RuleId = nNewRuleId, NotOperator = false, OpType = ARITH_OP_TYPE.AOT_QUOT
                }
            }
            ;
            else if (sRuleExpression.Contains("ASSIGN"))
            {
                NewRule = new AssignmentRule()
                {
                    RuleId = nNewRuleId, NotOperator = false
                }
            }
            ;

            if (NewRule != null)
            {
                var RuleId = poRuleXmlNode.Attributes.GetNamedItem(CONST_RULE_ID_ATTR);
                if (RuleId != null)
                {
                    NewRule.DescRuleId = RuleId.Value;
                }

                NewRule.ParentRuleSetId = poTargetRuleSet.RuleSetId;

                SetTargetAttribute(NewRule, sRuleExpression);

                if (NewRule.RuleType != RULE_TYPE.RT_POPULATED)
                {
                    SetRuleValues(NewRule, sRuleExpression);
                }
            }

            if (NewRule != null)
            {
                poTargetRuleSet.AddRule(NewRule);
            }
        }
예제 #19
0
        public static void AddNewRule(this WonkaBizRuleSet poRuleSet,
                                      WonkaRefEnvironment poRefEnv,
                                      string psAddRuleDesc,
                                      string psAddRuleTargetAttr,
                                      string psAddRuleTypeNum,
                                      string psAddRuleValue1,
                                      string psAddRuleValue2,
                                      bool pbAddRuleNotOp = false)
        {
            int nRuleTypeNum = Int32.Parse(psAddRuleTypeNum);

            WonkaBizRule NewRule = null;

            WonkaRefAttr targetAttr = poRefEnv.GetAttributeByAttrName(psAddRuleTargetAttr);

            if (nRuleTypeNum == 1)
            {
                if (!targetAttr.IsNumeric && !targetAttr.IsDecimal)
                {
                    throw new DataException("ERROR!  Cannot perform arithmetic limit on a non-numeric value.");
                }

                double dMinVal = 0;
                double dMaxVal = 0;

                Double.TryParse(psAddRuleValue1, out dMinVal);
                Double.TryParse(psAddRuleValue2, out dMaxVal);

                NewRule =
                    new ArithmeticLimitRule(mnRuleCounter++, TARGET_RECORD.TRID_NEW_RECORD, targetAttr.AttrId, dMinVal, dMaxVal);
            }
            else if (nRuleTypeNum == 2)
            {
                /*
                 * NOTE: Will handle ArithmeticRule later
                 * string[] asParamArray = new string[0];
                 */
            }
            else if (nRuleTypeNum == 3)
            {
                if (!String.IsNullOrEmpty(psAddRuleValue1))
                {
                    NewRule =
                        new AssignmentRule(mnRuleCounter++, TARGET_RECORD.TRID_NEW_RECORD, targetAttr.AttrId, psAddRuleValue1);
                }
            }
            else if (nRuleTypeNum == 4)
            {
                /*
                 * NOTE: Will handle CustomOperatorRule later
                 */
            }
            else if (nRuleTypeNum == 5)
            {
                if (!targetAttr.IsDate)
                {
                    throw new DataException("ERROR!  Cannot perform date limit on a non-date value.");
                }

                if ((!String.IsNullOrEmpty(psAddRuleValue1)) || (!String.IsNullOrEmpty(psAddRuleValue2)))
                {
                    DateTime dtMinTime = DateTime.MinValue;
                    DateTime dtMaxTime = DateTime.MaxValue;

                    if (!String.IsNullOrEmpty(psAddRuleValue1))
                    {
                        DateTime.TryParse(psAddRuleValue1, out dtMinTime);
                    }

                    if (!String.IsNullOrEmpty(psAddRuleValue2))
                    {
                        DateTime.TryParse(psAddRuleValue2, out dtMaxTime);
                    }

                    var DtLimitRule =
                        new DateLimitRule(mnRuleCounter++)
                    {
                        MinValue = dtMinTime, MaxValue = dtMaxTime, TargetAttribute = targetAttr
                    };

                    NewRule = DtLimitRule;
                }
            }
            else if (nRuleTypeNum == 6)
            {
                if ((!String.IsNullOrEmpty(psAddRuleValue1)) || (!String.IsNullOrEmpty(psAddRuleValue2)))
                {
                    HashSet <string> RuleDomain = new HashSet <string>();

                    if (!String.IsNullOrEmpty(psAddRuleValue1))
                    {
                        if (psAddRuleValue1.Contains(","))
                        {
                            var DomainVals = psAddRuleValue1.Split(new char[1] {
                                ','
                            });
                            DomainVals.ToList().ForEach(x => DomainVals.Append(x));
                        }
                        else
                        {
                            RuleDomain.Add(psAddRuleValue1);
                        }
                    }

                    if (!String.IsNullOrEmpty(psAddRuleValue2))
                    {
                        if (psAddRuleValue2.Contains(","))
                        {
                            var DomainVals = psAddRuleValue2.Split(new char[1] {
                                ','
                            });
                            DomainVals.ToList().ForEach(x => DomainVals.Append(x));
                        }
                        else
                        {
                            RuleDomain.Add(psAddRuleValue2);
                        }
                    }

                    var DmnRule =
                        new DomainRule(mnRuleCounter++, TARGET_RECORD.TRID_NEW_RECORD, targetAttr.AttrId, false);

                    DmnRule.DomainCache = RuleDomain;

                    foreach (string sTmpValue in RuleDomain)
                    {
                        DmnRule.DomainValueProps.Add(sTmpValue, new WonkaBizRuleValueProps()
                        {
                            IsLiteralValue = true
                        });
                    }

                    NewRule = DmnRule;
                }
            }
            else if (nRuleTypeNum == 7)
            {
                NewRule = new PopulatedRule(mnRuleCounter++, TARGET_RECORD.TRID_NEW_RECORD, targetAttr.AttrId);
            }

            if (NewRule != null)
            {
                if (!String.IsNullOrEmpty(psAddRuleDesc))
                {
                    NewRule.DescRuleId = psAddRuleDesc;
                }

                NewRule.ParentRuleSetId = poRuleSet.RuleSetId;
                NewRule.NotOperator     = pbAddRuleNotOp;

                poRuleSet.AddRule(NewRule);
            }
        }
예제 #20
0
        ///
        /// <summary>
        ///
        /// This method will write the XML (i.e., Wonka rules markup) of a Rule.
        ///
        /// NOTE: Currently, we use a StringBuilder class to build the XML Document.  In the future, we should transition to
        /// using a XmlDocument and a XmlWriter.
        ///
        /// <returns>Returns the XML payload that represents a Rule</returns>
        /// </summary>
        public string ExportXmlString(WonkaBizRule poRule, StringBuilder poSpaces)
        {
            string sOpName      = string.Empty;
            string sRuleValue   = "";
            string sDelim       = WonkaBizRulesXmlReader.CONST_RULE_TOKEN_VAL_DELIM;
            string sSingleQuote = "'";

            string sRuleTagFormat =
                "{0}<" + WonkaBizRulesXmlReader.CONST_RULE_TAG + " " + WonkaBizRulesXmlReader.CONST_RULE_ID_ATTR + "=\"{1}\">(N.{2}) {3} {4}</eval>\n";

            if (poRule.RuleType == RULE_TYPE.RT_ARITH_LIMIT)
            {
                ArithmeticLimitRule ArithLimitRule = (ArithmeticLimitRule)poRule;

                if (ArithLimitRule.MinValue == Double.MinValue)
                {
                    sOpName    = !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_AL_LT : WonkaBizRulesXmlReader.CONST_AL_NOT_LT;
                    sRuleValue = Convert.ToString(ArithLimitRule.MaxValue);
                }
                else if (ArithLimitRule.MaxValue == Double.MaxValue)
                {
                    sOpName    = !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_AL_GT : WonkaBizRulesXmlReader.CONST_AL_NOT_GT;
                    sRuleValue = Convert.ToString(ArithLimitRule.MinValue);
                }
                else
                {
                    sOpName    = !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_AL_EQ : WonkaBizRulesXmlReader.CONST_AL_NOT_EQ;
                    sRuleValue = Convert.ToString(ArithLimitRule.MinValue);
                }
            }
            else if (poRule.RuleType == RULE_TYPE.RT_DATE_LIMIT)
            {
                DateLimitRule DtLimitRule = (DateLimitRule)poRule;

                if (DtLimitRule.MinValue == DateTime.MinValue)
                {
                    sOpName    = !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_DL_IA : WonkaBizRulesXmlReader.CONST_DL_NOT_IA;
                    sRuleValue = DtLimitRule.MaxValue.ToString("MM/dd/yyyy");
                }
                else if (DtLimitRule.MaxValue == DateTime.MaxValue)
                {
                    sOpName    = !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_DL_IB : WonkaBizRulesXmlReader.CONST_DL_NOT_IB;
                    sRuleValue = DtLimitRule.MinValue.ToString("MM/dd/yyyy");
                }
                else
                {
                    sOpName    = WonkaBizRulesXmlReader.CONST_DL_AROUND;
                    sRuleValue = DtLimitRule.MinValue.ToString("MM/dd/yyyy");
                }
            }
            else if (poRule.RuleType == RULE_TYPE.RT_POPULATED)
            {
                sOpName =
                    !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_BASIC_OP_POP : WonkaBizRulesXmlReader.CONST_BASIC_OP_NOT_POP;
            }
            else if (poRule.RuleType == RULE_TYPE.RT_DOMAIN)
            {
                StringBuilder DomainVals = new StringBuilder();

                DomainRule DmnRule = (DomainRule)poRule;

                sOpName =
                    !poRule.NotOperator ? WonkaBizRulesXmlReader.CONST_BASIC_OP_IN : WonkaBizRulesXmlReader.CONST_BASIC_OP_NOT_IN;

                sRuleValue = BuildDomainValues(DmnRule.DomainValueProps, sDelim, sSingleQuote);
            }
            else if (poRule.RuleType == RULE_TYPE.RT_ASSIGNMENT)
            {
                StringBuilder DomainVals = new StringBuilder();

                AssignmentRule AssignRule = (AssignmentRule)poRule;

                sOpName = WonkaBizRulesXmlReader.CONST_BASIC_OP_ASSIGN;

                var ValueProps = new Dictionary <string, WonkaBizRuleValueProps>();
                ValueProps[AssignRule.AssignValue] = AssignRule.AssignValueProps;

                sRuleValue = BuildDomainValues(ValueProps, sDelim, sSingleQuote);
            }
            else if (poRule.RuleType == RULE_TYPE.RT_ARITHMETIC)
            {
                ArithmeticRule ArithRule = (ArithmeticRule)poRule;

                if (ArithRule.OpType == ARITH_OP_TYPE.AOT_SUM)
                {
                    sOpName = WonkaBizRulesXmlReader.CONST_BASIC_OP_ASSIGN_SUM;
                }
                else if (ArithRule.OpType == ARITH_OP_TYPE.AOT_DIFF)
                {
                    sOpName = WonkaBizRulesXmlReader.CONST_BASIC_OP_ASSIGN_DIFF;
                }
                else if (ArithRule.OpType == ARITH_OP_TYPE.AOT_PROD)
                {
                    sOpName = WonkaBizRulesXmlReader.CONST_BASIC_OP_ASSIGN_PROD;
                }
                else if (ArithRule.OpType == ARITH_OP_TYPE.AOT_QUOT)
                {
                    sOpName = WonkaBizRulesXmlReader.CONST_BASIC_OP_ASSIGN_QUOT;
                }

                sRuleValue = BuildDomainValues(ArithRule.DomainValueProps, sDelim, sSingleQuote);
            }
            else if (poRule.RuleType == RULE_TYPE.RT_CUSTOM_OP)
            {
                CustomOperatorRule CustomOpRule = (CustomOperatorRule)poRule;

                sOpName = CustomOpRule.CustomOpName;

                sRuleValue = BuildDomainValues(CustomOpRule.DomainValueProps, sDelim, sSingleQuote);
            }
            else
            {
                throw new WonkaBizRuleException("ERROR!  Unsupported Rule Type when writing out the Wonka RuleTree.");
            }

            if (!String.IsNullOrEmpty(sRuleValue))
            {
                sRuleValue = "(" + sRuleValue + ")";
            }

            return(String.Format(sRuleTagFormat, poSpaces.ToString(), poRule.DescRuleId, poRule.TargetAttribute.AttrName, sOpName, sRuleValue));
        }