/// <summary> /// Construct Fact /// </summary> /// <param name="ID"></param> /// <param name="xPath"></param> /// <param name="valueType"></param> /// <param name="modelId"></param> /// <param name="parent"></param> //[System.Diagnostics.DebuggerHidden] public Fact(string ID, int priority, string xPath, Type valueType, string modelId) : base(ID, priority) { //xml IEvidenceValue x = new Xml(xPath, valueType, modelId); EvidenceValue = x; }
public void node2() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address", typeof(XmlNode), modelname); RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/dis", typeof(XmlNode), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; y.Changed += Changed; y.ModelLookup += ModelLookup; x.Evaluate(); y.Evaluate(); //change the value and see if it was updated changed = false; x.Value = y.Value; Assert.AreEqual("dis", ((XmlNode)x.Value).Name); Assert.AreEqual(true, changed); }
public void clone1() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); Assert.Equal("Joe", x.Value); Assert.Equal(true, changed); //clone RuleEngine.Evidence.EvidenceValue.Xml y = (RuleEngine.Evidence.EvidenceValue.Xml)x.Clone(); y.Changed += Changed; y.ModelLookup += ModelLookup; //change the model, update this xpath expression. changed = false; model["person"]["firstname"].InnerText = "bob"; y.Evaluate(); Assert.Equal(true, changed); Assert.Equal("bob", (string)y.Value); }
public void modelupdate1() { //init variables modelname = "xml.xml"; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; //init model XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; x.Evaluate(); Assert.Equal(true, changed); Assert.Equal("Joe", (string)x.Value); //change the model, dont update this xpath expression. changed = false; model["person"]["address"].InnerText = "bob"; x.Evaluate(); Assert.Equal(false, changed); Assert.Equal("Joe", (string)x.Value); }
public void boolean1() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/attribute::node()[name(.)='optional']", typeof(bool), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); Assert.AreEqual(true, x.Value); Assert.AreEqual(true, changed); }
public void boolean1() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/attribute::node()[name(.)='optional']", typeof(bool), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); Assert.Equal(true, x.Value); Assert.Equal(true, changed); }
public void string3() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); Assert.Equal("Joe", x.Value); Assert.Equal(true, changed); }
public void boolean6() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/@optional", typeof(bool), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); //change the value and see if it was updated changed = false; x.Value = false; Assert.Equal(false, x.Value); Assert.Equal(true, changed); }
public void double8() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/pin/attribute::node()[name(.)='id']", typeof(double), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); //change the value and see if it was updated changed = false; x.Value = 555; Assert.Equal(555, x.Value); Assert.Equal(true, changed); }
public void modelUpdate3() { //init variables modelname = "xml.xml"; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); y.Changed += Changed; y.ModelLookup += ModelLookup; //init model XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; x.Evaluate(); y.Evaluate(); changed = false; x.Value = "JOEJOE"; Assert.True((string)x.Value == "JOEJOE"); Assert.True((string)y.Value != "JOEJOE"); if (changed) { x.Evaluate(); y.Evaluate(); } Assert.True((string)x.Value == "JOEJOE"); Assert.True((string)y.Value == "JOEJOE"); }
private static void LoadFacts(ROM rom, XmlDocument document) { XmlNodeList facts = document.SelectNodes("RuleEngine/Facts//Fact"); foreach (XmlNode factNode in facts) { string id = factNode.Attributes["id"].Value; string type = factNode.Attributes["type"].Value; string desc = factNode.Attributes["desc"].Value; string modelId = factNode.Attributes["modelId"].Value; Type valueType = null; //ensure same rule wont be entered twice if (rom[id]!=null) throw new Exception("Fact has already been loaded: " + id); //determine priority int priority = 500; if (factNode.Attributes["priority"]!=null) priority = Int32.Parse(factNode.Attributes["priority"].Value); IFact fact = null; if (factNode["xpath"].InnerText != String.Empty) { //determine xpath string xpath = factNode["xpath"].InnerText; //determine value type switch (type) //deterrmine the type of value returned by xpath { case "double": valueType = typeof(double); break; case "boolean": valueType = typeof(bool); break; case "string": valueType = typeof(string); break; default: throw new Exception("Invalid type: " + id + " " + type); } //determine value Xml x = new Xml(xpath, valueType, modelId); //create fact and add it to the rom fact = new Fact(id, priority, xpath, valueType, modelId); } else { /* //determine value type switch (type) //deterrmine the type of value returned by xpath { case "double": valueType = typeof(double); break; case "boolean": valueType = typeof(bool); break; case "string": valueType = typeof(string); break; default: throw new Exception("Invalid type: " + id + " " + type); } //determine value Naked x = new Naked(value, valueType); //create fact and add it to the rom fact = new Fact(id, priority, valueType,); */ } rom.AddEvidence(fact); } }
/// <summary> /// /// </summary> /// <returns></returns> //[System.Diagnostics.DebuggerHidden] public object Clone() { Xml xml = new Xml(xPath, valueType, modelId); return xml; }
public void double8() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/pin/attribute::node()[name(.)='id']", typeof(double), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); //change the value and see if it was updated changed = false; x.Value = 555; Assert.AreEqual(555, x.Value); Assert.AreEqual(true, changed); }
public void string6() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/@optional", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); //change the value and see if it was updated changed = false; x.Value = "false"; Assert.AreEqual("false", x.Value); Assert.AreEqual(true, changed); }
public void string3() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; x.Evaluate(); Assert.AreEqual("Joe", x.Value); Assert.AreEqual(true, changed); }
public void node2() { modelname = "xml.xml"; XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address", typeof(XmlNode), modelname); RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/dis", typeof(XmlNode), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; y.Changed += Changed; y.ModelLookup += ModelLookup; x.Evaluate(); y.Evaluate(); //change the value and see if it was updated changed = false; x.Value = y.Value; Assert.AreEqual("dis", ((XmlNode)x.Value).Name ); Assert.AreEqual(true, changed); }
public void modelUpdate3() { //init variables modelname = "xml.xml"; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); y.Changed += Changed; y.ModelLookup += ModelLookup; //init model XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; x.Evaluate(); y.Evaluate(); changed = false; x.Value = "JOEJOE"; Assert.IsTrue((string)x.Value == "JOEJOE"); Assert.IsTrue((string)y.Value != "JOEJOE"); if (changed) { x.Evaluate(); y.Evaluate(); } Assert.IsTrue((string)x.Value == "JOEJOE"); Assert.IsTrue((string)y.Value == "JOEJOE"); }
public void modelupdate2() { //init variables modelname = "xml.xml"; changed = false; RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname); x.Changed += Changed; x.ModelLookup += ModelLookup; //init model XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname); model = doc.DocumentElement; x.Evaluate(); Assert.AreEqual(true, changed); Assert.AreEqual("Joe", (string)x.Value); //change the model, update this xpath expression. changed = false; model["person"]["firstname"].InnerText = "bob"; x.Evaluate(); Assert.AreEqual(true, changed); Assert.AreEqual("bob", (string)x.Value); }