[jboss-svn-commits] JBL Code SVN: r29250 - in labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main: java/org/drools/examples/broker/model and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 8 10:50:52 EDT 2009


Author: tirelli
Date: 2009-09-08 10:50:51 -0400 (Tue, 08 Sep 2009)
New Revision: 29250

Added:
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl
Modified:
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf
Log:
Improving fusion broker example

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java	2009-09-08 14:50:51 UTC (rev 29250)
@@ -31,6 +31,8 @@
 import org.drools.examples.broker.model.StockTick;
 import org.drools.examples.broker.ui.BrokerWindow;
 import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
@@ -40,7 +42,7 @@
  * @author etirelli
  */
 public class Broker implements EventReceiver, BrokerServices {
-    private static final String[] ASSET_FILES = { "/broker.drl", "/position.drl", "/position.rf" };
+    private static final String[] ASSET_FILES = { "/broker.drl", "/notify.drl", "/position.rf", "/position.drl" };
     
     private BrokerWindow window;
     private CompanyRegistry companies;
@@ -66,6 +68,7 @@
             this.session.fireAllRules();
             window.updateCompany( company.getSymbol() );
             window.updateTick( tick );
+            
         } catch ( Exception e ) {
             System.err.println("=============================================================");
             System.err.println("Unexpected exception caught: "+e.getMessage() );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java	2009-09-08 14:50:51 UTC (rev 29250)
@@ -47,7 +47,7 @@
         CompanyRegistry registry = new CompanyRegistry();
         BrokerWindow window = new BrokerWindow( registry.getCompanies() );
         window.show();
-        Thread.currentThread().sleep( 10000 );
+        //Thread.sleep( 10000 );
         Broker broker = new Broker( window, registry );
         
         TimerService clock = new JDKTimerService(1);

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java	2009-09-08 14:50:51 UTC (rev 29250)
@@ -56,8 +56,11 @@
         this.quant = quant;
     }
 
+    @Override
+    public String toString() {
+    	return "PortfolioAction( "+action+" "+symbol+" "+quant+ " )";
+    }
     
-    
 
 
 }

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java	2009-09-08 14:50:51 UTC (rev 29250)
@@ -78,8 +78,8 @@
         
         frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
         frame.setTitle( "Drools Fusion Example: Simple Broker" );
-        frame.setResizable( false );
-        frame.pack();
+        frame.setResizable( true );
+        frame.setSize(800, 350);
         
         Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
         frame.setLocation( (screen.width-frame.getWidth())/2, (screen.height-frame.getHeight())/2 );

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java	2009-09-08 14:50:51 UTC (rev 29250)
@@ -18,7 +18,6 @@
 
 import java.awt.Color;
 import java.awt.Dimension;
-import java.awt.Font;
 import java.awt.Graphics;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl	2009-09-08 14:50:51 UTC (rev 29250)
@@ -81,6 +81,7 @@
 # this rule shows a trick to get the last available event as well as 
 # how to call global services from the consequence
 rule "sudden drop"
+    enabled true
     agenda-group "report"
 when
     $st : StockTick( $sb : symbol, $ts : timestamp, $pr : price, $dt : delta < -0.05 ) from entry-point "StockTick stream"

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl	2009-09-08 14:50:51 UTC (rev 29250)
@@ -0,0 +1,13 @@
+package org.drools.examples.broker
+
+import org.drools.examples.broker.model.PortfolioAction
+import org.drools.runtime.rule.FactHandle
+
+rule "Portfolio action no longer needed"
+        dialect "mvel"
+        ruleflow-group "notify"
+	when
+		$pa : PortfolioAction()
+	then
+		retract( $pa );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl	2009-09-08 14:50:51 UTC (rev 29250)
@@ -2,6 +2,7 @@
 
 import org.drools.examples.broker.model.SuddenDropEvent
 import org.drools.examples.broker.model.PortfolioAction
+import org.drools.examples.broker.model.Action
 import java.util.Map
 import java.util.HashMap
 
@@ -9,10 +10,6 @@
 
 dialect "mvel"
 
-declare PortfolioAction
-    @role( event )
-end
-
 # an event declaration to represent situations
 # where a suddent drop happens. In this case we are not
 # defining any explicit expiration policy. 
@@ -20,6 +17,7 @@
     @role( event )
 end
 
+# here we have an example of a rule that controls a process
 rule "Start adjust position process"
 when
     $sde : SuddenDropEvent( ) from entry-point "Analysis Events"
@@ -28,15 +26,46 @@
     drools.getKnowledgeRuntime().startProcess( "adjust position", variables );
 end
 
-rule "Check current position and take action if necessary"
+
+# bellow we have rules controlled by the process,
+# i.e., the process will fire these rules when necessary
+# to re-evaluate the position
+rule "If the drop is between 6% and 8%, buy more shares"
     ruleflow-group "evaluate position"
 when
-    $sde : SuddenDropEvent( ) from entry-point "Analysis Events"
+    $sde : SuddenDropEvent( percent >= -0.08 && < -0.06 ) from entry-point "Analysis Events"
 then
     with( pa = new PortfolioAction() ) {
-        action = selectAction(),
+        action = Action.BUY,
         symbol = $sde.symbol,
         quant = 100
     }
