Package org.jboss.drools.guvnor.importgenerator.example.domain

Source Code of org.jboss.drools.guvnor.importgenerator.example.domain.KagentTestApp

/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.jboss.drools.guvnor.importgenerator.example.domain;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentConfiguration;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.command.Command;
import org.drools.command.CommandFactory;
import org.drools.definition.KnowledgePackage;
import org.drools.io.ResourceChangeScannerConfiguration;
import org.drools.io.ResourceFactory;
import org.drools.io.impl.ResourceChangeScannerImpl;
import org.drools.runtime.ExecutionResults;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;

public class KagentTestApp {
    private boolean changeScannerInitialised = false;
    private Map<String, KnowledgeAgent> cache = new HashMap<String, KnowledgeAgent>();

    public enum KnowledgeResourceType {
        DRL, PKG
    }

    public static void main(String[] args) {
        new KagentTestApp().run();
    }

    public void run() {
        initChangeScanner();
        Set<String> packageNames = new HashSet<String>();
        packageNames.add("ping.test/1.0.0-SNAPSHOT");
        if (true) {
            KnowledgeAgent kagent = getKnowledgeAgent("ping.test/1.0.0-SNAPSHOT");
            StatelessKnowledgeSession s = kagent.newStatelessKnowledgeSession();
//      List facts=new ArrayList();
//      facts.add("ping");
            s.execute(Arrays.asList(CommandFactory.newGetObjects(), CommandFactory.newFireAllRules()));
//      for (Object x : facts) {
//        System.out.println("fact-"+x);
//      }
        }
        if (false) {
            StatefulKnowledgeSession s = createStatefulSession(packageNames);
//      List facts=new ArrayList();
//      facts.add("ping");
            org.drools.runtime.rule.FactHandle fact1 = s.insert("ping");
            s.fireAllRules();
            System.out.println(fact1.toString());
//      for (Object x : facts) {
//        System.out.println(x);
//      }
            s.dispose();
        }
        ResourceFactory.getResourceChangeNotifierService().stop();
        ResourceFactory.getResourceChangeScannerService().stop();
    }

    public void initChangeScanner() {
//    if (!changeScannerInitialised) {
//      ResourceChangeScannerConfiguration c = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
//      c.setProperty("drools.resource.scanner.interval", "10");
//      ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
//      ResourceFactory.getResourceChangeNotifierService().start();
//      ResourceFactory.getResourceChangeScannerService().start();
//      ResourceFactory.getResourceChangeScannerService().configure(c);
//    }
//    changeScannerInitialised = true;
    }

    public KnowledgeAgentConfiguration getConfig() {
        KnowledgeAgentConfiguration c = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
        c.setProperty("drools.agent.scanDirectories", "true");
        c.setProperty("drools.agent.scanResources", "true");
        c.setProperty("drools.agent.newInstance", "true");
        return c;
    }

    public StatelessKnowledgeSession createSession(Set<String> packageNames) {
        return getKnowledgeBase(packageNames).newStatelessKnowledgeSession();
    }

    public StatefulKnowledgeSession createStatefulSession(Set<String> packageNames) {
        return getKnowledgeBase(packageNames).newStatefulKnowledgeSession();
    }

    private KnowledgeBase getKnowledgeBase(Set<String> packageNames, boolean ignorMissing) {
        KnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase();
        Collection<KnowledgePackage> kpl = new ArrayList<KnowledgePackage>();
        for (String packageName : packageNames) {
            try {
                KnowledgeAgent kagent = getKnowledgeAgent(packageName);
                kb.addKnowledgePackages(kagent.getKnowledgeBase().getKnowledgePackages());
            } catch (java.lang.IllegalArgumentException e) {
                // boolean packageDoesntExist=e.getMessage().startsWith("The directory")
                // && e.getMessage().endsWith("is not valid");
                if (ignorMissing) {
                    continue;
                } else
                    throw new RuntimeException(e.getMessage(), e);
            }
        }
        return kb;
    }

    private KnowledgeBase getKnowledgeBase(Set<String> packageNames) {
        return getKnowledgeBase(packageNames, false);
    }

    private KnowledgeAgent getKnowledgeAgent(String packageName) {
        if (cache.get(packageName) == null) {
            cache.put(packageName, createKnowledgeAgent(packageName));
        }
        return cache.get(packageName);
    }

    private KnowledgeAgent createKnowledgeAgent(String packageName) {
        initChangeScanner();
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("KAgent for " + packageName, kbase, getConfig());
        kagent.applyChangeSet(ResourceFactory.newReaderResource(new StringReader(getChangeSet(packageName))));
        return kagent;
    }

    private String getChangeSet(String packageName) {
        // packageName=toCustomPackage(packageName, ".");
        String url = "http://localhost:8080/brms/org.drools.guvnor.Guvnor/package/";
        KnowledgeResourceType type = KnowledgeResourceType.PKG;// valueOf(System.getProperty("PKG"));
        StringBuffer xml = new StringBuffer();
        xml.append("<change-set xmlns='http://drools.org/drools-5.0/change-set'");
        xml.append("    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'");
        xml.append("    xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >");
        xml.append("    <add> ");
        xml.append("        <resource source='" + url + packageName + "' type='" + type.name() + "' />");
        xml.append("    </add> ");
        xml.append("</change-set>");
        return xml.toString();
    }
}
TOP

Related Classes of org.jboss.drools.guvnor.importgenerator.example.domain.KagentTestApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.