/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.drools.example.api.kiemodulefrommultiplefiles;
import org.kie.api.KieServices;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.io.Resource;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import java.io.File;
import java.io.PrintStream;
public class KieModuleFromMultipleFilesExample {
public void go(PrintStream out) {
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
Resource ex1Res = ks.getResources().newFileSystemResource(getFile("kiebase-inclusion"));
Resource ex2Res = ks.getResources().newFileSystemResource(getFile("named-kiesession"));
KieModule kModule = kr.addKieModule(ex1Res, ex2Res);
KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
KieSession kSession = kContainer.newKieSession("ksession2");
kSession.setGlobal("out", out);
Object msg1 = createMessage(kContainer, "Dave", "Hello, HAL. Do you read me, HAL?");
kSession.insert(msg1);
kSession.fireAllRules();
Object msg2 = createMessage(kContainer, "Dave", "Open the pod bay doors, HAL.");
kSession.insert(msg2);
kSession.fireAllRules();
}
public static void main(String[] args) {
new KieModuleFromMultipleFilesExample().go(System.out);
}
private static Object createMessage(KieContainer kContainer, String name, String text) {
Object o = null;
try {
Class cl = kContainer.getClassLoader().loadClass("org.drools.example.api.namedkiesession.Message");
o = cl.getConstructor(new Class[]{String.class, String.class}).newInstance(name, text);
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
public static File getFile(String exampleName) {
File folder = new File( KieModuleFromMultipleFilesExample.class.getProtectionDomain().getCodeSource().getLocation().getPath() );
File exampleFolder = null;
while (folder != null) {
exampleFolder = new File(folder,
exampleName);
if (exampleFolder.exists()) {
break;
}
exampleFolder = null;
folder = folder.getParentFile();
}
if (exampleFolder != null) {
File targetFolder = new File(exampleFolder,
"target");
if (!targetFolder.exists()) {
throw new RuntimeException("The target folder does not exist, please build project " + exampleName + " first");
}
for (String str : targetFolder.list()) {
if (str.startsWith(exampleName) && !str.endsWith("-sources.jar") && !str.endsWith("-tests.jar") && !str.endsWith("-javadoc.jar")) {
return new File(targetFolder, str);
}
}
}
throw new RuntimeException("The target jar does not exist, please build project " + exampleName + " first");
}
}