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.FactHandle;
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.