public void BinderEventsVCB() { // use this binder load method to overcome loading problems because // the vcb file is not in the same folder as NxBRE.dll using (StreamReader sr = File.OpenText(ruleFilesFolder + "events-test.ruleml.vcb")) { IInferenceEngine ie = new IEImpl(VisualBasicBinderFactory.LoadFromString("NxBRE.Test.InferenceEngine.EventTestBinder", sr.ReadToEnd())); RunTestBinderEvents(ie); } }
public void LoadRuleBase(MainForm mf, string uri, bool onlyFacts) { IBinder binder = null; // give priority to custom compiled binders if (File.Exists(uri + ".ccb")) { up.lastBinderClassName = mf.PromptForString("C# Custom Binder - " + uri + ".ccb", "Enter the fully qualified name of the binder class:", up.lastBinderClassName); binder = CSharpBinderFactory.LoadFromFile(up.lastBinderClassName, uri + ".ccb"); } else if (File.Exists(uri + ".vcb")) { up.lastBinderClassName = mf.PromptForString("VB.NET Custom Binder - " + uri + ".vcb", "Enter the fully qualified name of the binder class:", up.lastBinderClassName); binder = VisualBasicBinderFactory.LoadFromFile(up.lastBinderClassName, uri + ".vcb"); } else if (File.Exists(uri + ".xbre")) { bool isBeforeAfter = mf.AskYesNoQuestion("Flow Engine Binder - " + uri + ".xbre", uri + ".xbre\n\nIs this binder running in Before/After mode ?\n\n(No would mean that it runs in Control Process mode)"); binder = new FlowEngineBinder(uri + ".xbre", isBeforeAfter?BindingTypes.BeforeAfter:BindingTypes.Control); } if (!onlyFacts) { ie = new IEImpl(binder); } switch (Path.GetExtension(uri).ToLower()) { case ".ruleml": try { if (onlyFacts) { ie.LoadFacts(new RuleML09NafDatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML09NafDatalogAdapter(uri, FileAccess.Read)); } } catch (Exception firstAttemptException) { try { if (onlyFacts) { ie.LoadFacts(new RuleML086NafDatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML086NafDatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { try { if (onlyFacts) { ie.LoadFacts(new RuleML086DatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML086DatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { try { if (onlyFacts) { ie.LoadFacts(new RuleML08DatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML08DatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { // the fall-back policy failed, hence throw the original exception throw firstAttemptException; } } } } break; case ".hrf": if (onlyFacts) { ie.LoadFacts(new HRF086Adapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new HRF086Adapter(uri, FileAccess.Read)); } break; case ".vdx": string[] selectedPages = mf.PromptForVisioPageNameSelection(Visio2003Adapter.GetPageNames(uri)); if (selectedPages != null) { if (onlyFacts) { ie.LoadFacts(new Visio2003Adapter(uri, FileAccess.Read, selectedPages)); } else { ie.LoadRuleBase(new Visio2003Adapter(uri, FileAccess.Read, (DialogResult.Yes == MessageBox.Show(mf, "Is your Visio rule base using strict syntax?", "Visio strictness", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)), selectedPages)); } } break; default: throw new Exception(Path.GetExtension(uri) + " is an unknown extension."); } }
public void LoadRules() { // prepare the rule base adapter for reading the rule file var ruleFileFullPath = configurationFolder + Path.DirectorySeparatorChar + RuleFile; if (Logger.IsInferenceEngineVerbose) { Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Loading rule file: " + ruleFileFullPath + " of format: " + engineConfiguration.Rules.Format); } IRuleBaseAdapter ruleBaseAdapter = null; switch (engineConfiguration.Rules.Format) { case RulesFormat.HRF086: ruleBaseAdapter = new HRF086Adapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML08Datalog: ruleBaseAdapter = new RuleML08DatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML086Datalog: ruleBaseAdapter = new RuleML086DatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML086NafDatalog: ruleBaseAdapter = new RuleML086NafDatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML09NafDatalog: ruleBaseAdapter = new RuleML09NafDatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.Visio2003: ruleBaseAdapter = new Visio2003Adapter(ruleFileFullPath, FileAccess.Read); break; default: throw new ArgumentOutOfRangeException(); } // estimate if a binder is present if (engineConfiguration.Binder != null) { var binder = engineConfiguration.Binder as CSharpBinderConfiguration; if (binder != null) { var cSharpBinderConfiguration = binder; binderFile = cSharpBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) { Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using CSharp binder file: " + binderFile); } // we load the binder code in a string and then compile it: this method is more reliable than // providing a file path directly using (var sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) { engine.LoadRuleBase(ruleBaseAdapter, CSharpBinderFactory.LoadFromString(cSharpBinderConfiguration.Class, sr.ReadToEnd())); } } else if (engineConfiguration.Binder is VisualBasicBinderConfiguration) { var visualBasicBinderConfiguration = (VisualBasicBinderConfiguration)engineConfiguration.Binder; binderFile = visualBasicBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) { Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using Visual Basic binder file: " + binderFile); } // we load the binder code in a string and then compile it: this method is more reliable than // providing a file path directly using (StreamReader sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) { engine.LoadRuleBase(ruleBaseAdapter, VisualBasicBinderFactory.LoadFromString(visualBasicBinderConfiguration.Class, sr.ReadToEnd())); } } else if (engineConfiguration.Binder is FlowEngineBinderConfiguration) { FlowEngineBinderConfiguration flowEngineBinderConfiguration = (FlowEngineBinderConfiguration)engineConfiguration.Binder; binderFile = flowEngineBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) { Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using FlowEngine binder file: " + binderFile); } engine.LoadRuleBase(ruleBaseAdapter, new NxBRE.InferenceEngine.IO.FlowEngineBinder(configurationFolder + Path.DirectorySeparatorChar + binderFile, flowEngineBinderConfiguration.Type)); } else { throw new BREException("Unexpected type of binder object in registry configuration: " + engineConfiguration.Binder.GetType().FullName); } } else { // no binder specified binderFile = null; engine.LoadRuleBase(ruleBaseAdapter); } }