diff --git a/.gitignore b/.gitignore
index 8ea66a2700..0b600edf21 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
.classpath
.project
.settings
+.idea
target
# Repository wide ignore mac DS_Store files
diff --git a/kie-maven-plugin/pom.xml b/kie-maven-plugin/pom.xml
index 36ac438159..275ceac28b 100644
--- a/kie-maven-plugin/pom.xml
+++ b/kie-maven-plugin/pom.xml
@@ -26,8 +26,10 @@
io.takari.maven.plugins
takari-lifecycle-plugin
- 1.12.4
true
+
+ none
+
@@ -185,15 +187,14 @@
kie-dmn-core
runtime
-
-
+ org.apache.commons
+ commons-compress
+
+
+ org.apache.commons
+ commons-exec
+
@@ -212,16 +213,15 @@
takari-plugin-testing
test
+
- io.takari.maven.plugins
- takari-plugin-integration-testing
- pom
+ org.slf4j
+ slf4j-ext
test
-
- junit
- junit
+ ch.qos.logback
+ logback-classic
test
diff --git a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/AbstractKieMojo.java b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/AbstractKieMojo.java
index a9ec93a9dc..ef13bec310 100644
--- a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/AbstractKieMojo.java
+++ b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/AbstractKieMojo.java
@@ -22,6 +22,7 @@
public abstract class AbstractKieMojo extends AbstractMojo {
protected void setSystemProperties(Map properties) {
+
if (properties != null) {
getLog().debug("Additional system properties: " + properties);
for (Map.Entry property : properties.entrySet()) {
diff --git a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BuildMojo.java b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BuildMojo.java
index b8bd91ca3b..cd239d9ef4 100644
--- a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BuildMojo.java
+++ b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BuildMojo.java
@@ -198,19 +198,19 @@ private void shareKieObjectsWithMap(InternalKieModule kModule) {
KieMetaInfoBuilder builder = new KieMetaInfoBuilder(kModule);
KieModuleMetaInfo modelMetaInfo = builder.getKieModuleMetaInfo();
- /*Standard for the kieMap keys -> compilationID + dot + class name with first lowercase*/
+ /*Standard for the kieMap keys -> compilationID + dot + class name */
StringBuilder sbModelMetaInfo = new StringBuilder(compilationID).append(".").append(KieModuleMetaInfo.class.getName());
StringBuilder sbkModule = new StringBuilder(compilationID).append(".").append(FileKieModule.class.getName());
if (modelMetaInfo != null) {
optionalKieMap.get().put(sbModelMetaInfo.toString(),
modelMetaInfo);
- getLog().info("KieModelMetaInfo available in the map shared with the Maven Embedded");
+ getLog().info("KieModelMetaInfo available in the map shared with the Maven Embedder");
}
if (kModule != null) {
optionalKieMap.get().put(sbkModule.toString(),
kModule);
- getLog().info("KieModule available in the map shared with the Maven Embedded");
+ getLog().info("KieModule available in the map shared with the Maven Embedder");
}
}
}
diff --git a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BytecodeInjectReactive.java b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BytecodeInjectReactive.java
index 910071a28c..027bcb31e8 100644
--- a/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BytecodeInjectReactive.java
+++ b/kie-maven-plugin/src/main/java/org/kie/maven/plugin/BytecodeInjectReactive.java
@@ -16,7 +16,6 @@
package org.kie.maven.plugin;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
diff --git a/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/InjectReactiveMojoConfigTest.java b/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/InjectReactiveMojoConfigTest.java
deleted file mode 100644
index 3dc5ec19be..0000000000
--- a/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/InjectReactiveMojoConfigTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.drools.compiler.xpath.tobeinstrumented;
-
-import static org.kie.maven.plugin.InjectReactiveMojo.*;
-import static org.junit.Assert.*;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.drools.core.phreak.ReactiveObject;
-import org.junit.Test;
-
-public class InjectReactiveMojoConfigTest {
-
- @Test
- public void testRegexpForPackagesDefault() {
- String[] inputConfig = new String[]{"*"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertTrue(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertTrue(isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertTrue(isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesSingleNoStars() {
- String[] inputConfig = new String[]{"org.drools"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesMultipleNoStars() {
- String[] inputConfig = new String[]{"org.drools", "xyz.my"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertTrue (isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesSingleStars() {
- String[] inputConfig = new String[]{"org.drools.*"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertTrue (isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesMultipleStars() {
- String[] inputConfig = new String[]{"org.drools.*", "xyz.my.*"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertTrue (isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertTrue (isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesCheckPart() {
- String[] inputConfig = new String[]{"my"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded("xyz.my", config));
- }
-
- @Test
- public void testRegexpForPackagesCheckNaming() {
- String[] inputConfig = new String[]{"org.drools", "to.instrument.*"};
-
- List config = convertAllToPkgRegExps(inputConfig);
-
- System.out.println(Arrays.asList(config));
-
- assertFalse(isPackageNameIncluded(Object.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded(ReactiveObject.class.getPackage().getName(), config));
- assertFalse(isPackageNameIncluded("xyz.my", config));
- assertTrue (isPackageNameIncluded("to.instrument", config));
- assertFalse(isPackageNameIncluded("to.not.instrument", config));
- }
-}
diff --git a/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/XPathTest.java b/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/XPathTest.java
deleted file mode 100644
index 3c51d9f76d..0000000000
--- a/kie-maven-plugin/src/test/java/org/drools/compiler/xpath/tobeinstrumented/XPathTest.java
+++ /dev/null
@@ -1,587 +0,0 @@
-package org.drools.compiler.xpath.tobeinstrumented;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import org.drools.compiler.xpath.tobeinstrumented.model.Child;
-import org.drools.compiler.xpath.tobeinstrumented.model.Man;
-import org.drools.compiler.xpath.tobeinstrumented.model.PojoWithCollections;
-import org.drools.compiler.xpath.tobeinstrumented.model.School;
-import org.drools.compiler.xpath.tobeinstrumented.model.TMDirectory;
-import org.drools.compiler.xpath.tobeinstrumented.model.TMFile;
-import org.drools.compiler.xpath.tobeinstrumented.model.TMFileSet;
-import org.drools.compiler.xpath.tobeinstrumented.model.Toy;
-import org.drools.compiler.xpath.tobeinstrumented.model.Woman;
-import org.drools.core.base.ClassObjectType;
-import org.drools.core.common.InternalWorkingMemory;
-import org.drools.core.impl.InternalKnowledgeBase;
-import org.drools.core.phreak.ReactiveCollection;
-import org.drools.core.phreak.ReactiveList;
-import org.drools.core.phreak.ReactiveObject;
-import org.drools.core.phreak.ReactiveSet;
-import org.drools.core.reteoo.BetaMemory;
-import org.drools.core.reteoo.EntryPointNode;
-import org.drools.core.reteoo.LeftInputAdapterNode;
-import org.drools.core.reteoo.LeftTuple;
-import org.drools.core.reteoo.ObjectTypeNode;
-import org.drools.core.reteoo.ReactiveFromNode;
-import org.drools.core.reteoo.TupleMemory;
-import org.drools.core.util.Iterator;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.kie.api.KieBase;
-import org.kie.api.io.ResourceType;
-import org.kie.api.runtime.KieSession;
-import org.kie.internal.utils.KieHelper;
-import org.kie.maven.plugin.BytecodeInjectReactive;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.Assert.*;
-
-public class XPathTest {
- private static final Logger LOG = LoggerFactory.getLogger(XPathTest.class);
-
- @BeforeClass
- public static void init() throws Exception {
- ClassPool cp = new ClassPool(null);
- cp.appendSystemPath();
- cp.appendClassPath(BytecodeInjectReactive.classpathFromClass(ReactiveObject.class));
-
- BytecodeInjectReactive enhancer = BytecodeInjectReactive.newInstance(cp);
-
- /*
- BYTECODE LOADING WARNING: in the following, ensure class is passed as canonical String representation,
- and NOT as a Clazz.class.getCanonicalName(). This is because yes technically it would be possible to
- classload the new instrumented and bytecode injected class in a separate classloader
- HOWEVER it would just make more trouble more down during actual testing.
- This is because if here a class is identified as Clazz.class.getCanonicalName()
- it would be classloaded and remain loaded as the original class,
- hence later in the test there is no way to reload the same class as the bytecode instrumented version
- which is the ultimate intention behind of these tests.
- */
- byte[] personBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.Person");
- byte[] schoolBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.School");
- byte[] childBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.Child");
- byte[] tmfileBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.TMFile");
- byte[] tmfilesetBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.TMFileSet");
- byte[] tmdirectoryBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.TMDirectory");
- byte[] pojoWithCollectionsBytecode = enhancer.injectReactive("org.drools.compiler.xpath.tobeinstrumented.model.PojoWithCollections");
-
- ClassPool cp2 = new ClassPool(null);
- cp2.appendSystemPath();
- cp2.appendClassPath(BytecodeInjectReactive.classpathFromClass(ReactiveObject.class));
-
- loadClassAndUtils(cp2, personBytecode);
- loadClassAndUtils(cp2, childBytecode);
- loadClassAndUtils(cp2, schoolBytecode);
- loadClassAndUtils(cp2, tmfileBytecode);
- loadClassAndUtils(cp2, tmfilesetBytecode);
- loadClassAndUtils(cp2, tmdirectoryBytecode);
- loadClassAndUtils(cp2, pojoWithCollectionsBytecode);
- }
-
- private static void loadClassAndUtils(ClassPool cp, byte[] bytecode) throws Exception {
- CtClass theCtClass = cp.makeClass(new ByteArrayInputStream(bytecode));
- Class> class1 = theCtClass.toClass();
-
- LOG.info("Bytecode-injected class for {} now having the following methods:", theCtClass.getName());
- for ( Method m : class1.getMethods() ) {
- LOG.info(" {}", m );
- }
-
- File dir = new File("./target/JAVASSIST/");
- dir.mkdirs();
- // please note it is INTENTIONAL to write the file with package name part of the file itself, for easier browsing
- // anyway the directory is NOT intended for classloading, but just for browsing bytecode for decompilation.
- File bytecodeFile = new File(dir, theCtClass.getPackageName() + theCtClass.getName() + ".class" );
- bytecodeFile.createNewFile();
- FileOutputStream fos = new FileOutputStream(bytecodeFile);
- fos.write(bytecode);
- fos.close();
- LOG.info("Written bytecode for {} in file: {}.", theCtClass.getName(), bytecodeFile);
- }
-
- @Test
- public void testPojoWithCollectionsBytecode() {
- PojoWithCollections pojo = new PojoWithCollections(new ArrayList(), new ArrayList(), new HashSet());
-
- LOG.info("testPojoWithCollectionsBytecode(): {}", pojo);
-
- assertEquals(pojo.getFieldCollection().getClass(), ReactiveCollection.class);
- assertEquals(pojo.getFieldList().getClass(), ReactiveList.class);
- assertEquals(pojo.getFieldSet().getClass(), ReactiveSet.class);
- }
-
- /**
- * Copied from drools-compiler.
- */
- @Test
- public void testReactiveOnLia() {
- String drl =
- "import org.drools.compiler.xpath.tobeinstrumented.model.*;\n" +
- "global java.util.List list\n" +
- "\n" +
- "rule R when\n" +
- " Man( $toy: /wife/children[age > 10]/toys )\n" +
- "then\n" +
- " list.add( $toy.getName() );\n" +
- "end\n";
-
- KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
- .build()
- .newKieSession();
-
- List list = new ArrayList();
- ksession.setGlobal( "list", list );
-
- Woman alice = new Woman( "Alice", 38 );
- Man bob = new Man( "Bob", 40 );
- bob.setWife( alice );
-
- Child charlie = new Child( "Charles", 12 );
- Child debbie = new Child( "Debbie", 10 );
- alice.addChild( charlie );
- alice.addChild( debbie );
-
- charlie.addToy( new Toy( "car" ) );
- charlie.addToy( new Toy( "ball" ) );
- debbie.addToy( new Toy( "doll" ) );
-
- ksession.insert( bob );
- ksession.fireAllRules();
-
- assertEquals( 2, list.size() );
- assertTrue( list.contains( "car" ) );
- assertTrue( list.contains( "ball" ) );
-
- list.clear();
- debbie.setAge( 11 );
- ksession.fireAllRules();
-
- assertEquals( 1, list.size() );
- assertTrue( list.contains( "doll" ) );
- }
-
- /**
- * Copied from drools-compiler.
- */
- @Test
- public void testReactiveDeleteOnLia() {
- String drl =
- "import org.drools.compiler.xpath.tobeinstrumented.model.*;\n" +
- "global java.util.List list\n" +
- "\n" +
- "rule R when\n" +
- " Man( $toy: /wife/children[age > 10]/toys )\n" +
- "then\n" +
- " list.add( $toy.getName() );\n" +
- "end\n";
-
- KieBase kbase = new KieHelper().addContent( drl, ResourceType.DRL ).build();
- KieSession ksession = kbase.newKieSession();
-
- EntryPointNode epn = ( (InternalKnowledgeBase) ksession.getKieBase() ).getRete().getEntryPointNodes().values().iterator().next();
- ObjectTypeNode otn = epn.getObjectTypeNodes().values().stream()
- .filter(ot-> ot.getObjectType() instanceof ClassObjectType && !((ClassObjectType)ot.getObjectType()).getClassName().contains("InitialFact"))
- .findFirst().get();
- LeftInputAdapterNode lian = (LeftInputAdapterNode)otn.getObjectSinkPropagator().getSinks()[0];
- ReactiveFromNode from1 = (ReactiveFromNode)lian.getSinkPropagator().getSinks()[0];
- ReactiveFromNode from2 = (ReactiveFromNode)from1.getSinkPropagator().getSinks()[0];
- ReactiveFromNode from3 = (ReactiveFromNode)from2.getSinkPropagator().getSinks()[0];
-
- BetaMemory betaMemory = ( (InternalWorkingMemory) ksession ).getNodeMemory(from3).getBetaMemory();
-
- List list = new ArrayList();
- ksession.setGlobal( "list", list );
-
- Woman alice = new Woman( "Alice", 38 );
- Man bob = new Man( "Bob", 40 );
- bob.setWife( alice );
-
- Child charlie = new Child( "Charles", 12 );
- Child debbie = new Child( "Debbie", 11 );
- alice.addChild( charlie );
- alice.addChild( debbie );
-
- charlie.addToy( new Toy( "car" ) );
- charlie.addToy( new Toy( "ball" ) );
- debbie.addToy( new Toy( "doll" ) );
-
- ksession.insert( bob );
- ksession.fireAllRules();
-
- assertEquals( 3, list.size() );
- assertTrue( list.contains( "car" ) );
- assertTrue( list.contains( "ball" ) );
- assertTrue( list.contains( "doll" ) );
-
- TupleMemory tupleMemory = betaMemory.getLeftTupleMemory();
- assertEquals( 2, betaMemory.getLeftTupleMemory().size() );
- Iterator it = tupleMemory.iterator();
- for ( LeftTuple next = it.next(); next != null; next = it.next() ) {
- Object obj = next.getFactHandle().getObject();
- assertTrue( obj == charlie || obj == debbie );
- }
-
- list.clear();
- debbie.setAge( 10 );
- ksession.fireAllRules();
-
- assertEquals( 0, list.size() );
-
- assertEquals( 1, betaMemory.getLeftTupleMemory().size() );
- it = tupleMemory.iterator();
- for ( LeftTuple next = it.next(); next != null; next = it.next() ) {
- Object obj = next.getFactHandle().getObject();
- assertTrue( obj == charlie );
- }
- }
-
- /**
- * Copied from drools-compiler.
- */
- @Test
- public void testReactiveOnBeta() {
- String drl =
- "import org.drools.compiler.xpath.tobeinstrumented.model.*;\n" +
- "global java.util.List list\n" +
- "\n" +
- "rule R when\n" +
- " $i : Integer()\n" +
- " Man( $toy: /wife/children[age > $i]?/toys )\n" +
- "then\n" +
- " list.add( $toy.getName() );\n" +
- "end\n";
-
- KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
- .build()
- .newKieSession();
-
- List list = new ArrayList();
- ksession.setGlobal( "list", list );
-
- Woman alice = new Woman( "Alice", 38 );
- Man bob = new Man( "Bob", 40 );
- bob.setWife( alice );
-
- Child charlie = new Child( "Charles", 12 );
- Child debbie = new Child( "Debbie", 10 );
- alice.addChild( charlie );
- alice.addChild( debbie );
-
- charlie.addToy( new Toy( "car" ) );
- charlie.addToy( new Toy( "ball" ) );
- debbie.addToy( new Toy( "doll" ) );
-
- ksession.insert( 10 );
- ksession.insert( bob );
- ksession.fireAllRules();
-
- assertEquals( 2, list.size() );
- assertTrue( list.contains( "car" ) );
- assertTrue( list.contains( "ball" ) );
-
- list.clear();
- debbie.setAge( 11 );
- ksession.fireAllRules();
-
- assertEquals( 1, list.size() );
- assertTrue( list.contains( "doll" ) );
- }
-
- /**
- * Copied from drools-compiler.
- */
- @Test
- public void testReactive2Rules() {
- String drl =
- "import org.drools.compiler.xpath.tobeinstrumented.model.*;\n" +
- "global java.util.List toyList\n" +
- "global java.util.List teenagers\n" +
- "\n" +
- "rule R1 when\n" +
- " $i : Integer()\n" +
- " Man( $toy: /wife/children[age >= $i]/toys )\n" +
- "then\n" +
- " toyList.add( $toy.getName() );\n" +
- "end\n" +
- "rule R2 when\n" +
- " School( $child: /children[age >= 13] )\n" +
- "then\n" +
- " teenagers.add( $child.getName() );\n" +
- "end\n";
-
- KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
- .build()
- .newKieSession();
-
- List toyList = new ArrayList();
- ksession.setGlobal( "toyList", toyList );
- List teenagers = new ArrayList();
- ksession.setGlobal( "teenagers", teenagers );
-
- Woman alice = new Woman( "Alice", 38 );
- Man bob = new Man( "Bob", 40 );
- bob.setWife( alice );
-
- Child charlie = new Child( "Charles", 15 );
- Child debbie = new Child( "Debbie", 12 );
- alice.addChild( charlie );
- alice.addChild( debbie );
-
- charlie.addToy( new Toy( "car" ) );
- charlie.addToy( new Toy( "ball" ) );
- debbie.addToy( new Toy( "doll" ) );
-
- School school = new School( "Da Vinci" );
- school.addChild( charlie );
- school.addChild( debbie );
-
- ksession.insert( 13 );
- ksession.insert( bob );
- ksession.insert( school );
- ksession.fireAllRules();
-
- assertEquals( 2, toyList.size() );
- assertTrue( toyList.contains( "car" ) );
- assertTrue( toyList.contains( "ball" ) );
-
- assertEquals( 1, teenagers.size() );
- assertTrue( teenagers.contains( "Charles" ) );
-
- toyList.clear();
- debbie.setAge( 13 );
- ksession.fireAllRules();
-
- assertEquals( 1, toyList.size() );
- assertTrue( toyList.contains( "doll" ) );
-
- assertEquals( 2, teenagers.size() );
- assertTrue( teenagers.contains( "Charles" ) );
- assertTrue( teenagers.contains( "Debbie" ) );
- }
-
- /**
- * Copied from drools-compiler ( fixed with DROOLS-1302 )
- */
- @Test
- public void testListReactive() {
- String drl =
- "import org.drools.compiler.xpath.tobeinstrumented.model.*;\n" +
- "\n" +
- "rule R2 when\n" +
- " School( $child: /children[age >= 13 && age < 20] )\n" +
- "then\n" +
- " System.out.println( $child );\n" +
- " insertLogical( $child );\n" +
- "end\n";
-
- KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
- .build()
- .newKieSession();
-
-
- Child charlie = new Child( "Charles", 15 );
- Child debbie = new Child( "Debbie", 19 );
- School school = new School( "Da Vinci" );
- school.addChild( charlie );
- ksession.insert( school );
- ksession.fireAllRules();
- assertTrue(ksession.getObjects().contains(charlie));
- assertFalse(ksession.getObjects().contains(debbie));
-
- school.addChild( debbie );
- ksession.fireAllRules();
- assertTrue(ksession.getObjects().contains(charlie));
- assertTrue(ksession.getObjects().contains(debbie));
-
- school.removeChild(debbie);
- ksession.fireAllRules();
- assertTrue(ksession.getObjects().contains(charlie));
- assertFalse(ksession.getObjects().contains(debbie));
-
- school.addChild( debbie );
- ksession.fireAllRules();
- assertTrue(ksession.getObjects().contains(charlie));
- assertTrue(ksession.getObjects().contains(debbie));
-
- debbie.setAge( 20 );
- ksession.fireAllRules();
- assertTrue(ksession.getObjects().contains(charlie));
- assertFalse(ksession.getObjects().contains(debbie));
- }
-
- private List> factsCollection(KieSession ksession) {
- List