Exemple #1
0
 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);
     }
 }
Exemple #2
0
        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.");
            }
        }
Exemple #3
0
            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);
                }
            }