-    entryPoints["Analysis Events"].insert( pa );
-end    
\ No newline at end of file
+    insert( pa );
+end    
+
+rule "If the drop is on more than 8%, sell shares"
+    ruleflow-group "evaluate position"
+when
+    $sde : SuddenDropEvent( percent < -0.08 ) from entry-point "Analysis Events"
+then
+    with( pa = new PortfolioAction() ) {
+        action = Action.SELL,
+        symbol = $sde.symbol,
+        quant = 100
+    }
+    insert( pa );
+end    
+
+
+rule "If the drop is between 5% and 6%, do nothing"
+    ruleflow-group "evaluate position"
+when
+    $sde : SuddenDropEvent( percent >= -0.06 ) from entry-point "Analysis Events"
+then
+    with( pa = new PortfolioAction() ) {
+        action = Action.NOACTION,
+        symbol = $sde.symbol
+    }
+    insert( pa );
+end    
+

Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf	2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf	2009-09-08 14:50:51 UTC (rev 29250)
@@ -1,53 +1,62 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<process xmlns="http://drools.org/drools-5.0/process"
-         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
-         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
-         type="RuleFlow" name="Adjust Position" id="adjust position" package-name="org.drools.examples.broker.model" >
-
-  <header>
-    <imports>
-      <import name="org.drools.examples.broker.model.Action" />
-      <import name="org.drools.examples.broker.model.PortfolioAction" />
-    </imports>
-    <variables>
-      <variable name="symbol" >
-        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-      </variable>
-      <variable name="quant" >
-        <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
-      </variable>
-    </variables>
-  </header>
-
-  <nodes>
-    <start id="1" name="Start" x="16" y="101" width="48" height="48" />
-    <end id="3" name="End" x="515" y="101" width="48" height="48" />
-    <ruleSet id="4" name="Evaluate Position" x="96" y="101" width="106" height="48" ruleFlowGroup="evaluate position" />
-    <actionNode id="6" name="Buy Shares" x="315" y="16" width="87" height="48" >
-        <action type="expression" dialect="mvel" >System.out.println( "Buying #{quant}  "+symbol+" shares" );</action>
-    </actionNode>
-    <actionNode id="7" name="Sell Shares" x="317" y="192" width="87" height="48" >
-        <action type="expression" dialect="mvel" >System.out.println( "Selling #{quant}  "+symbol+" shares" );</action>
-    </actionNode>
-    <split id="11" name="Take Action" x="234" y="101" width="49" height="49" type="2" >
-      <constraints>
-        <constraint toNodeId="7" name="Sell" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.SELL )  from entry-point "Analysis Events"</constraint>
-        <constraint toNodeId="12" name="No action" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.NOACTION ) from entry-point "Analysis Events"</constraint>
-        <constraint toNodeId="6" name="Buy" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.BUY )  from entry-point "Analysis Events"</constraint>
-      </constraints>
-    </split>
-    <join id="12" name="Action taken" x="434" y="101" width="49" height="49" type="2" />
-  </nodes>
-
-  <connections>
-    <connection from="12" to="3" />
-    <connection from="1" to="4" />
-    <connection from="11" to="6" />
-    <connection from="11" to="7" />
-    <connection from="4" to="11" />
-    <connection from="11" to="12" />
-    <connection from="6" to="12" />
-    <connection from="7" to="12" />
-  </connections>
-
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="Adjust Position" id="adjust position" package-name="org.drools.examples.broker.model" >
+
+  <header>
+    <imports>
+      <import name="org.drools.examples.broker.model.Action" />
+      <import name="org.drools.examples.broker.model.PortfolioAction" />
+    </imports>
+    <globals>
+      <global identifier="services" type="org.drools.examples.broker.BrokerServices" />
+    </globals>
+    <variables>
+      <variable name="symbol" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+      </variable>
+      <variable name="quant" >
+        <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="16" y="101" width="80" height="48" />
+    <end id="3" name="End" x="1113" y="100" width="76" height="48" />
+    <ruleSet id="4" name="Evaluate Position" x="129" y="102" width="157" height="48" ruleFlowGroup="evaluate position" />
+    <actionNode id="6" name="Buy Shares" x="533" y="22" width="124" height="48" >
+        <action type="expression" dialect="mvel" >services.log( "Buying "+symbol+" shares" ) ;</action>
+    </actionNode>
+    <actionNode id="7" name="Sell Shares" x="533" y="204" width="124" height="48" >
+        <action type="expression" dialect="mvel" >services.log( "Selling "+symbol+" shares" );</action>
+    </actionNode>
+    <split id="11" name="Take Action" x="340" y="99" width="108" height="49" type="2" >
+      <constraints>
+        <constraint toNodeId="7" toType="DROOLS_DEFAULT" name="Sell" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.SELL ) </constraint>
+        <constraint toNodeId="13" toType="DROOLS_DEFAULT" name="No action" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.NOACTION )  </constraint>
+        <constraint toNodeId="6" toType="DROOLS_DEFAULT" name="Buy" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.BUY )  </constraint>
+      </constraints>
+    </split>
+    <join id="12" name="Action taken" x="709" y="99" width="141" height="49" type="2" />
+    <actionNode id="13" name="No Action" x="540" y="105" width="111" height="40" >
+        <action type="expression" dialect="mvel" >services.log( "Doing no changes to current position" );</action>
+    </actionNode>
+    <ruleSet id="14" name="Notify" x="939" y="104" width="80" height="40" ruleFlowGroup="notify" />
+  </nodes>
+
+  <connections>
+    <connection from="14" to="3" />
+    <connection from="1" to="4" />
+    <connection from="11" to="6" />
+    <connection from="11" to="7" />
+    <connection from="4" to="11" />
+    <connection from="6" to="12" />
+    <connection from="7" to="12" />
+    <connection from="13" to="12" />
+    <connection from="11" to="13" />
+    <connection from="12" to="14" />
+  </connections>
+
 </process>
\ No newline at end of file



More information about the jboss-svn-commits mailing list