Package org.jboss.drools.guvnor.importgenerator

Source Code of org.jboss.drools.guvnor.importgenerator.TestRuleDeployment$RuleAgentFactory

/*
* 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;

import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;

import org.drools.RuleBase;
import org.drools.StatelessSession;
import org.drools.StatelessSessionResult;
import org.drools.agent.HttpClientImpl;
import org.drools.agent.RuleAgent;
import org.drools.common.DroolsObjectInputStream;
import org.drools.definition.KnowledgePackage;
import org.drools.definitions.impl.KnowledgePackageImp;
import org.drools.rule.Package;

/**
* Test class to check that rules have been deployed correctly.
*/
public class TestRuleDeployment {
    public enum RuleAgentType {HTTP, FILE_DRL, FILE_PKG}

    private static final String ruleServer = "http://localhost:8080/brms"; // GWT hosted mode uses "http://127.0.0.1:8888/"
    private static final String packageName = "ping";
    private static final String snapshotName = "1.0.0-SNAPSHOT";

    public void run() {
        boolean executeRules = false;
        Properties props = getProps(packageName, snapshotName);
        String packSnap = packageName + "/" + snapshotName;
        String urlstr = (String) props.get("url");
        try {
            System.out.println("1: Drools method - looking up [" + packSnap + "]");
            HttpClientImpl c = new HttpClientImpl();
            Package pa = c.fetchPackage(new URL(urlstr), false, null, null);
            System.out.println("1: found [" + pa.getName() + "; clazz=" + pa.getClass().getName() + "]");
            executeRules = true;
        } catch (Exception e) {
            System.out.println("ERROR " + e.getClass().getName() + " - " + e.getMessage());
        }

        try {
            System.out.println("2: My method - looking up [" + packSnap + "]");
            URLConnection cnn = new URL(urlstr).openConnection();
            InputStreamReader in = new InputStreamReader(cnn.getInputStream());
            byte[] b = new byte[cnn.getInputStream().available()];
            cnn.getInputStream().read(b);
            in.close();
            ByteArrayInputStream bais = new ByteArrayInputStream(b);
            //ObjectInputStream oin=new ObjectInputStream(bais); //dont use the ObjectInputSteam because the DroolsObject... does some specific ops
            DroolsObjectInputStream dois = new DroolsObjectInputStream(bais);

            Object o = dois.readObject();
            if (o instanceof List) {
                List<KnowledgePackage> pl = ((List<KnowledgePackage>) o);
                System.out.println("2: Found Package in a List [" + pl.get(0).getName() + "]");
            } else if (o instanceof KnowledgePackageImp) {
                Package p = ((KnowledgePackageImp) o).pkg;
                System.out.println("2: Found a KnowledgePackageImp [" + p.getName() + "]");
            } else if (o instanceof Package) {
                Package p = ((Package) o);
                System.out.println("2: Found a Package [" + p.getName() + "]");
            }
        } catch (Exception e) {
            System.err.println("ERROR " + e.getClass().getName() + " - " + e.getMessage());
        }

        if (!executeRules) {
            return; //exit if we've not found the package in the brms to execute
        }

        RuleAgentFactory factory = new RuleAgentFactory(props);
        RuleAgent agent = factory.get(RuleAgentType.HTTP);
        RuleBase rb = agent.getRuleBase();

        StatelessSession s = rb.newStatelessSession();
        Collection<Object> facts = new LinkedList<Object>();
        facts.add(new String("ping"));
        System.out.print("ping...");
        StatelessSessionResult result = s.executeWithResults(facts);
        for (Iterator it = result.iterateObjects(); it.hasNext();) {
            Object o = it.next();
            if (o instanceof String) {
                System.out.println(((String) o));
            }
        }
    }

    private Properties getProps(String packageName, String snapshotName) {
        Properties r = new Properties();
        r.put("url", ruleServer + "/org.drools.guvnor.Guvnor/package/" + packageName + "/" + snapshotName);
        r.put("file", "my_rules/permissions/zone1/1.0.0-SNAPSHOT/permissions.");
        r.put("name", "RuleAgent for " + packageName); //optional
        r.put("poll", "30");
        r.put("localCacheDir", "/tmp");
        r.put("newInstance", "true");
        return r;
    }

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

    private class RuleAgentFactory {
        Properties props;

        public RuleAgentFactory(Properties props) {
            this.props = props;
        }

        public RuleAgent get(RuleAgentType type) {
            Properties p = (Properties) props.clone();
            switch (type) {
                case HTTP:
                    p.remove("file");
                    break;
                case FILE_DRL:
                    p.remove("url");
                    p.put("file", p.get("file") + ".drl");
                    break;
                case FILE_PKG:
                    p.remove("url");
                    p.put("file", p.get("file") + ".pkg");
                    break;
            }
            return RuleAgent.newRuleAgent(p);
        }
    }

}
TOP

Related Classes of org.jboss.drools.guvnor.importgenerator.TestRuleDeployment$RuleAgentFactory

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.