Skip to content

Instantly share code, notes, and snippets.

@cmoulliard
Created April 19, 2013 11:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmoulliard/4e9b6dc3ff384715ff9a to your computer and use it in GitHub Desktop.
Save cmoulliard/4e9b6dc3ff384715ff9a to your computer and use it in GitHub Desktop.
Guvnor --> Get Packages using REST and fireAllRules for mortgages
package org.fusesource.demo;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import javax.ws.rs.core.MediaType;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.drools.core.util.codec.Base64;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.model.KieBaseModel;
import org.kie.api.builder.model.KieModuleModel;
import org.kie.api.builder.model.KieSessionModel;
import org.kie.api.conf.EventProcessingOption;
import org.kie.api.definition.type.FactType;
import org.kie.api.io.Resource;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.internal.io.ResourceFactory;
import static org.junit.Assert.*;
public class RestGuvnor {
public static void main(String[] args) throws Exception {
// Fetch Packages from Guvnor
URL url = new URL("http://127.0.0.1:8080/guvnor.war/rest/packages/mortgages/source");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Authorization",
"Basic " + new Base64().encodeToString(("admin:admin".getBytes())));
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", MediaType.WILDCARD);
connection.connect();
System.out.println("ResponseCode: " + connection.getResponseCode());
System.out.println("MediaType: " + connection.getContentType());
String packages = IOUtils.toString(connection.getInputStream());
//InputStream is = connection.getInputStream();
File tempFile = new File("guvnor_packages.txt");
FileUtils.writeStringToFile(tempFile, packages);
Resource resource = ResourceFactory.newFileResource(tempFile);
// Create a KnowledgeBuilder
KieServices ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem()
.write(resource)
.writeKModuleXML(createKieProjectWithPackages(ks).toXML());
KieBuilder builder = ks.newKieBuilder(kfs).buildAll();
List<org.kie.api.builder.Message> results = builder.getResults().getMessages();
assertTrue( results.toString(), results.isEmpty() );
KieSession kSession = ks.newKieContainer( ks.getRepository().getDefaultReleaseId() ).newKieSession();
KieBase kieBase = kSession.getKieBase();
FactType loanType = kieBase.getFactType("mortgages","LoanApplication");
Object loan = loanType.newInstance();
loanType.set(loan,"insuranceCost","insurance");
kSession.insert(loan);
kSession.fireAllRules();
}
private static KieModuleModel createKieProjectWithPackages( KieServices ks ) {
KieModuleModel kproj = ks.newKieModuleModel();
KieBaseModel kieBaseModel1 = kproj.newKieBaseModel( "KBase1" )
.setEventProcessingMode( EventProcessingOption.STREAM )
.addPackage( "*" )
.setDefault( true );
kieBaseModel1.newKieSessionModel( "KSession1" )
.setType( KieSessionModel.KieSessionType.STATEFUL )
.setClockType( ClockTypeOption.get("pseudo") )
.setDefault( true );
return kproj;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment