Skip to content

Commit

Permalink
Implementing the API for Drools 6
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Proctor committed Dec 3, 2012
1 parent 969d809 commit 7a8fbee
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 40 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
package org.kie.builder.impl;

import org.drools.compiler.io.memory.MemoryFileSystem;
import java.io.File;
import java.io.FileInputStream;
import java.util.Collection;

import org.drools.core.util.IoUtils;
import org.jboss.weld.exceptions.UnsupportedOperationException;
import org.kie.builder.GAV;
import org.kie.builder.KieBaseModel;
import org.kie.builder.KieModuleModel;
import org.kie.builder.KieSessionModel;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class FileKieModule extends AbstractKieModules implements InternalKieModule {
private final GAV gav;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
Expand All @@ -62,7 +63,7 @@ public class KieBuilderImpl

private MemoryFileSystem trgMfs;

private MemoryKieModules kieJar;
private MemoryKieModules kieModule;

private PomModel pomModel;
private byte[] pomXml;
Expand All @@ -71,7 +72,7 @@ public class KieBuilderImpl
private byte[] kieProjectXml;
private KieModuleModel kieProject;

private Collection<InternalKieModule> dependencies;
private Collection<KieModule> dependencies;

public KieBuilderImpl(File file) {
this.srcMfs = new DiskResourceReader( file );
Expand All @@ -83,6 +84,12 @@ public KieBuilderImpl(KieFileSystem kieFileSystem) {
init();
}

public KieBuilder setDependencies(Collection<KieModule> dependencies) {
this.dependencies = dependencies;
return this;
}


private void init() {
KieFactory kf = KieFactory.Factory.get();

Expand Down Expand Up @@ -111,18 +118,26 @@ public Results build() {
trgMfs = new MemoryFileSystem();
writePomAndKProject();

kieJar = new MemoryKieModules( gav,
kieProject,
trgMfs );

ClassLoader classLoader = compileJavaClasses();
addKBasesFilesToTrg( );

kieJar = new MemoryKieModules(gav, kieProject, trgMfs);
kieJar.verify( messages );
addKBasesFilesToTrg();

kieModule = new MemoryKieModules( gav,
kieProject,
trgMfs );

if ( dependencies != null && !dependencies.isEmpty() ) {
Map<GAV, InternalKieModule> modules = new HashMap<GAV, InternalKieModule>();
for ( KieModule kieModule : dependencies ) {
modules.put( kieModule.getGAV(),
(InternalKieModule) kieModule );
}
kieModule.setDependencies( modules );
}

kieModule.verify( messages );

if ( !hasResults( Level.ERROR ) ) {
KieServices.Factory.get().getKieRepository().addKieJar( kieJar );
KieServices.Factory.get().getKieRepository().addKieJar( kieModule );
}
}
return new ResultsImpl( messages.getMessages(),
Expand Down Expand Up @@ -232,14 +247,14 @@ public KieModule getKieJar() {
if ( !isBuilt() ) {
build();
}
if ( hasResults( Level.ERROR ) || kieJar == null ) {
if ( hasResults( Level.ERROR ) || kieModule == null ) {
throw new RuntimeException( "Unable to get KieJar, Errors Existed" );
}
return kieJar;
return kieModule;
}

private boolean isBuilt() {
return kieJar != null;
return kieModule != null;
}

private void buildKieProject() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.drools.kproject.models.KieBaseModelImpl;
import org.drools.kproject.models.KieSessionModelImpl;
import org.kie.KieBase;
import org.kie.KnowledgeBaseFactory;
import org.kie.builder.GAV;
import org.kie.builder.KieBaseModel;
import org.kie.builder.KieContainer;
Expand All @@ -15,7 +14,6 @@
import org.kie.builder.KieServices;
import org.kie.builder.KieSessionModel;
import org.kie.runtime.KieSession;
import org.kie.runtime.KnowledgeSessionConfiguration;
import org.kie.runtime.StatelessKieSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -49,12 +47,10 @@ public GAV getGAV() {
}

public void updateToVersion(GAV version) {
//throw new UnsupportedOperationException( "The " + getClass().getSimpleName() + " cannot be updated" );
// @TODO
throw new UnsupportedOperationException( "This method is still to be implemented" );
}

public void updateKieJar(KieModule kieJar) {
//throw new UnsupportedOperationException( "The " + getClass().getSimpleName() + " cannot be updated" );
}

public KieBase getKieBase() {
return getKieBase( KieBaseModelImpl.DEFAULT_KIEBASE_NAME );
Expand All @@ -73,11 +69,13 @@ public KieBase getKieBase(String kBaseName) {
}

public KieSession getKieSession() {
return null;
// @TODO
throw new UnsupportedOperationException( "This method is still to be implemented" );
}

public StatelessKieSession getKieStatelessSession() {
return null;
// @TODO
throw new UnsupportedOperationException( "This method is still to be implemented" );
}

public KieSession getKieSession(String kSessionName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@ public KieRepository getKieRepository() {
return KieRepositoryImpl.INSTANCE;
}

/**
* Returns KieContainer for the classpath
*/
public KieContainer getKieContainer() {
//return new KieContainerImpl(getKieRepository().getDefaultGAV(), getKieRepository());
return null;
return new KieContainerImpl( new ClasspathKieProject( getKieRepository() ), getKieRepository() );
}

public KieContainer getKieContainer(GAV gav) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.drools.core.util.FileManager;
import org.drools.kproject.GAVImpl;
import org.drools.kproject.models.KieBaseModelImpl;
import org.drools.kproject.models.KieModuleModelImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
Expand All @@ -30,6 +31,7 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.*;
Expand Down Expand Up @@ -83,6 +85,57 @@ public void testOnDisc() throws ClassNotFoundException, InterruptedException, IO
createAndTestKieContainer(gav, createKieBuilder(kfs), namespace);
}

@Test
public void testKieModuleDepednencies() throws ClassNotFoundException, InterruptedException, IOException {
KieServices ks = KieServices.Factory.get();

String namespace1 = "org.kie.test1";
GAV gav1 = KieFactory.Factory.get().newGav( namespace1, "memory", "1.0-SNAPSHOT" );
KieModuleModel kProj1 = createKieProject(namespace1);
KieFileSystem kfs1 = KieFactory.Factory.get().newKieFileSystem();
generateAll(kfs1, namespace1, gav1, kProj1);

KieBuilder kb1 = createKieBuilder(kfs1);
kb1.build();
if ( kb1.hasResults( Level.ERROR ) ) {
fail("Unable to build KieJar\n" + kb1.getResults( ).toString() );
}
KieRepository kr = ks.getKieRepository();
KieModule kModule1 = kr.getKieJar( gav1 );
assertNotNull( kModule1 );


String namespace2 = "org.kie.test2";
GAV gav2 = KieFactory.Factory.get().newGav( namespace2, "memory", "1.0-SNAPSHOT" );
KieModuleModel kProj2 = createKieProject(namespace2);
KieBaseModelImpl kieBase2 = ( KieBaseModelImpl ) ((KieModuleModelImpl)kProj2).getKieBaseModels().get( namespace2 );
kieBase2.addInclude( namespace1 );

KieFileSystem kfs2 = KieFactory.Factory.get().newKieFileSystem();
generateAll(kfs2, namespace2, gav2, kProj2);


KieBuilder kb2 = createKieBuilder(kfs2);
kb2.setDependencies( Arrays.asList( new KieModule[] { kModule1 } ) );
kb2.build();
if ( kb2.hasResults( Level.ERROR ) ) {
fail("Unable to build KieJar\n" + kb2.getResults( ).toString() );
}
KieModule kModule2= kr.getKieJar( gav2 );
assertNotNull( kModule2);

KieContainer kContainer = ks.getKieContainer( gav2 );
KieBase kBase = kContainer.getKieBase( namespace2 );

KieSession kSession = kBase.newKieSession();
List list = new ArrayList();
kSession.setGlobal( "list", list );
kSession.fireAllRules();

assertEquals( 2, list.size() );
assertEquals( "org.kie.test.Message", list.get(0).getClass().getName() );
}

@Test
public void testNoPomXml() throws ClassNotFoundException, InterruptedException, IOException {
String namespace = "org.kie.test";
Expand Down Expand Up @@ -257,9 +310,9 @@ public void createAndTestKieContainer(GAV gav, KieBuilder kb, String kBaseName)
List list = new ArrayList();
kSession.setGlobal( "list", list );
kSession.fireAllRules();
assertEquals( "org.kie.test.Message", list.get(0).getClass().getName() );


assertEquals( 1, list.size() );
assertEquals( "org.kie.test.Message", list.get(0).getClass().getName() );
}

public String getRule(String namespace,
Expand Down

0 comments on commit 7a8fbee

Please sign in to comment.