package org.drools.integrationtests; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Date; import java.util.List; import junit.framework.TestCase; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.Cheese; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderError; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.logger.KnowledgeRuntimeLogger; import org.drools.logger.KnowledgeRuntimeLoggerFactory; import org.drools.runtime.StatefulKnowledgeSession; /** * This is a sample class to launch a rule. */ public class DateComparisonTest extends TestCase { public void testDateComparisonThan() throws Exception { List<String> results = new ArrayList<String>(); // load up the knowledge base String str = ""; str += "package org.drools;\n"; str += "dialect \"mvel\"\n"; str += "global java.util.List results;\n"; str += "rule \"test date greater than\"\n"; str += " when\n"; str += " $c : Cheese(type == \"Yesterday\")\n"; str += " Cheese(type == \"Tomorrow\", usedBy > ($c.usedBy))\n"; str += " then\n"; str += " results.add( \"test date greater than\" );\n"; str += "end\n"; str += "rule \"test date less than\"\n"; str += " when\n"; str += " $c : Cheese(type == \"Tomorrow\")\n"; str += " Cheese(type == \"Yesterday\", usedBy < ($c.usedBy));\n"; str += " then\n"; str += " results.add( \"test date less than\" );\n"; str += "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.setGlobal( "results", results ); KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger( ksession, "test" ); // go ! Cheese yesterday = new Cheese( "Yesterday" ); yesterday.setUsedBy( yesterday() ); Cheese tomorrow = new Cheese( "Tomorrow" ); tomorrow.setUsedBy( tomorrow() ); ksession.insert( yesterday ); ksession.insert( tomorrow ); ksession.fireAllRules(); logger.close(); assertEquals( 2, results.size() ); assertTrue( results.contains( "test date greater than" ) ); assertTrue( results.contains( "test date less than" ) ); } private Date yesterday() { Calendar c = new GregorianCalendar(); c.set( Calendar.DAY_OF_MONTH, c.get( Calendar.DAY_OF_MONTH ) - 1 ); return c.getTime(); } private Date tomorrow() { Calendar c = new GregorianCalendar(); c.set( Calendar.DAY_OF_MONTH, c.get( Calendar.DAY_OF_MONTH ) + 1 ); return c.getTime(); } }