@Test public void testCollectFromMVELAfterOr() throws Exception { KieBase kbase = loadKnowledgeBase( "test_CollectFromMVELAfterOr.drl"); KieSession wm = createKnowledgeSession(kbase); List results = new ArrayList(); wm.setGlobal( "results", results ); Person jill = new Person( "jill" ); Person bob = new Person( "bob" ); List addresses = new ArrayList(); addresses.add( new Address( "a" ) ); addresses.add( new Address( "b" ) ); addresses.add( new Address( "c" ) ); bob.setAddresses( addresses ); wm.insert( jill ); wm.insert( bob ); wm = SerializationHelper.getSerialisedStatefulKnowledgeSession(wm, true); results = (List) wm.getGlobal( "results" ); wm.fireAllRules(); assertEquals( 2, results.size() ); assertEquals( 3, ((Collection) results.get( 0 )).size() ); }
@Test public void testModifyWithGetter() { final String rule1 = "package foo.bar\n" + "import " + Person.class.getName() + "\n" + "declare Person @propertyReactive end\n" + "rule x\n" + " when\n" + " $p : Person( address != null ) @watch(!address) \n" + " then\n" + " modify($p){getAddress().setStreet(\"foo\");}\n" + "end"; final KieHelper helper = new KieHelper(); helper.addContent(rule1, ResourceType.DRL); final KieSession ksession = helper.build().newKieSession(); final Person p = new Person(); p.setAddress(new Address()); ksession.insert(p); final int fired = ksession.fireAllRules(10); assertEquals(1, fired); assertEquals("foo", p.getAddress().getStreet()); }
@Test public void testModifyBlockWithFrom() throws Exception { final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_ModifyBlockWithFrom.drl")); final KieSession ksession = createKnowledgeSession(kbase); final List results = new ArrayList(); ksession.setGlobal("results", results); final Person bob = new Person("Bob"); final Address addr = new Address("abc"); bob.addAddress(addr); ksession.insert(bob); ksession.insert(addr); ksession.fireAllRules(); // modify worked assertEquals("12345", addr.getZipCode()); // chaining worked assertEquals(1, results.size()); assertEquals(addr, results.get(0)); }
@Test public void testFromWithOr() throws Exception { KieBase kbase = loadKnowledgeBase( "test_FromWithOr.drl"); KieSession session = createKnowledgeSession(kbase); final List<Address> results = new ArrayList<Address>(); session.setGlobal( "results", results ); Address a1 = new Address(); a1.setZipCode( "12345" ); Address a2 = new Address(); a2.setZipCode( "54321" ); Address a3 = new Address(); a3.setZipCode( "99999" ); Person p = new Person(); p.addAddress( a1 ); p.addAddress( a2 ); p.addAddress( a3 ); session.insert( p ); session.fireAllRules(); assertEquals( 2, results.size() ); assertTrue( results.contains( a1 ) ); assertTrue( results.contains( a2 ) ); }
public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } Address other = (Address) obj; return equals(this.getStreet(),other.getStreet()) && equals(this.getStreetNumber(), other.getStreetNumber()) && equals(this.getStreetLetter(), other.getStreetLetter()) && equals(this.getTown(), other.getTown()); } private boolean equals(Object control, Object test) { if(null == control) { return null == test; } return control.equals(test); }
import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(CustomerImpl.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("input.xml"); Customer customer = (Customer) unmarshaller.unmarshal(xml); Address address = customer.getAddress(); System.out.println(address.getStreet()); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(customer, System.out); } }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((address == null) ? 0 : address.hashCode()); result = prime * result + ((addresses == null) ? 0 : addresses.hashCode()); result = prime * result + age; result = prime * result + (alive ? 1231 : 1237); result = prime * result + ((bigDecimal == null) ? 0 : bigDecimal.hashCode()); result = prime * result + ((bigInteger == null) ? 0 : bigInteger.hashCode()); result = prime * result + ((cheese == null) ? 0 : cheese.hashCode()); result = prime * result + ((hair == null) ? 0 : hair.hashCode()); result = prime * result + (happy ? 1231 : 1237); result = prime * result + ((likes == null) ? 0 : likes.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((object == null) ? 0 : object.hashCode()); result = prime * result + ((pet == null) ? 0 : pet.hashCode()); result = prime * result + sex; return result; }
if ( address == null ) { if ( other.getAddress() != null ) return false; } else if ( !address.equals( other.getAddress() ) ) return false; if ( addresses == null ) { if ( other.getAddresses() != null ) return false;
@XmlRootElement(name="address") class Address { ... @XmlElement String street; } @XmlRootElement(name="person") class Person { ... @XmlTransient Address address; @XmlElement public String getStreet() { return (address!= null) ? address.getStreet() : null; } }
@Test public void testMapNullConstraint() throws Exception { final KieBase kbase = loadKnowledgeBase("test_mapNullConstraints.drl"); final KieSession ksession = createKnowledgeSession(kbase); final org.kie.api.event.rule.AgendaEventListener ael = mock(org.kie.api.event.rule.AgendaEventListener.class); ksession.addEventListener(ael); new WorkingMemoryConsoleLogger((WorkingMemory) ksession); final Map addresses = new HashMap(); addresses.put("home", new Address("home street")); final Person bob = new Person("Bob"); bob.setNamedAddresses(addresses); ksession.insert(bob); ksession.fireAllRules(); final ArgumentCaptor<AfterMatchFiredEvent> arg = ArgumentCaptor.forClass(org.kie.api.event.rule.AfterMatchFiredEvent.class); verify(ael, times(4)).afterMatchFired(arg.capture()); org.kie.api.event.rule.AfterMatchFiredEvent aaf = arg.getAllValues().get(0); assertThat(aaf.getMatch().getRule().getName(), is("1. home != null")); aaf = arg.getAllValues().get(1); assertThat(aaf.getMatch().getRule().getName(), is("2. not home == null")); aaf = arg.getAllValues().get(2); assertThat(aaf.getMatch().getRule().getName(), is("7. work == null")); aaf = arg.getAllValues().get(3); assertThat(aaf.getMatch().getRule().getName(), is("8. not work != null")); }
@Test public void testModifyBlockWithFrom() throws Exception { KnowledgeBase kbase = SerializationHelper.serializeObject( loadKnowledgeBase( "test_ModifyBlockWithFrom.drl" ) ); StatefulKnowledgeSession ksession = createKnowledgeSession( kbase ); final List results = new ArrayList(); ksession.setGlobal( "results", results ); Person bob = new Person( "Bob" ); Address addr = new Address( "abc" ); bob.addAddress( addr ); ksession.insert( bob ); ksession.insert( addr ); ksession.fireAllRules(); // modify worked assertEquals( "12345", addr.getZipCode() ); // chaining worked assertEquals( 1, results.size() ); assertEquals( addr, results.get( 0 ) ); }
class Address{ private street = "123 Lame Street"; public getStreet(){ return street; } } class Warehouse{ Address address = new Address(); // create an instance; not just declare public void shipping(){ shipTo(address.getStreet()); // Here's how to "communicate" } }
@Test public void testMixedNullSafes() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " $p : Person( " + " address!.street!.length > 0 && ( address!.street!.length < 15 || > 20 && < 30 ) " + " && address!.zipCode!.length > 0 && address.zipCode == \"12345\" " + " ) \n" + "then\n" + " System.out.println( $p ); \n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street",null,"12345")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); Person alex = new Person("Alex", 34); alex.setAddress(new Address("The Main Verrry Long Street")); ksession.insert(alex); Person frank = new Person("Frank", 24); frank.setAddress(new Address("Long Street number 21",null,"12345")); ksession.insert(frank); assertEquals(2, ksession.fireAllRules()); ksession.dispose(); }
@Test public void testDoubleNullSafe() { String str = "import org.drools.compiler.*;\n" + "rule R1 when\n" + " Person( address!.street!.length > 15 ) \n" + "then\n" + "end"; KieBase kbase = loadKnowledgeBaseFromString(str); KieSession ksession = kbase.newKieSession(); ksession.insert(new Person("Mario", 38)); Person mark = new Person("Mark", 37); mark.setAddress(new Address("Main Street")); ksession.insert(mark); Person edson = new Person("Edson", 34); edson.setAddress(new Address(null)); ksession.insert(edson); Person alex = new Person("Alex", 34); alex.setAddress(new Address("The Main Very Big Street")); ksession.insert(alex); assertEquals(1, ksession.fireAllRules()); ksession.dispose(); }