refactoring and adding camel business proxy
This commit is contained in:
parent
f42ed3c71d
commit
a474dcf891
876 changed files with 1692 additions and 1038 deletions
|
|
@ -0,0 +1,13 @@
|
|||
package org.chtijbug;
|
||||
|
||||
public class Test {
|
||||
String value;
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
package org.chtijbug.drools.runtime.impl;
|
||||
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: Samuel
|
||||
* Date: 26/11/12
|
||||
* Time: 12:21
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class RuleBasePackageTestCase {
|
||||
|
||||
|
||||
private static String readFileAsString(String filePath)
|
||||
throws java.io.IOException {
|
||||
StringBuffer fileData = new StringBuffer(1000);
|
||||
BufferedReader reader = new BufferedReader(
|
||||
new FileReader(filePath));
|
||||
char[] buf = new char[1024];
|
||||
int numRead = 0;
|
||||
while ((numRead = reader.read(buf)) != -1) {
|
||||
String readData = String.valueOf(buf, 0, numRead);
|
||||
fileData.append(readData);
|
||||
buf = new char[1024];
|
||||
}
|
||||
reader.close();
|
||||
return fileData.toString();
|
||||
}
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void testXStreamSerialization() {
|
||||
|
||||
try {
|
||||
XStream xstream = new XStream();
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
String pkgXML = xstream.toXML(ruleBasePackage);
|
||||
FileWriter fstream = new FileWriter("/tmp/chtijbug-rule-cache");
|
||||
BufferedWriter out = new BufferedWriter(fstream);
|
||||
out.write(pkgXML);
|
||||
out.close();
|
||||
} catch (IOException ex) {
|
||||
Assert.fail(ex.getMessage());
|
||||
} catch (DroolsChtijbugException e) {
|
||||
Assert.fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void testXStreamDeserialization() {
|
||||
String ruleBaseXML = null;
|
||||
try {
|
||||
ruleBaseXML = readFileAsString("/tmp/chtijbug-rule-cache");
|
||||
if (ruleBaseXML == null)
|
||||
fail();
|
||||
XStream xStream = new XStream();
|
||||
RuleBaseSingleton ruleBasePackage = (RuleBaseSingleton) xStream.fromXML(ruleBaseXML);
|
||||
assertNotNull(ruleBasePackage);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
package org.chtijbug.drools.runtime.impl;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObject;
|
||||
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: samuel
|
||||
* Date: 28/09/12
|
||||
* Time: 17:55
|
||||
*/
|
||||
public class RuleBaseStatefulSessionTestCase {
|
||||
private static RuleBaseSingleton ruleBase;
|
||||
|
||||
private RuleBaseStatefulSession session;
|
||||
private FileKnowledgeResource fibonacciFile;
|
||||
|
||||
|
||||
@Before
|
||||
public void before() throws Exception {
|
||||
fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
ruleBase = new RuleBaseSingleton(1L, 5000, null, "com.pymmasoftware.test", "fibonacci", "1.0.0-SNAPSHOT");
|
||||
// TODO Créer une kbase
|
||||
ruleBase.createKBase(Arrays.asList(fibonacciFile));
|
||||
// TODO créer une session à partir dela KBase
|
||||
session = (RuleBaseStatefulSession) ruleBase.createRuleBaseSession();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void runInsertByReflection() throws Exception {
|
||||
|
||||
DummyFact sibling = new DummyFact("sibling");
|
||||
DummyFact item1 = new DummyFact("items 1");
|
||||
DummyFact item2 = new DummyFact("items 2");
|
||||
DummyFact root = new DummyFact("ROOT", sibling, Arrays.asList(item1, item2));
|
||||
|
||||
try {
|
||||
//_____ Execute reflection insertion
|
||||
session.insertByReflection(root);
|
||||
//_____ Assert that all fact handle have been correctly created
|
||||
Collection<DroolsFactObject> droolsFactObjects = session.listLastVersionObjects();
|
||||
assertEquals(4, droolsFactObjects.size());
|
||||
|
||||
|
||||
DroolsFactObject rootFactObject = session.getLastFactObjectVersion(root);
|
||||
assertNotNull(rootFactObject);
|
||||
DroolsFactObject siblingFactObject = session.getLastFactObjectVersion(sibling);
|
||||
assertNotNull(siblingFactObject);
|
||||
DroolsFactObject item1FactObject = session.getLastFactObjectVersion(item1);
|
||||
assertNotNull(item1FactObject);
|
||||
DroolsFactObject item2FactObject = session.getLastFactObjectVersion(item2);
|
||||
assertNotNull(item2FactObject);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
fail();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class DummyFact {
|
||||
private String name;
|
||||
private DummyFact property;
|
||||
private List<DummyFact> listOfFacts;
|
||||
|
||||
DummyFact(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
DummyFact(String name, DummyFact property) {
|
||||
this(name);
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
DummyFact(String name, DummyFact property, List<DummyFact> listOfFacts) {
|
||||
this(name, property);
|
||||
this.listOfFacts = listOfFacts;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public DummyFact getProperty() {
|
||||
return property;
|
||||
}
|
||||
|
||||
public List<DummyFact> getListOfFacts() {
|
||||
return listOfFacts;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
package org.chtijbug.drools.runtime.resource;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: samuel
|
||||
* Date: 26/09/12
|
||||
* Time: 18:01
|
||||
*/
|
||||
public class WorkbenchResourceTestCase {
|
||||
/**
|
||||
@Test public void testRemoveTrailingSlash() {
|
||||
String expected = "//String";
|
||||
|
||||
String toEval = WorkbenchResource.removeTrailingSlash("//String/");
|
||||
assertEquals("Remove trailind '/' operation failed", expected, toEval);
|
||||
}
|
||||
|
||||
|
||||
@Test public void testGetWebResourceUrl() {
|
||||
WorkbenchResource toTest = new WorkbenchResource("http://localhost:8080/", "drools-guvnor", "amag/", "LATEST", "tomcat", "tomcat");
|
||||
String expected = "http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/amag/LATEST";
|
||||
|
||||
String toEval = toTest.getWebResourceUrl();
|
||||
assertEquals("Expected webresource url not match", expected, toEval);
|
||||
}
|
||||
|
||||
@Test public void testGetResource() {
|
||||
WorkbenchResource toTest = new WorkbenchResource("http://localhost:8080/", "drools-guvnor", "amag/", "LATEST", "tomcat", "tomcat");
|
||||
|
||||
final String expectedChangeSet = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
|
||||
"<change-set xmlns=\"http://drools.org/drools-5.0/change-set\"" +
|
||||
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
|
||||
" xsi:schemaLocation=\"http://drools.org/drools-5.0/change-set changeset-1.0.0.xsd\">" +
|
||||
" <add>" +
|
||||
" <resource" +
|
||||
" type=\"PKG\"" +
|
||||
" source=\"http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/amag/LATEST\"" +
|
||||
" basicAuthentication=\"enabled\"" +
|
||||
" username=\"tomcat\"" +
|
||||
" password=\"tomcat\">" +
|
||||
" </resource>" +
|
||||
" </add>" +
|
||||
"</change-set>";
|
||||
try {
|
||||
Resource toEval = toTest.getResource();
|
||||
|
||||
InputStreamReader reader = new InputStreamReader(toEval.getInputStream());
|
||||
BufferedReader bufferedReader = new BufferedReader(reader);
|
||||
StringWriter writer = new StringWriter();
|
||||
String line;
|
||||
while ( (line=bufferedReader.readLine()) != null ){
|
||||
writer.write(line);
|
||||
}
|
||||
String generatedChangeSet = writer.toString();
|
||||
assertEquals("Generated Change set does not match with the expected one.", expectedChangeSet, generatedChangeSet);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
fail();
|
||||
}
|
||||
}
|
||||
|
||||
public static String prettyFormat(String input, int indent) {
|
||||
try {
|
||||
Source xmlInput = new StreamSource(new StringReader(input));
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
StreamResult xmlOutput = new StreamResult(stringWriter);
|
||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||
transformerFactory.setAttribute("indent-number", indent);
|
||||
Transformer transformer = transformerFactory.newTransformer();
|
||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||
transformer.transform(xmlInput, xmlOutput);
|
||||
return xmlOutput.getWriter().toString();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObject;
|
||||
import org.chtijbug.drools.runtime.*;
|
||||
import org.junit.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* @author nheron
|
||||
*/
|
||||
public class DroolsFactObjectFactoryTest {
|
||||
|
||||
public DroolsFactObjectFactoryTest() {
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpClass() throws Exception {
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownClass() throws Exception {
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
}
|
||||
|
||||
// TODO add test methods here.
|
||||
// The methods must be annotated with annotation @Test. For example:
|
||||
//
|
||||
@Test
|
||||
public void TestIntrosepct() {
|
||||
TestPojoOne underTest = new TestPojoOne();
|
||||
DroolsFactObject fact = DroolsFactObjectFactory.createFactObject(underTest, 1);
|
||||
assertTrue(fact.getListfactObjectAttributes().size() == 7);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void TestIntrosepct2() throws DroolsChtijbugException {
|
||||
RuleBasePackage kbase = RuleBaseBuilder.createRuleBasePackage(new Long("1"), null);
|
||||
RuleBaseSession session = kbase.createRuleBaseSession(2000, null, null);
|
||||
}
|
||||
|
||||
public class TestPojoOne {
|
||||
private Long at01 = new Long(12);
|
||||
private String at02 = "hello";
|
||||
private Integer at03 = new Integer("12");
|
||||
private BigDecimal at04 = new BigDecimal(12.04);
|
||||
private int at10 = 1;
|
||||
private short at11 = 1;
|
||||
private double at12 = 12.99;
|
||||
|
||||
public Long getAt01() {
|
||||
return at01;
|
||||
}
|
||||
|
||||
public void setAt01(Long at01) {
|
||||
this.at01 = at01;
|
||||
}
|
||||
|
||||
public String getAt02() {
|
||||
return at02;
|
||||
}
|
||||
|
||||
public void setAt02(String at02) {
|
||||
this.at02 = at02;
|
||||
}
|
||||
|
||||
public Integer getAt03() {
|
||||
return at03;
|
||||
}
|
||||
|
||||
public void setAt03(Integer at03) {
|
||||
this.at03 = at03;
|
||||
}
|
||||
|
||||
public BigDecimal getAt04() {
|
||||
return at04;
|
||||
}
|
||||
|
||||
public void setAt04(BigDecimal at04) {
|
||||
this.at04 = at04;
|
||||
}
|
||||
|
||||
public int getAt10() {
|
||||
return at10;
|
||||
}
|
||||
|
||||
public void setAt10(int at10) {
|
||||
this.at10 = at10;
|
||||
}
|
||||
|
||||
public short getAt11() {
|
||||
return at11;
|
||||
}
|
||||
|
||||
public void setAt11(short at11) {
|
||||
this.at11 = at11;
|
||||
}
|
||||
|
||||
public double getAt12() {
|
||||
return at12;
|
||||
}
|
||||
|
||||
public void setAt12(double at12) {
|
||||
this.at12 = at12;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObject;
|
||||
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.DeletedFactHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.InsertedFactHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.UpdatedFactHistoryEvent;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.junit.*;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 26/09/12
|
||||
* Time: 14:31
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class FactHandlerListernerTestTest {
|
||||
static RuleBaseSession session;
|
||||
static RuleBasePackage ruleBasePackage;
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
// insert1File = FileKnowledgeResource.createDRLClassPathResource("insert1.drl");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
session.dispose();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test1ObjectInserted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 1);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(0);
|
||||
if (event instanceof InsertedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
Assert.assertEquals(session.getSessionId(), event.getSessionId());
|
||||
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) event;
|
||||
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
|
||||
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
|
||||
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
|
||||
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test1ObjectUpdated() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
newObject.setValue(100);
|
||||
session.updateObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
|
||||
if (event instanceof UpdatedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
Assert.assertEquals(session.getSessionId(), event.getSessionId());
|
||||
UpdatedFactHistoryEvent updatedFactHistoryEvent = (UpdatedFactHistoryEvent) event;
|
||||
DroolsFactObject droolsFactObject = updatedFactHistoryEvent.getObjectOldValue();
|
||||
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
|
||||
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
|
||||
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
|
||||
}
|
||||
}
|
||||
DroolsFactObject droolsFactObject2 = updatedFactHistoryEvent.getObjectNewValue();
|
||||
Assert.assertEquals(droolsFactObject2.getObjectVersion(), 1);
|
||||
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject2.getListfactObjectAttributes()) {
|
||||
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "100");
|
||||
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void retracted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
session.retractObject(newObject);
|
||||
Assert.assertEquals(session.getHistoryContainer().getListHistoryEvent().size(), 2);
|
||||
HistoryEvent event = session.getHistoryContainer().getListHistoryEvent().get(1);
|
||||
if (event instanceof DeletedFactHistoryEvent) {
|
||||
Assert.assertEquals(1, 1);
|
||||
Assert.assertEquals(session.getRuleBaseID(), event.getRuleBaseID());
|
||||
Assert.assertEquals(session.getSessionId(), event.getSessionId());
|
||||
DeletedFactHistoryEvent deletedFactHistoryEvent = (DeletedFactHistoryEvent) event;
|
||||
DroolsFactObject droolsFactObject = deletedFactHistoryEvent.getDeletedObject();
|
||||
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
|
||||
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
|
||||
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test1RuleFired() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "insert1.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
session.fireAllRules();
|
||||
Assert.assertEquals(session.listRules().size(), 1);
|
||||
Assert.assertEquals(session.listLastVersionObjects().size(), 1);
|
||||
|
||||
for (DroolsFactObject droolsFactObject : session.listLastVersionObjects()) {
|
||||
Assert.assertEquals(droolsFactObject.getObjectVersion(), 0);
|
||||
Assert.assertEquals(droolsFactObject.getFullClassName(), "org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
for (DroolsFactObjectAttribute droolsFactObjectAttribute : droolsFactObject.getListfactObjectAttributes()) {
|
||||
if (droolsFactObjectAttribute.getAttributeName().equals("value")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "-1");
|
||||
} else if (droolsFactObjectAttribute.getAttributeName().equals("sequence")) {
|
||||
Assert.assertEquals(droolsFactObjectAttribute.getAttributeValue(), "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObject;
|
||||
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.fact.*;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 17/02/14
|
||||
* Time: 15:37
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class FactHistoryEventTest {
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
//fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeSessionFact() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(1);
|
||||
ruleBaseSession.insertObject(fibonacci);
|
||||
assertThat(historyEvents).hasSize(6);
|
||||
assertThat(historyEvents.get(5)).isInstanceOfAny(InsertedFactHistoryEvent.class);
|
||||
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) historyEvents.get(5);
|
||||
assertThat(insertedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(insertedFactHistoryEvent.getEventID()).isEqualTo(2);
|
||||
assertThat(insertedFactHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(insertedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
|
||||
assertThat(droolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(droolsFactObject.getObjectVersion()).isEqualTo(0);
|
||||
assertThat(droolsFactObject.getRealObject() instanceof Fibonacci);
|
||||
assertThat(droolsFactObject.getListfactObjectAttributes()).hasSize(2);
|
||||
DroolsFactObjectAttribute droolsFactObjectAttribute1 = droolsFactObject.getListfactObjectAttributes().get(0);
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
|
||||
DroolsFactObjectAttribute droolsFactObjectAttribute2 = droolsFactObject.getListfactObjectAttributes().get(1);
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
|
||||
fibonacci.setValue(-2);
|
||||
ruleBaseSession.updateObject(fibonacci);
|
||||
assertThat(historyEvents).hasSize(7);
|
||||
assertThat(historyEvents.get(6) instanceof UpdatedFactHistoryEvent);
|
||||
UpdatedFactHistoryEvent updatedFactHistoryEvent = (UpdatedFactHistoryEvent) historyEvents.get(6);
|
||||
assertThat(updatedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(updatedFactHistoryEvent.getEventID()).isEqualTo(3);
|
||||
assertThat(updatedFactHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(updatedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
DroolsFactObject oldDroolsFactObject = updatedFactHistoryEvent.getObjectOldValue();
|
||||
assertThat(oldDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(oldDroolsFactObject.getObjectVersion()).isEqualTo(0);
|
||||
assertThat(oldDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
|
||||
assertThat(oldDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
|
||||
DroolsFactObjectAttribute oldDroolsFactObjectAttribute1 = oldDroolsFactObject.getListfactObjectAttributes().get(0);
|
||||
assertThat(oldDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
|
||||
assertThat(oldDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
|
||||
assertThat(oldDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
|
||||
DroolsFactObjectAttribute oldDroolsFactObjectAttribute2 = oldDroolsFactObject.getListfactObjectAttributes().get(1);
|
||||
assertThat(oldDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
|
||||
assertThat(oldDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
|
||||
assertThat(oldDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
|
||||
DroolsFactObject newDroolsFactObject = updatedFactHistoryEvent.getObjectNewValue();
|
||||
assertThat(newDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(newDroolsFactObject.getObjectVersion()).isEqualTo(1);
|
||||
assertThat(newDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
|
||||
assertThat(newDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
|
||||
DroolsFactObjectAttribute newDroolsFactObjectAttribute1 = newDroolsFactObject.getListfactObjectAttributes().get(0);
|
||||
assertThat(newDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
|
||||
assertThat(newDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
|
||||
assertThat(newDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
|
||||
DroolsFactObjectAttribute newDroolsFactObjectAttribute2 = newDroolsFactObject.getListfactObjectAttributes().get(1);
|
||||
assertThat(newDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
|
||||
assertThat(newDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-2");
|
||||
assertThat(newDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
|
||||
ruleBaseSession.retractObject(fibonacci);
|
||||
assertThat(historyEvents).hasSize(8);
|
||||
assertThat(historyEvents.get(7)).isInstanceOf(DeletedFactHistoryEvent.class);
|
||||
DeletedFactHistoryEvent deletedFactHistoryEvent = (DeletedFactHistoryEvent) historyEvents.get(7);
|
||||
assertThat(deletedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(deletedFactHistoryEvent.getEventID()).isEqualTo(4);
|
||||
assertThat(deletedFactHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(deletedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
|
||||
DroolsFactObject deletedDroolsFactObject = deletedFactHistoryEvent.getDeletedObject();
|
||||
assertThat(deletedDroolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(deletedDroolsFactObject.getObjectVersion()).isEqualTo(1);
|
||||
assertThat(deletedDroolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
|
||||
assertThat(deletedDroolsFactObject.getListfactObjectAttributes()).hasSize(2);
|
||||
DroolsFactObjectAttribute deletedDroolsFactObjectAttribute1 = deletedDroolsFactObject.getListfactObjectAttributes().get(0);
|
||||
assertThat(deletedDroolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
|
||||
assertThat(deletedDroolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
|
||||
assertThat(deletedDroolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
|
||||
DroolsFactObjectAttribute deletedDroolsFactObjectAttribute2 = deletedDroolsFactObject.getListfactObjectAttributes().get(1);
|
||||
assertThat(deletedDroolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
|
||||
assertThat(deletedDroolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-2");
|
||||
assertThat(deletedDroolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeSessionFactByReflection() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(1);
|
||||
ruleBaseSession.insertByReflection(fibonacci);
|
||||
assertThat(historyEvents.size() == 8);
|
||||
assertThat(historyEvents.get(5)).isInstanceOf(InsertedByReflectionFactStartHistoryEvent.class);
|
||||
InsertedByReflectionFactStartHistoryEvent insertedByReflectionFactHistoryEvent = (InsertedByReflectionFactStartHistoryEvent) historyEvents.get(5);
|
||||
assertThat(insertedByReflectionFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(insertedByReflectionFactHistoryEvent.getEventID()).isEqualTo(2);
|
||||
assertThat(insertedByReflectionFactHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(insertedByReflectionFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
assertThat(historyEvents.get(6)).isInstanceOf(InsertedFactHistoryEvent.class);
|
||||
InsertedFactHistoryEvent insertedFactHistoryEvent = (InsertedFactHistoryEvent) historyEvents.get(6);
|
||||
assertThat(insertedFactHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(insertedFactHistoryEvent.getEventID()).isEqualTo(3);
|
||||
assertThat(insertedFactHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(insertedFactHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
DroolsFactObject droolsFactObject = insertedFactHistoryEvent.getInsertedObject();
|
||||
assertThat(droolsFactObject.getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(droolsFactObject.getObjectVersion()).isEqualTo(0);
|
||||
assertThat(droolsFactObject.getRealObject()).isInstanceOf(Fibonacci.class);
|
||||
assertThat(droolsFactObject.getListfactObjectAttributes()).hasSize(2);
|
||||
DroolsFactObjectAttribute droolsFactObjectAttribute1 = droolsFactObject.getListfactObjectAttributes().get(0);
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeName()).isEqualTo("sequence");
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeValue()).isEqualTo("1");
|
||||
assertThat(droolsFactObjectAttribute1.getAttributeType()).isEqualTo("Integer");
|
||||
DroolsFactObjectAttribute droolsFactObjectAttribute2 = droolsFactObject.getListfactObjectAttributes().get(1);
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeName()).isEqualTo("value");
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeValue()).isEqualTo("-1");
|
||||
assertThat(droolsFactObjectAttribute2.getAttributeType()).isEqualTo("Long");
|
||||
|
||||
assertThat(historyEvents.get(7)).isInstanceOf(InsertedByReflectionFactEndHistoryEvent.class);
|
||||
InsertedByReflectionFactEndHistoryEvent insertedByReflectionFactEndHistoryEvent = (InsertedByReflectionFactEndHistoryEvent) historyEvents.get(7);
|
||||
assertThat(insertedByReflectionFactEndHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(insertedByReflectionFactEndHistoryEvent.getEventID()).isEqualTo(4);
|
||||
assertThat(insertedByReflectionFactEndHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(insertedByReflectionFactEndHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Fact);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
/**
|
||||
* @author Bertrand Gressier
|
||||
* @date 12 déc. 2011
|
||||
* <p/>
|
||||
* <p/>
|
||||
* Source: http://legacy.drools.codehaus.org/Fibonacci+Example
|
||||
*/
|
||||
public class Fibonacci {
|
||||
private int sequence;
|
||||
private long value;
|
||||
|
||||
public Fibonacci(int sequence) {
|
||||
this.sequence = sequence;
|
||||
this.value = -1;
|
||||
}
|
||||
|
||||
public Fibonacci(int sequence, long value) {
|
||||
this.sequence = sequence;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public Fibonacci() {
|
||||
}
|
||||
|
||||
public int getSequence() {
|
||||
return this.sequence;
|
||||
}
|
||||
|
||||
public long getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue(long value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Fibonacci(" + this.sequence + "/" + this.value + ")";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,167 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseCreateSessionEvent;
|
||||
import org.chtijbug.drools.entity.history.session.SessionCreatedEvent;
|
||||
import org.chtijbug.drools.entity.history.session.SessionDisposedEvent;
|
||||
import org.chtijbug.drools.entity.history.session.SessionFireAllRulesBeginEvent;
|
||||
import org.chtijbug.drools.entity.history.session.SessionFireAllRulesEndEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 17/02/14
|
||||
* Time: 15:09
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class KnowledgeBaseHistoryEventTest {
|
||||
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeSessionEventOneSession() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession = ruleBasePackage.createRuleBaseSession();
|
||||
assertThat(historyEvents).hasSize(5);
|
||||
assertThat(historyEvents.get(3)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
|
||||
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent = (KnowledgeBaseCreateSessionEvent) historyEvents.get(3);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getEventID()).isEqualTo(4);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(historyEvents.get(4)).isInstanceOf(SessionCreatedEvent.class);
|
||||
SessionCreatedEvent sessionCreatedEvent = (SessionCreatedEvent) historyEvents.get(4);
|
||||
assertThat(sessionCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionCreatedEvent.getEventID()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
ruleBaseSession.dispose();
|
||||
assertThat(historyEvents).hasSize(6);
|
||||
assertThat(historyEvents.get(5)).isInstanceOf(SessionDisposedEvent.class);
|
||||
SessionDisposedEvent sessionDisposedEvent = (SessionDisposedEvent) historyEvents.get(5);
|
||||
assertThat(sessionDisposedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionDisposedEvent.getEventID()).isEqualTo(2);
|
||||
assertThat(sessionDisposedEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeSessionEventTwoSession() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
|
||||
assertThat(historyEvents).hasSize(5);
|
||||
assertThat(historyEvents.get(3)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
|
||||
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent = (KnowledgeBaseCreateSessionEvent) historyEvents.get(3);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getEventID()).isEqualTo(4);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(knowledgeBaseCreateSessionEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(historyEvents.get(4)).isInstanceOf(SessionCreatedEvent.class);
|
||||
SessionCreatedEvent sessionCreatedEvent = (SessionCreatedEvent) historyEvents.get(4);
|
||||
assertThat(sessionCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionCreatedEvent.getEventID()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
RuleBaseSession ruleBaseSession2 = ruleBasePackage.createRuleBaseSession();
|
||||
assertThat(historyEvents).hasSize(7);
|
||||
assertThat(historyEvents.get(5)).isInstanceOf(KnowledgeBaseCreateSessionEvent.class);
|
||||
KnowledgeBaseCreateSessionEvent knowledgeBaseCreateSessionEvent2 = (KnowledgeBaseCreateSessionEvent) historyEvents.get(5);
|
||||
assertThat(knowledgeBaseCreateSessionEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(knowledgeBaseCreateSessionEvent2.getEventID()).isEqualTo(5);
|
||||
assertThat(knowledgeBaseCreateSessionEvent2.getSessionId()).isEqualTo(2);
|
||||
assertThat(knowledgeBaseCreateSessionEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(historyEvents.get(6)).isInstanceOf(SessionCreatedEvent.class);
|
||||
SessionCreatedEvent sessionCreatedEvent2 = (SessionCreatedEvent) historyEvents.get(6);
|
||||
assertThat(sessionCreatedEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionCreatedEvent2.getEventID()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent2.getSessionId()).isEqualTo(2);
|
||||
assertThat(sessionCreatedEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
|
||||
|
||||
ruleBaseSession1.dispose();
|
||||
assertThat(historyEvents).hasSize(8);
|
||||
assertThat(historyEvents.get(7)).isInstanceOf(SessionDisposedEvent.class);
|
||||
SessionDisposedEvent sessionDisposedEvent = (SessionDisposedEvent) historyEvents.get(7);
|
||||
assertThat(sessionDisposedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionDisposedEvent.getEventID()).isEqualTo(2);
|
||||
assertThat(sessionDisposedEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
ruleBaseSession2.dispose();
|
||||
assertThat(historyEvents).hasSize(9);
|
||||
assertThat(historyEvents.get(8)).isInstanceOf(SessionDisposedEvent.class);
|
||||
SessionDisposedEvent sessionDisposedEvent2 = (SessionDisposedEvent) historyEvents.get(8);
|
||||
assertThat(sessionDisposedEvent2.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionDisposedEvent2.getEventID()).isEqualTo(2);
|
||||
assertThat(sessionDisposedEvent2.getSessionId()).isEqualTo(2);
|
||||
assertThat(sessionDisposedEvent2.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeBaseFireAllRules() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(1);
|
||||
ruleBaseSession1.insertObject(fibonacci);
|
||||
ruleBaseSession1.fireAllRules();
|
||||
assertThat(historyEvents).hasSize(11);
|
||||
assertThat(historyEvents.get(6)).isInstanceOf(SessionFireAllRulesBeginEvent.class);
|
||||
SessionFireAllRulesBeginEvent sessionFireAllRulesBeginEvent = (SessionFireAllRulesBeginEvent) historyEvents.get(6);
|
||||
assertThat(sessionFireAllRulesBeginEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionFireAllRulesBeginEvent.getEventID()).isEqualTo(3);
|
||||
assertThat(sessionFireAllRulesBeginEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionFireAllRulesBeginEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
assertThat(historyEvents.get(10)).isInstanceOf(SessionFireAllRulesEndEvent.class);
|
||||
SessionFireAllRulesEndEvent sessionFireAllRulesEndEvent = (SessionFireAllRulesEndEvent) historyEvents.get(10);
|
||||
assertThat(sessionFireAllRulesEndEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(sessionFireAllRulesEndEvent.getEventID()).isEqualTo(7);
|
||||
assertThat(sessionFireAllRulesEndEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(sessionFireAllRulesEndEvent.getNumberRulesExecuted()).isEqualTo(1);
|
||||
assertThat(sessionFireAllRulesEndEvent.getExecutionTime() > 0l);
|
||||
assertThat(sessionFireAllRulesEndEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Session);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseAddResourceEvent;
|
||||
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseCreatedEvent;
|
||||
import org.chtijbug.drools.entity.history.knowledge.KnowledgeBaseInitialLoadEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 17/02/14
|
||||
* Time: 14:02
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class RuleBaseHistoryEventTest {
|
||||
|
||||
private FileKnowledgeResource fibonacciFile;
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void PackageCreationEvent() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT)", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
assertThat(historyEvents).hasSize(3);
|
||||
assertThat(historyEvents.get(0)).isInstanceOf(KnowledgeBaseCreatedEvent.class);
|
||||
KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = (KnowledgeBaseCreatedEvent) historyEvents.get(0);
|
||||
assertThat(knowledgeBaseCreatedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(knowledgeBaseCreatedEvent.getEventID()).isEqualTo(1);
|
||||
assertThat(knowledgeBaseCreatedEvent.getSessionId()).isNull();
|
||||
assertThat(knowledgeBaseCreatedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(historyEvents.get(2)).isInstanceOf(KnowledgeBaseAddResourceEvent.class);
|
||||
KnowledgeBaseAddResourceEvent knowledgeBaseAddResourceEvent = (KnowledgeBaseAddResourceEvent) historyEvents.get(2);
|
||||
assertThat(knowledgeBaseAddResourceEvent.getEventID()).isEqualTo(3);
|
||||
assertThat(knowledgeBaseAddResourceEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(knowledgeBaseAddResourceEvent.getKnowledgeResources()).hasSize(1);
|
||||
assertThat(knowledgeBaseAddResourceEvent.getKnowledgeResources().get(0)).isInstanceOf(FileKnowledgeResource.class);
|
||||
FileKnowledgeResource drlRessourceFile = (FileKnowledgeResource) knowledgeBaseAddResourceEvent.getKnowledgeResources().get(0);
|
||||
assertThat(drlRessourceFile.getPath()).isEqualTo("fibonacci.drl");
|
||||
assertThat(historyEvents.get(1)).isInstanceOf(KnowledgeBaseInitialLoadEvent.class);
|
||||
KnowledgeBaseInitialLoadEvent knowledgeBaseInitialLoadEvent = (KnowledgeBaseInitialLoadEvent) historyEvents.get(1);
|
||||
assertThat(knowledgeBaseInitialLoadEvent.getEventID()).isEqualTo(2);
|
||||
assertThat(knowledgeBaseInitialLoadEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
/** ruleBasePackage.RecreateKBaseWithNewResources(DrlDroolsResource.createClassPathResource("fibonacciBis.drl"));
|
||||
assertThat(historyEvents.size() == 6);
|
||||
assertThat(historyEvents.get(4) instanceof KnowledgeBaseAddResourceEvent);
|
||||
KnowledgeBaseAddResourceEvent knowledgeBaseAddRessourceEvent2 = (KnowledgeBaseAddResourceEvent) historyEvents.get(4);
|
||||
assertThat(knowledgeBaseAddRessourceEvent2.getEventID(), 5l);
|
||||
assertThat(knowledgeBaseAddRessourceEvent2.getTypeEvent(), HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
assertThat(knowledgeBaseAddRessourceEvent2.getResourceFiles().size() == 1);
|
||||
assertThat(knowledgeBaseAddRessourceEvent2.getResourceFiles().get(0) instanceof DrlResourceFile);
|
||||
DrlResourceFile drlRessourceFile2 = (DrlResourceFile)knowledgeBaseAddRessourceEvent2.getResourceFiles().get(0);
|
||||
assertThat(drlRessourceFile2.getFileName().equals("fibonacciBis.drl"));
|
||||
|
||||
assertThat(historyEvents.get(5) instanceof KnowledgeBaseReloadedEvent);
|
||||
KnowledgeBaseReloadedEvent knowledgeBaseReloadedEvent = (KnowledgeBaseReloadedEvent) historyEvents.get(5);
|
||||
assertThat(knowledgeBaseReloadedEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(knowledgeBaseReloadedEvent.getEventID()).isEqualTo(6);
|
||||
assertThat(knowledgeBaseReloadedEvent.getSessionId()).isEqualTo(0);
|
||||
assertThat(knowledgeBaseReloadedEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.KnowledgeBaseSingleton);
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
|
||||
import org.junit.*;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
|
||||
/**
|
||||
* @author Bertrand Gressier @date 12 déc. 2011
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class RuleBaseStatefullSessionfibonacciTest {
|
||||
|
||||
static RuleBasePackage ruleBasePackage;
|
||||
static private FileKnowledgeResource fibonacciFile;
|
||||
RuleBaseSession session;
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(new Long(1L), "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
}
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
session.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFireAllRulesIsOk() throws Exception {
|
||||
Assert.assertNotNull("RuleBaseSession can't be null", session);
|
||||
// for (int i = 0; i < 1000; i++) {
|
||||
RuleBaseSession session1 = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(5);
|
||||
session1.insertObject(fibonacci);
|
||||
session1.fireAllRules();
|
||||
Assert.assertEquals(3, session1.listRules().size());
|
||||
session1.dispose();
|
||||
//Thread.sleep(2000);
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFireAllRulesIsOk1() throws Exception {
|
||||
Assert.assertNotNull("RuleBaseSession can't be null", session);
|
||||
|
||||
Fibonacci fibonacci = new Fibonacci(5);
|
||||
session.insertObject(fibonacci);
|
||||
session.fireAllRules();
|
||||
|
||||
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
|
||||
System.out.println(hevent);
|
||||
}
|
||||
|
||||
Assert.assertEquals(3, session.listRules().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFireAllRulesIsOk2() throws Exception {
|
||||
Assert.assertNotNull("RuleBaseSession can't be null", session);
|
||||
|
||||
Fibonacci fibonacci = new Fibonacci(5);
|
||||
session.insertObject(fibonacci);
|
||||
session.fireAllRules();
|
||||
|
||||
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
|
||||
System.out.println(hevent);
|
||||
}
|
||||
|
||||
Assert.assertEquals(3, session.listRules().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFireAllRulesIs3Ok() throws Exception {
|
||||
Assert.assertNotNull("RuleBaseSession can't be null", session);
|
||||
|
||||
Fibonacci fibonacci = new Fibonacci(5);
|
||||
session.insertObject(fibonacci);
|
||||
session.fireAllRules();
|
||||
|
||||
for (HistoryEvent hevent : session.getHistoryContainer().getListHistoryEvent()) {
|
||||
System.out.println(hevent);
|
||||
}
|
||||
|
||||
Assert.assertEquals(3, session.listRules().size());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsFactObjectAttribute;
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.AfterRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.BeforeRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 23/11/12
|
||||
* Time: 09:44
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class RuleHandlerListenerTest {
|
||||
static RuleBasePackage ruleBasePackage;
|
||||
RuleBaseSession session;
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
//infiniteLoopFile = FileKnowledgeResource.createDRLClassPathResource("infiniteLoop.drl");
|
||||
//ruleflow1File = FileKnowledgeResource.createDRLClassPathResource("ruleflow1.drl");
|
||||
//ruleFlowProcess1File = FileKnowledgeResource.createDRLClassPathResource("RuleFlowProcess1.bpmn2");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void DefaultMaxNumberRUleExecuted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
try {
|
||||
session.fireAllRules();
|
||||
fail();
|
||||
} catch (DroolsChtijbugException e) {
|
||||
assertThat(e.getKey()).isEqualTo(DroolsChtijbugException.MaxNumberRuleExecutionReached);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void max10tMaxNumberRUleExecuted() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
|
||||
|
||||
session = ruleBasePackage.createRuleBaseSession(10);
|
||||
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
try {
|
||||
session.fireAllRules();
|
||||
fail();
|
||||
} catch (DroolsChtijbugException e) {
|
||||
assertThat(session.getNumberRulesExecuted()).isEqualTo(10);
|
||||
assertThat(e.getKey()).isEqualTo(DroolsChtijbugException.MaxNumberRuleExecutionReached);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void RuleEvent() throws DroolsChtijbugException {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "infiniteLoop.drl");
|
||||
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
try {
|
||||
session.fireAllRules();
|
||||
} catch (DroolsChtijbugException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
List<HistoryEvent> eventList = session.getHistoryContainer().getListHistoryEvent();
|
||||
assertThat(eventList).hasSize(6002);
|
||||
/*
|
||||
BeforeRuleFiredHistoryEvent
|
||||
*/
|
||||
HistoryEvent event1 = eventList.get(1);
|
||||
assertThat(event1).isInstanceOf(BeforeRuleFiredHistoryEvent.class);
|
||||
BeforeRuleFiredHistoryEvent beforeRuleFiredHistoryEvent = (BeforeRuleFiredHistoryEvent) event1;
|
||||
assertThat(beforeRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
|
||||
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().size()).isEqualTo(1);
|
||||
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getFullClassName()).isEqualTo("org.chtijbug.drools.runtime.test.Fibonacci");
|
||||
assertThat(beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getListfactObjectAttributes()).hasSize(2);
|
||||
List<DroolsFactObjectAttribute> droolsFactObjectAttributes = beforeRuleFiredHistoryEvent.getWhenObjects().get(0).getListfactObjectAttributes();
|
||||
assertThat(droolsFactObjectAttributes.get(0).getAttributeValue()).isEqualTo("0");
|
||||
/*
|
||||
AfterRuleFiredHistoryEvent
|
||||
*/
|
||||
HistoryEvent event3 = eventList.get(3);
|
||||
assertThat(event3).isInstanceOf(AfterRuleFiredHistoryEvent.class);
|
||||
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) event3;
|
||||
assertThat(afterRuleFiredHistoryEvent.getRule().getRuleName()).isEqualTo("infiniteLoop");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void RuleFLowgroup1() throws Exception {
|
||||
ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "ruleflow1.drl", "RuleFlowProcess1.bpmn2");
|
||||
|
||||
session = ruleBasePackage.createRuleBaseSession();
|
||||
|
||||
Fibonacci newObject = new Fibonacci(0);
|
||||
session.insertObject(newObject);
|
||||
session.startProcess("P1");
|
||||
session.fireAllRules();
|
||||
//assertThat(session.getNumberRulesExecuted(), 10);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
package org.chtijbug.drools.runtime.test;
|
||||
|
||||
import org.chtijbug.drools.entity.DroolsRuleObject;
|
||||
import org.chtijbug.drools.entity.history.HistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.AfterRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.AfterRuleFlowActivatedHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.AfterRuleFlowDeactivatedHistoryEvent;
|
||||
import org.chtijbug.drools.entity.history.rule.BeforeRuleFiredHistoryEvent;
|
||||
import org.chtijbug.drools.runtime.DroolsChtijbugException;
|
||||
import org.chtijbug.drools.runtime.RuleBaseBuilder;
|
||||
import org.chtijbug.drools.runtime.RuleBasePackage;
|
||||
import org.chtijbug.drools.runtime.RuleBaseSession;
|
||||
import org.chtijbug.drools.runtime.listener.HistoryListener;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* Date: 18/02/14
|
||||
* Time: 13:11
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class RuleHistoryEventTest {
|
||||
|
||||
|
||||
@Before
|
||||
public void justBefore() {
|
||||
// fibonacciFile = FileKnowledgeResource.createDRLClassPathResource("fibonacci.drl");
|
||||
// ruleflow2File = FileKnowledgeResource.createDRLClassPathResource("ruleflow2.drl");
|
||||
// ruleFlowProcess2File = FileKnowledgeResource.createDRLClassPathResource("RuleFlowProcess2.bpmn2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeBaseFireAllRules() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "fibonacci.drl");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(1);
|
||||
ruleBaseSession1.insertObject(fibonacci);
|
||||
ruleBaseSession1.fireAllRules();
|
||||
Assert.assertTrue(historyEvents.size() == 11);
|
||||
Assert.assertTrue(historyEvents.get(7) instanceof BeforeRuleFiredHistoryEvent);
|
||||
BeforeRuleFiredHistoryEvent beforeRuleFiredHistoryEvent = (BeforeRuleFiredHistoryEvent) historyEvents.get(7);
|
||||
assertThat(beforeRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(beforeRuleFiredHistoryEvent.getEventID()).isEqualTo(4);
|
||||
assertThat(beforeRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(beforeRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
|
||||
DroolsRuleObject droolsRuleObject = beforeRuleFiredHistoryEvent.getRule();
|
||||
assertThat(droolsRuleObject.getRuleName()).isEqualTo("Bootstrap");
|
||||
assertThat(droolsRuleObject.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
|
||||
|
||||
Assert.assertTrue(historyEvents.get(9) instanceof AfterRuleFiredHistoryEvent);
|
||||
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) historyEvents.get(9);
|
||||
assertThat(afterRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(afterRuleFiredHistoryEvent.getEventID()).isEqualTo(6);
|
||||
assertThat(afterRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(afterRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
|
||||
DroolsRuleObject droolsRuleObject2 = afterRuleFiredHistoryEvent.getRule();
|
||||
assertThat(droolsRuleObject2.getRuleName()).isEqualTo("Bootstrap");
|
||||
assertThat(droolsRuleObject2.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
|
||||
assertThat(afterRuleFiredHistoryEvent.getRuleInstanceId()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void KnowledgeBaseFireAllRulesRuleFlowGroup() throws DroolsChtijbugException {
|
||||
|
||||
final List<HistoryEvent> historyEvents = new ArrayList<HistoryEvent>();
|
||||
HistoryListener historyListener = new HistoryListener() {
|
||||
@Override
|
||||
public void fireEvent(HistoryEvent newHistoryEvent) throws DroolsChtijbugException {
|
||||
historyEvents.add(newHistoryEvent);
|
||||
}
|
||||
};
|
||||
RuleBasePackage ruleBasePackage = RuleBaseBuilder.createRuleBasePackage(1L, historyListener, "com.pymmasoftware.test", "fibonacci", "1.0.0_SNAPSHOT", "ruleflow2.drl", "RuleFlowProcess2.bpmn2");
|
||||
Long rulePackageID = ruleBasePackage.getRuleBaseID();
|
||||
|
||||
RuleBaseSession ruleBaseSession1 = ruleBasePackage.createRuleBaseSession();
|
||||
Fibonacci fibonacci = new Fibonacci(0);
|
||||
ruleBaseSession1.insertObject(fibonacci);
|
||||
ruleBaseSession1.startProcess("P1");
|
||||
ruleBaseSession1.fireAllRules();
|
||||
assertThat(historyEvents).hasSize(41);
|
||||
assertThat(historyEvents.get(12)).isInstanceOfAny(AfterRuleFlowActivatedHistoryEvent.class);
|
||||
AfterRuleFlowActivatedHistoryEvent afterRuleFlowActivatedHistoryEvent = (AfterRuleFlowActivatedHistoryEvent) historyEvents.get(12);
|
||||
assertThat(afterRuleFlowActivatedHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(afterRuleFlowActivatedHistoryEvent.getEventID()).isEqualTo(8);
|
||||
assertThat(afterRuleFlowActivatedHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(afterRuleFlowActivatedHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.RuleFlowGroup);
|
||||
assertThat(afterRuleFlowActivatedHistoryEvent.getDroolsRuleFlowGroupObject().getName()).isEqualTo("Group1");
|
||||
|
||||
assertThat(historyEvents.get(15)).isInstanceOfAny(AfterRuleFiredHistoryEvent.class);
|
||||
AfterRuleFiredHistoryEvent afterRuleFiredHistoryEvent = (AfterRuleFiredHistoryEvent) historyEvents.get(15);
|
||||
assertThat(afterRuleFiredHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(afterRuleFiredHistoryEvent.getEventID()).isEqualTo(11);
|
||||
assertThat(afterRuleFiredHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(afterRuleFiredHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.Rule);
|
||||
DroolsRuleObject droolsRuleObject2 = afterRuleFiredHistoryEvent.getRule();
|
||||
assertThat(droolsRuleObject2.getRuleName()).isEqualTo("Account group1");
|
||||
assertThat(droolsRuleObject2.getRulePackageName()).isEqualTo("org.chtijbug.drools.runtime.test");
|
||||
assertThat(afterRuleFiredHistoryEvent.getRuleInstanceId()).isEqualTo(1);
|
||||
|
||||
|
||||
assertThat(historyEvents.get(23)).isInstanceOf(AfterRuleFlowDeactivatedHistoryEvent.class);
|
||||
AfterRuleFlowDeactivatedHistoryEvent afterRuleFlowDeactivatedHistoryEvent = (AfterRuleFlowDeactivatedHistoryEvent) historyEvents.get(23);
|
||||
assertThat(afterRuleFlowDeactivatedHistoryEvent.getRuleBaseID()).isEqualTo(rulePackageID);
|
||||
assertThat(afterRuleFlowDeactivatedHistoryEvent.getEventID()).isEqualTo(19);
|
||||
assertThat(afterRuleFlowDeactivatedHistoryEvent.getSessionId()).isEqualTo(1);
|
||||
assertThat(afterRuleFlowDeactivatedHistoryEvent.getTypeEvent()).isEqualTo(HistoryEvent.TypeEvent.RuleFlowGroup);
|
||||
assertThat(afterRuleFlowDeactivatedHistoryEvent.getDroolsRuleFlowGroupObject().getName()).isEqualTo("Group2");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.chtijbug.test.fibonacci;
|
||||
|
||||
/**
|
||||
* @author Bertrand Gressier
|
||||
* @date 12 déc. 2011
|
||||
* <p/>
|
||||
* <p/>
|
||||
* Source: http://legacy.drools.codehaus.org/Fibonacci+Example
|
||||
*/
|
||||
public class Fibonacci {
|
||||
private final int sequence;
|
||||
private long value;
|
||||
|
||||
public Fibonacci(int sequence) {
|
||||
this.sequence = sequence;
|
||||
this.value = -1;
|
||||
}
|
||||
|
||||
public int getSequence() {
|
||||
return this.sequence;
|
||||
}
|
||||
|
||||
public long getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue(long value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Fibonacci(" + this.sequence + "/" + this.value + ")";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions id="Definition"
|
||||
targetNamespace="http://www.jboss.org/drools"
|
||||
typeLanguage="http://www.java.com/javaTypes"
|
||||
expressionLanguage="http://www.mvel.org/2.0"
|
||||
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
|
||||
xmlns:g="http://www.jboss.org/drools/flow/gpd"
|
||||
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
|
||||
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
|
||||
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
|
||||
xmlns:tns="http://www.jboss.org/drools">
|
||||
|
||||
<process processType="Private" isExecutable="true" id="P1" artifactId="Hello World" tns:groupId="org.chtijbug.drools.runtime.test" >
|
||||
|
||||
<!-- nodes -->
|
||||
<startEvent id="_1" artifactId="StartProcess" />
|
||||
<endEvent id="_3" artifactId="EndProcess" />
|
||||
<businessRuleTask id="_4" artifactId="Group1" g:ruleFlowGroup="Group1" >
|
||||
</businessRuleTask>
|
||||
<businessRuleTask id="_5" artifactId="Group2" g:ruleFlowGroup="Group2" >
|
||||
</businessRuleTask>
|
||||
|
||||
<!-- connections -->
|
||||
<sequenceFlow id="_5-_3" sourceRef="_5" targetRef="_3" />
|
||||
<sequenceFlow id="_1-_4" sourceRef="_1" targetRef="_4" />
|
||||
<sequenceFlow id="_4-_5" sourceRef="_4" targetRef="_5" />
|
||||
|
||||
</process>
|
||||
|
||||
<bpmndi:BPMNDiagram>
|
||||
<bpmndi:BPMNPlane bpmnElement="P1" >
|
||||
<bpmndi:BPMNShape bpmnElement="_1" >
|
||||
<dc:Bounds x="16" y="16" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_3" >
|
||||
<dc:Bounds x="462" y="28" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_4" >
|
||||
<dc:Bounds x="161" y="64" width="80" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_5" >
|
||||
<dc:Bounds x="304" y="50" width="80" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="_5-_3" >
|
||||
<di:waypoint x="344" y="74" />
|
||||
<di:waypoint x="486" y="52" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="_1-_4" >
|
||||
<di:waypoint x="40" y="40" />
|
||||
<di:waypoint x="201" y="88" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="_4-_5" >
|
||||
<di:waypoint x="201" y="88" />
|
||||
<di:waypoint x="344" y="74" />
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
|
||||
</definitions>
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions id="Definition"
|
||||
targetNamespace="http://www.jboss.org/drools"
|
||||
typeLanguage="http://www.java.com/javaTypes"
|
||||
expressionLanguage="http://www.mvel.org/2.0"
|
||||
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
|
||||
xmlns:g="http://www.jboss.org/drools/flow/gpd"
|
||||
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
|
||||
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
|
||||
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
|
||||
xmlns:tns="http://www.jboss.org/drools">
|
||||
|
||||
<process processType="Private" isExecutable="true" id="P1" artifactId="Hello World" tns:groupId="org.chtijbug.drools.runtime.test" >
|
||||
|
||||
<!-- nodes -->
|
||||
<startEvent id="_1" artifactId="StartProcess" />
|
||||
<endEvent id="_3" artifactId="EndProcess" />
|
||||
<businessRuleTask id="_4" artifactId="Group1" g:ruleFlowGroup="Group1" >
|
||||
</businessRuleTask>
|
||||
<businessRuleTask id="_5" artifactId="Group2" g:ruleFlowGroup="Group2" >
|
||||
</businessRuleTask>
|
||||
|
||||
<!-- connections -->
|
||||
<sequenceFlow id="_5-_3" sourceRef="_5" targetRef="_3" />
|
||||
<sequenceFlow id="_1-_4" sourceRef="_1" targetRef="_4" />
|
||||
<sequenceFlow id="_4-_5" sourceRef="_4" targetRef="_5" />
|
||||
|
||||
</process>
|
||||
|
||||
<bpmndi:BPMNDiagram>
|
||||
<bpmndi:BPMNPlane bpmnElement="P1" >
|
||||
<bpmndi:BPMNShape bpmnElement="_1" >
|
||||
<dc:Bounds x="16" y="16" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_3" >
|
||||
<dc:Bounds x="462" y="28" width="48" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_4" >
|
||||
<dc:Bounds x="161" y="64" width="80" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape bpmnElement="_5" >
|
||||
<dc:Bounds x="304" y="50" width="80" height="48" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge bpmnElement="_5-_3" >
|
||||
<di:waypoint x="344" y="74" />
|
||||
<di:waypoint x="486" y="52" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="_1-_4" >
|
||||
<di:waypoint x="40" y="40" />
|
||||
<di:waypoint x="201" y="88" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge bpmnElement="_4-_5" >
|
||||
<di:waypoint x="201" y="88" />
|
||||
<di:waypoint x="344" y="74" />
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
|
||||
</definitions>
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* 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.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
dialect "mvel"
|
||||
|
||||
rule Recurse
|
||||
salience 10
|
||||
when
|
||||
not ( Fibonacci ( sequence == 1 ) )
|
||||
f : Fibonacci ( value == -1 )
|
||||
then
|
||||
insert( new Fibonacci( f.sequence - 1 ) );
|
||||
System.out.println( "recurse for " + f.sequence );
|
||||
end
|
||||
|
||||
rule Bootstrap
|
||||
when
|
||||
f : Fibonacci( sequence == 1 || == 2, value == -1 ) // this is a multi-restriction || on a single field
|
||||
then
|
||||
modify ( f ){ value = 1 };
|
||||
System.out.println( f.sequence + " == " + f.value );
|
||||
end
|
||||
|
||||
rule Calculate
|
||||
when
|
||||
f1 : Fibonacci( s1 : sequence, value != -1 ) // here we bind sequence
|
||||
f2 : Fibonacci( sequence == (s1 + 1 ), value != -1 ) // here we don't, just to demonstrate the different way bindings can be used
|
||||
f3 : Fibonacci( s3 : sequence == (f2.sequence + 1 ), value == -1 )
|
||||
then
|
||||
modify ( f3 ) { value = f1.value + f2.value };
|
||||
System.out.println( s3 + " == " + f3.value ); // see how you can access pattern and field bindings
|
||||
end
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* 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.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
dialect "mvel"
|
||||
|
||||
rule Recurse
|
||||
salience 10
|
||||
when
|
||||
not ( Fibonacci ( sequence == 1 ) )
|
||||
f : Fibonacci ( value == -1 )
|
||||
then
|
||||
insert( new Fibonacci( f.sequence - 1 ) );
|
||||
System.out.println( "recurse for " + f.sequence );
|
||||
end
|
||||
|
||||
rule Bootstrap
|
||||
when
|
||||
f : Fibonacci( sequence == 1 || == 2, value == -1 ) // this is a multi-restriction || on a single field
|
||||
then
|
||||
modify ( f ){ value = 1 };
|
||||
System.out.println( f.sequence + " == " + f.value );
|
||||
end
|
||||
|
||||
rule Calculate
|
||||
when
|
||||
f1 : Fibonacci( s1 : sequence, value != -1 ) // here we bind sequence
|
||||
f2 : Fibonacci( sequence == (s1 + 1 ), value != -1 ) // here we don't, just to demonstrate the different way bindings can be used
|
||||
f3 : Fibonacci( s3 : sequence == (f2.sequence + 1 ), value == -1 )
|
||||
then
|
||||
modify ( f3 ) { value = f1.value + f2.value };
|
||||
System.out.println( s3 + " == " + f3.value ); // see how you can access pattern and field bindings
|
||||
end
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
dialect "mvel"
|
||||
|
||||
rule "infiniteLoop"
|
||||
when
|
||||
f : Fibonacci( )
|
||||
then
|
||||
update(f);
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* 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.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
dialect "mvel"
|
||||
|
||||
rule Recurse
|
||||
when
|
||||
then
|
||||
insert( new Fibonacci( 0 ) );
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<layout class="ch.qos.logback.classic.PatternLayout">
|
||||
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<logger name="org.chtijbug.drools.runtime" level="TRACE"/>
|
||||
|
||||
|
||||
<root level="debug">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package org.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
|
||||
rule "Account group1"
|
||||
ruleflow-group "Group1"
|
||||
when
|
||||
Fibonacci(sequence==0 )
|
||||
then
|
||||
insert( new Fibonacci( 1 ) );
|
||||
|
||||
end
|
||||
rule "Account group2"
|
||||
ruleflow-group "Group2"
|
||||
when
|
||||
Fibonacci(sequence==1 )
|
||||
then
|
||||
insert( new Fibonacci( 2 ) );
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package org.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
|
||||
rule "Account group1"
|
||||
ruleflow-group "Group1"
|
||||
when
|
||||
Fibonacci(sequence==0 )
|
||||
then
|
||||
insert( new Fibonacci( 1 ) );
|
||||
|
||||
end
|
||||
rule "Account group2"
|
||||
ruleflow-group "Group2"
|
||||
when
|
||||
Fibonacci(sequence==1 )
|
||||
then
|
||||
insert( new Fibonacci( 2 ) );
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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.chtijbug.drools.runtime.test
|
||||
|
||||
import org.chtijbug.drools.runtime.test.Fibonacci;
|
||||
|
||||
dialect "mvel"
|
||||
|
||||
rule "rule1"
|
||||
when
|
||||
Fibonacci(sequence==0 )
|
||||
then
|
||||
insert( new Fibonacci( 1 ) );
|
||||
|
||||
end
|
||||
Loading…
Add table
editor.link_modal.header
Reference in a new issue