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; }
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; }
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); }
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; }
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); }
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; }
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; }
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."); } }
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]; } } } } }
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); } }
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); } }
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); } }
/// /// <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)); }