[jboss-svn-commits] JBL Code SVN: r24597 - in labs/jbossrules/trunk/drools-examples: drools-examples-fusion and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 8 01:05:28 EST 2009


Author: tirelli
Date: 2009-01-08 01:05:27 -0500 (Thu, 08 Jan 2009)
New Revision: 24597

Added:
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.classpath
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.project
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/pom.xml
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/
   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/events/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/Event.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventFeeder.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventGenerator.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventImpl.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventReceiver.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventSource.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/StockTickPersister.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/Company.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/CompanyRegistry.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/StockTick.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/
   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/CompanyPanel.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/LogPanel.java
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/stocktickstream.dat
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/
   labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/EventFeederTest.java
Log:
Adding fusion example


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.classpath	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/rules"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.0.SNAPSHOT/drools-api-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.0.0.SNAPSHOT/drools-api-5.0.0.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/jgoodies/forms/1.2.1/forms-1.2.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar" sourcepath="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar" sourcepath="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/jgoodies/looks/2.2.0/looks-2.2.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.5/mvel2-2.0.5.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.classpath
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.project
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.project	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,16 @@
+<projectDescription>
+  <name>drools-examples-fusion</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.drools.eclipse.droolsbuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/.project
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/pom.xml	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.0.SNAPSHOT</version>
+  </parent>
+
+  <!--
+    TODO make this packing pom and make 2 submodules: example-waltz and example-manners
+    (and possibly example-common too)
+  -->
+  <artifactId>drools-examples-fusion</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Examples Fusion</name>
+
+  <dependencies>
+    <!-- Internal dependencies -->
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>
+
+    <!-- External dependencies -->
+    <dependency>
+      <groupId>com.jgoodies</groupId>
+      <artifactId>looks</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.jgoodies</groupId>
+      <artifactId>forms</artifactId>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <project.mainClass>org.drools.benchmark.waltz.WaltzBenchmark</project.mainClass>
+  </properties>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+      </resource>
+      <resource>
+        <directory>src/main/rules</directory>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-eclipse-plugin</artifactId>
+        <configuration>
+          <additionalBuildcommands>
+            <buildcommand>org.drools.eclipse.droolsbuilder</buildcommand>
+          </additionalBuildcommands>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <mainClass>${project.mainClass}</mainClass>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+</project>

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker;
+
+import java.io.IOException;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.examples.broker.events.Event;
+import org.drools.examples.broker.events.EventReceiver;
+import org.drools.examples.broker.model.Company;
+import org.drools.examples.broker.model.CompanyRegistry;
+import org.drools.examples.broker.model.StockTick;
+import org.drools.examples.broker.ui.BrokerWindow;
+import org.drools.io.ResourceFactory;
+import org.drools.rule.EntryPoint;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+/**
+ * The broker application
+ *  
+ * @author etirelli
+ */
+public class Broker implements EventReceiver {
+    private static final String RULES_FILE = "/broker.drl";
+    
+    private BrokerWindow window;
+    private CompanyRegistry companies;
+    private StatefulKnowledgeSession session;
+    private WorkingMemoryEntryPoint tickStream;
+
+    public Broker(BrokerWindow window,
+                  CompanyRegistry companies) {
+        super();
+        this.window = window;
+        this.companies = companies;
+        this.session = createSession();
+        this.tickStream = this.session.getWorkingMemoryEntryPoint( "StockTick stream" );
+    }
+
+    @SuppressWarnings("unchecked")
+    public void receive(Event<?> event) {
+        StockTick tick = ((Event<StockTick>)event).getObject();
+        Company company = this.companies.getCompany( tick.getSymbol() );
+        this.tickStream.insert( tick );
+        this.session.fireAllRules();
+        window.updateCompany( company.getSymbol() );
+    }
+    
+    private StatefulKnowledgeSession createSession() {
+        KnowledgeBase kbase = loadRuleBase();
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+        for( Company company : this.companies.getCompanies() ) {
+            session.insert( company );
+        }
+        return session;
+    }
+
+    private KnowledgeBase loadRuleBase() {
+        KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        try {
+            builder.add( ResourceFactory.newInputStreamResource( Broker.class.getResourceAsStream( RULES_FILE ) ),
+                         ResourceType.DRL);
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( builder.getKnowledgePackages() );
+        return kbase;
+    }
+    
+    
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
___________________________________________________________________
Name: svn:executable
   + *

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker;
+
+import java.io.InputStreamReader;
+
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+
+import org.drools.examples.broker.events.EventFeeder;
+import org.drools.examples.broker.events.StockTickPersister;
+import org.drools.examples.broker.model.CompanyRegistry;
+import org.drools.examples.broker.ui.BrokerWindow;
+import org.drools.time.TimerService;
+import org.drools.time.impl.JDKTimerService;
+
+import com.jgoodies.looks.plastic.Plastic3DLookAndFeel;
+
+/**
+ * This is the main class for the broker example.
+ * 
+ * @author etirelli
+ */
+public class Main {
+
+    /**
+     * @param args
+     * @throws UnsupportedLookAndFeelException 
+     */
+    public static void main(String[] args) throws Exception {
+        // set up and show main window
+        UIManager.setLookAndFeel( new Plastic3DLookAndFeel() );
+        CompanyRegistry registry = new CompanyRegistry();
+        BrokerWindow window = new BrokerWindow( registry.getCompanies() );
+        window.show();
+        
+        Broker broker = new Broker( window, registry );
+        
+        TimerService clock = new JDKTimerService(1);
+        StockTickPersister source = new StockTickPersister();
+        source.openForRead( new InputStreamReader( Main.class.getResourceAsStream( "/stocktickstream.dat" ) ), 
+                            System.currentTimeMillis() );
+        
+        EventFeeder feeder = new EventFeeder(clock, source, broker );
+        feeder.feed();
+        
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/Event.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/Event.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/Event.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+import java.util.Date;
+
+/**
+ * An event interface for the feeder framework
+ * 
+ * This is really a very simple and quick way of doing. In the future we may use
+ * the field accessors framework that we use in drools to make this transparent
+ * 
+ * @author etirelli
+ *
+ */
+public interface Event<T> {
+    
+    /**
+     * Returns the timestamp from this event
+     * 
+     * @return
+     */
+    public long getTimestamp();
+    
+    /**
+     * This is the same as getTimestamp, but returns a Date 
+     * object instead
+     * 
+     * @return
+     */
+    public Date getDate();
+
+    /**
+     * Returns this event's actual object
+     * 
+     * @return
+     */
+    public T getObject();
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/Event.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventFeeder.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventFeeder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventFeeder.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+import java.util.Date;
+
+import org.drools.time.Job;
+import org.drools.time.JobContext;
+import org.drools.time.JobHandle;
+import org.drools.time.TimerService;
+import org.drools.time.Trigger;
+
+/**
+ * An event feeder reads an event data file and publishes
+ * the read events to the consumer
+ * 
+ * @author etirelli
+ */
+public class EventFeeder {
+    
+    private final TimerService clock;
+    private final EventSource source;
+    private final EventReceiver sink;
+    
+    public EventFeeder( final TimerService clock, final EventSource source, final EventReceiver sink ) {
+        this.clock = clock;
+        this.source = source;
+        this.sink = sink;
+    }
+
+    /**
+     * For this simple demo, we are loading the
+     * whole stream of events into the memory.
+     * 
+     */
+    public void feed() {
+        if( source.hasNext() ) {
+            Event<?> event = source.getNext();
+            FeedContext context = new FeedContext( event );
+            FeedTrigger trigger = new FeedTrigger();
+            trigger.setNextFireTime( event.getDate() );
+            FeedJob job = new FeedJob( source, sink, trigger, clock );
+            clock.scheduleJob( job, context, trigger );
+        }
+    }
+    
+    private static class FeedJob implements Job {
+        
+        private final EventSource source;
+        private final EventReceiver sink;
+        private final FeedTrigger trigger;
+        private final TimerService clock;
+        
+        public FeedJob( final EventSource source, final EventReceiver sink, final FeedTrigger trigger, final TimerService clock ) {
+            this.source = source;
+            this.sink = sink;
+            this.trigger = trigger;
+            this.clock = clock;
+        }
+        
+        public void execute(JobContext context) {
+            this.sink.receive( ((FeedContext)context).event );
+            if( this.source.hasNext() ) {
+                ((FeedContext)context).setEvent( this.source.getNext() );
+                this.trigger.setNextFireTime( ((FeedContext)context).getEvent().getDate() );
+                clock.scheduleJob( this, context, trigger );
+            }
+        }
+    }
+    
+    private static class FeedContext implements JobContext {
+        private JobHandle handle;
+        private Event<?> event;
+        
+        public FeedContext(Event<?> event) {
+            super();
+            this.event = event;
+        }
+        public JobHandle getJobHandle() {
+            return this.handle;
+        }
+        public void setJobHandle(JobHandle handle) {
+            this.handle = handle;
+        }
+        public Event<?> getEvent() {
+            return event;
+        }
+        public void setEvent(Event<?> event) {
+            this.event = event;
+        }
+    }
+    
+    private static class FeedTrigger implements Trigger {
+        private Date next;
+        public void setNextFireTime( Date date ) {
+            this.next = date;
+        }
+        public Date getNextFireTime() {
+            return next;
+        }
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventFeeder.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventGenerator.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventGenerator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventGenerator.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Random;
+
+import org.drools.examples.broker.model.Company;
+import org.drools.examples.broker.model.CompanyRegistry;
+import org.drools.examples.broker.model.StockTick;
+
+
+/**
+ * A class to generate stock tick events
+ * 
+ * @author etirelli
+ *
+ */
+public class EventGenerator {
+    private static final String DATA_FILE = "src/main/resources/stocktickstream.dat";
+    
+    // creating 3 random objects to avoid interference among them on the distribution of values
+    private static Random steps = new Random( System.currentTimeMillis() );
+    private static Random symbols = new Random( System.currentTimeMillis() );
+    private static Random prices = new Random( System.currentTimeMillis() );
+    
+    public static void main(String args[]) throws IOException {
+        // 20 minutes
+        long timespam = 20 * 60 * 1000;
+        // interval between events: [200ms,2s]
+        long[] interval = new long[]{ 200, 2000 };
+        // price changes: +- 10%
+        double[] priceChanges = new double[] { -0.1, 0.1 };
+        // starting price range
+        double[] startingPrices = new double[]{ 50, 120 };
+        // companies
+        Company[] companies = (new CompanyRegistry()).getCompanies().toArray( new Company[0] );
+        // persister helper
+        StockTickPersister persister = new StockTickPersister();
+        persister.openForSave( new FileWriter( DATA_FILE ) );
+
+        // initializing starting prices
+        for( Company company : companies ) {
+            company.setCurrentPrice( nextStartingPrice( startingPrices ) );
+            StockTick tick = new StockTick( company.getSymbol(),
+                                            company.getCurrentPrice(),
+                                            0 );
+            persister.save( tick );
+        }
+        
+        
+        for( long offset = 0; offset < timespam; offset += nextStep( interval ) ) {
+            int company = symbols.nextInt( companies.length );
+            double price = companies[company].getCurrentPrice() * (1 + nextPriceChange( priceChanges ));
+            StockTick tick = new StockTick(companies[company].getSymbol(),
+                                           price,
+                                           offset );
+            persister.save( tick );
+            companies[company].setCurrentPrice( price );
+        }
+        persister.close();
+    }
+
+    private static double nextStartingPrice(double[] startingPrices) {
+        double range = startingPrices[1]-startingPrices[0];
+        return ( prices.nextDouble() * range ) + startingPrices[0];
+    }
+
+    private static long nextStep(long[] interval) {
+        long range = interval[1]-interval[0];
+        return (long) ( ( steps.nextFloat() * range ) + interval[0] );
+    }
+
+    private static double nextPriceChange(double[] interval) {
+        double range = interval[1]-interval[0];
+        return ( prices.nextDouble() * range ) + interval[0];
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventGenerator.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventImpl.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+import java.util.Date;
+
+/**
+ * A default implementation for Event
+ * 
+ * @author etirelli
+ */
+public class EventImpl<T> implements Event<T> {
+    private final long timestamp;
+    private final T object;
+    
+    public EventImpl(long timestamp,
+                     T object) {
+        super();
+        this.timestamp = timestamp;
+        this.object = object;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    public T getObject() {
+        return object;
+    }
+    
+    public Date getDate() {
+        return new Date( this.timestamp );
+    }
+
+    public String toString() {
+        return "Event( "+timestamp+", "+object+" )";
+    }
+
+    
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventImpl.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventReceiver.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventReceiver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventReceiver.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+/**
+ * A sink for events
+ * 
+ * @author etirelli
+ *
+ */
+public interface EventReceiver {
+    
+    public void receive( Event<?> event );
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventReceiver.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventSource.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventSource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventSource.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+/**
+ * An interface for Event Sources
+ * 
+ * @author etirelli
+ *
+ */
+public interface EventSource {
+    
+    public boolean hasNext();
+    
+    public Event<?> getNext();
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/EventSource.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/StockTickPersister.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/StockTickPersister.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/StockTickPersister.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.events;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.MessageFormat;
+import java.text.ParseException;
+
+import org.drools.examples.broker.model.StockTick;
+
+/**
+ * A helper to save and load StockTicks
+ * 
+ * @author etirelli
+ */
+public class StockTickPersister implements EventSource {
+    private MessageFormat format = new MessageFormat("{0,number,0};{1};{2,number,currency}");
+    private BufferedWriter out;
+    private BufferedReader in;
+    private long baseTimestamp;
+    private Event<StockTick> next;
+    
+    public void openForSave( Writer writer ) throws IOException {
+        out = new BufferedWriter( writer );
+    }
+    
+    public void openForRead( Reader reader, long baseTimestamp ) throws FileNotFoundException {
+        in = new BufferedReader( reader );
+        this.baseTimestamp = baseTimestamp;
+    }
+    
+    public void save( StockTick tick ) throws IOException {
+        Object[] args = new Object[] {
+                                      tick.getTimestamp(),
+                                      tick.getSymbol(),
+                                      tick.getPrice()
+        };
+        out.append( format.format( args ) + "\n" );
+    }
+    
+    public StockTick load() throws ParseException, IOException {
+        Object[] results = format.parse( in.readLine() );
+        StockTick tick = new StockTick( (String)results[1],
+                                        ((Number)results[2]).doubleValue(),
+                                        ((Number)results[0]).longValue()+baseTimestamp );
+        return tick;
+    }
+    
+    public void close() throws IOException {
+        if( out != null ) {
+            out.close();
+        }
+        if( in != null ) {
+            in.close();
+        }
+    }
+
+    public Event<StockTick> getNext() {
+        return next;
+    }
+
+    public boolean hasNext() {
+        if( in != null ) {
+            try {
+                StockTick tick = load();
+                next = new EventImpl<StockTick>( tick.getTimestamp(), tick );
+                return true;
+            } catch ( Exception e ) {
+                // nothing to do, return false
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/events/StockTickPersister.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/Company.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/Company.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/Company.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.model;
+
+/**
+ * A POJO for a company
+ * 
+ * @author etirelli
+ */
+public class Company {
+
+    private String name;
+    private String symbol;
+    private double currentPrice;
+    private double previousPrice;
+
+    public Company(String name,
+                   String symbol) {
+        this( name,
+              symbol,
+              0,
+              0 );
+    }
+
+    public Company(String name,
+                   String symbol,
+                   double current,
+                   double previous) {
+        this.name = name;
+        this.symbol = symbol;
+        this.currentPrice = current;
+        this.previousPrice = previous;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public double getCurrentPrice() {
+        return currentPrice;
+    }
+
+    public void setCurrentPrice(double current) {
+        this.previousPrice = this.currentPrice;
+        this.currentPrice = current;
+    }
+
+    public double getPreviousPrice() {
+        return previousPrice;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/Company.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/CompanyRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/CompanyRegistry.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/CompanyRegistry.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.model;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A helper class to load and return the list of companies
+ * 
+ * @author etirelli
+ *
+ */
+public class CompanyRegistry {
+
+    private Map<String, Company> companies;
+
+    public CompanyRegistry() {
+        this.companies = new HashMap<String, Company>();
+        this.companies.put( "RHT",
+                            new Company( "Red Hat Inc",
+                                         "RHT" ) );
+        this.companies.put( "JAVA",
+                            new Company( "Sun Microsystems",
+                                         "JAVA" ) );
+        this.companies.put( "MSFT",
+                            new Company( "Microsoft Corp",
+                                         "MSFT" ) );
+        this.companies.put( "ORCL",
+                            new Company( "Oracle Corp",
+                                         "ORCL" ) );
+        this.companies.put( "SAP",
+                            new Company( "SAP",
+                                         "SAP" ) );
+        this.companies.put( "GOOG",
+                            new Company( "Google Inc",
+                                         "GOOG" ) );
+        this.companies.put( "YHOO",
+                            new Company( "Yahoo! Inc",
+                                         "YHOO" ) );
+        this.companies.put( "IBM",
+                            new Company( "IBM Corp",
+                                         "IBM" ) );
+    }
+    
+    public Collection<Company> getCompanies() {
+        return Collections.unmodifiableCollection( companies.values() );
+    }
+    
+    public Company getCompany( String symbol ) {
+        return this.companies.get( symbol );
+    }
+    
+    
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/CompanyRegistry.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/StockTick.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/StockTick.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/StockTick.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.model;
+
+
+/**
+ * A stock tick event informing of a state change due to some operation;
+ * 
+ * @author etirelli
+ */
+public class StockTick {
+    private final String symbol;
+    private final double price;
+    private final long timestamp;
+    
+    public StockTick(String symbol,
+                     double price,
+                     long timestamp) {
+        super();
+        this.symbol = symbol;
+        this.price = price;
+        this.timestamp = timestamp;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public double getPrice() {
+        return price;
+    }
+
+    public long getTimestamp() {
+        return timestamp;
+    }
+    
+    public String toString() {
+        return symbol+"( "+price+" )";
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/StockTick.java
___________________________________________________________________
Name: svn:executable
   + *

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JFrame;
+import javax.swing.WindowConstants;
+
+import org.drools.examples.broker.model.Company;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * Main window implementation for the Broker example
+ * 
+ * @author etirelli
+ */
+public class BrokerWindow {
+
+    private final JFrame                    frame;
+    private final Map<String, CompanyPanel> companies;
+    private final LogPanel                  log;
+
+    public BrokerWindow(final Collection<Company> companies) {
+        this.log = new LogPanel();
+        this.companies = new HashMap<String, CompanyPanel>();
+        this.frame = buildFrame( companies );
+    }
+
+    private JFrame buildFrame(final Collection<Company> companies) {
+        FormLayout layout = new FormLayout( "10dlu, fill:max(pref;80dlu), 10dlu, fill:max(pref;80dlu), 10dlu, fill:max(pref;200dlu), 10dlu", // columns
+                                            "10dlu, fill:pref, 10dlu, fill:pref, 10dlu, fill:pref, 10dlu, fill:pref, 10dlu" ); // rows
+
+        PanelBuilder builder = new PanelBuilder( layout );
+        CellConstraints cc = new CellConstraints();
+
+        int x = 2;
+        int y = 2;
+        for ( Company company : companies ) {
+            CompanyPanel panel = new CompanyPanel( company );
+            this.companies.put( company.getSymbol(), panel );
+            builder.add( panel.getPanel(),
+                         cc.xy( x,
+                                y ) );
+            y = (x == 2) ? y : y + 2;
+            x = (x == 2) ? 4 : 2;
+        }
+        builder.add( log.getPanel(), cc.xywh( 6, 2, 1, 7 ) );
+        JFrame frame = new JFrame();
+        frame.getRootPane().setLayout( new BorderLayout() );
+        frame.getRootPane().add( builder.getPanel(), BorderLayout.CENTER );
+        
+        frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
+        frame.setTitle( "Drools Fusion Example: Simple Broker" );
+        frame.setResizable( false );
+        frame.pack();
+        
+        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
+        frame.setLocation( (screen.width-frame.getWidth())/2, (screen.height-frame.getHeight())/2 );
+        
+        return frame;
+    }
+    
+    public void show() {
+        this.frame.setVisible( true );
+    }
+    
+    public void updateCompany( String symbol ) {
+        this.companies.get( symbol ).updatePanel();
+    }
+
+    public void log( String message ) {
+        this.log.log( message );
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/CompanyPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/CompanyPanel.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/CompanyPanel.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.ui;
+
+import java.awt.Color;
+import java.text.NumberFormat;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import org.drools.examples.broker.model.Company;
+
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
+import com.jgoodies.forms.layout.FormLayout;
+
+/**
+ * A class that manages a company UI panel
+ * 
+ * @author etirelli
+ */
+public class CompanyPanel {
+
+    private final Company model;
+
+    private final JLabel  current;
+    private final JLabel  previous;
+    private final JPanel  panel;
+
+    private NumberFormat  format = NumberFormat.getCurrencyInstance();
+
+    public CompanyPanel(Company model) {
+        this.model = model;
+        FormLayout layout = new FormLayout( "right:pref:grow, 6dlu, right:pref:grow", // columns
+                                            "pref, 3dlu, pref, 3dlu, pref" ); // rows
+
+        PanelBuilder builder = new PanelBuilder( layout );
+        CellConstraints cc = new CellConstraints();
+        builder.addSeparator( model.getName(),
+                              cc.xyw( 1,
+                                      1,
+                                      3 ) );
+        builder.addLabel( "Current :",
+                          cc.xy( 1,
+                                 3 ) );
+        current = builder.addLabel( format.format( model.getCurrentPrice() ),
+                                    cc.xy( 3,
+                                           3 ) );
+        builder.addLabel( "Previous :",
+                          cc.xy( 1,
+                                 5 ) );
+        previous = builder.addLabel( format.format( model.getPreviousPrice() ),
+                                     cc.xy( 3,
+                                            5 ) );
+        this.panel = builder.getPanel();
+    }
+
+    public JPanel getPanel() {
+        return panel;
+    }
+
+    public void updatePanel() {
+        SwingUtilities.invokeLater( new Runnable() {
+            public void run() {
+                current.setText( format.format( model.getCurrentPrice() ) );
+                previous.setText( format.format( model.getPreviousPrice() ) );
+                if ( model.getCurrentPrice() > model.getPreviousPrice() ) {
+                    current.setForeground( Color.BLUE );
+                } else {
+                    current.setForeground( Color.RED );
+                }
+            }
+        } );
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/CompanyPanel.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/LogPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/LogPanel.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/LogPanel.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.drools.examples.broker.ui;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+/**
+ * A panel to log information
+ * 
+ * @author etirelli
+ */
+public class LogPanel {
+
+    private final JPanel    panel;
+    private final JTextArea log;
+
+    public LogPanel() {
+        panel = new JPanel();
+        panel.setLayout( new BorderLayout() );
+        log = new JTextArea();
+        log.setEditable( false );
+        
+        JScrollPane areaScrollPane = new JScrollPane(log);
+        areaScrollPane.setVerticalScrollBarPolicy(
+                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+        
+        panel.add( areaScrollPane,
+                   BorderLayout.CENTER );
+    }
+
+    public void log(final String text) {
+        SwingUtilities.invokeLater( new Runnable() {
+            public void run() {
+                log.append( text + "\n" );
+            }
+        } );
+    }
+
+    public JPanel getPanel() {
+        return panel;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/LogPanel.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/stocktickstream.dat
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/stocktickstream.dat	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/stocktickstream.dat	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,1122 @@
+0;SAP;$74.34
+0;RHT;$77.37
+0;JAVA;$96.04
+0;IBM;$81.71
+0;GOOG;$111.59
+0;YHOO;$55.63
+0;ORCL;$112.56
+0;MSFT;$65.63
+0;JAVA;$103.45
+825;RHT;$83.09
+1463;IBM;$82.21
+2366;SAP;$70.95
+2717;YHOO;$57.89
+4100;SAP;$66.95
+4378;IBM;$74.71
+5393;JAVA;$111.59
+6248;MSFT;$69.65
+8031;SAP;$66.07
+8283;SAP;$65.45
+8627;ORCL;$110.15
+10289;MSFT;$65.52
+12097;RHT;$83.30
+12713;RHT;$82.49
+13314;RHT;$75.59
+13860;MSFT;$69.15
+15654;JAVA;$115.12
+16360;ORCL;$100.82
+18125;GOOG;$121.47
+19432;GOOG;$126.65
+20586;YHOO;$56.52
+21923;JAVA;$104.87
+22613;YHOO;$57.95
+24055;YHOO;$55.95
+25521;SAP;$60.26
+25944;RHT;$76.59
+26535;IBM;$77.03
+27544;SAP;$65.25
+27822;JAVA;$111.80
+28540;MSFT;$70.22
+30348;GOOG;$138.49
+31494;ORCL;$90.87
+33145;IBM;$79.07
+34140;IBM;$72.84
+35121;IBM;$69.09
+36111;IBM;$66.24
+37127;YHOO;$53.85
+38545;IBM;$68.97
+39452;YHOO;$56.46
+40906;RHT;$80.71
+41472;GOOG;$148.72
+42670;GOOG;$141.85
+43792;ORCL;$96.05
+45409;IBM;$63.78
+46422;ORCL;$88.89
+48003;SAP;$68.01
+48349;ORCL;$85.74
+49989;ORCL;$81.38
+51586;SAP;$63.07
+51921;YHOO;$56.24
+53305;JAVA;$112.56
+54150;SAP;$66.24
+54487;ORCL;$86.11
+56118;MSFT;$75.46
+58014;MSFT;$79.70
+59870;YHOO;$59.80
+61353;IBM;$62.92
+62358;IBM;$57.25
+63245;RHT;$84.58
+63840;SAP;$62.91
+64138;JAVA;$102.90
+64980;YHOO;$57.35
+66307;RHT;$77.09
+66933;JAVA;$105.84
+67720;RHT;$73.47
+68258;SAP;$62.71
+68644;IBM;$56.05
+69574;GOOG;$146.84
+70792;RHT;$75.42
+71313;YHOO;$62.73
+72692;ORCL;$82.84
+74249;MSFT;$72.82
+76094;SAP;$61.54
+76349;ORCL;$75.75
+78043;SAP;$55.62
+78352;GOOG;$147.80
+79591;ORCL;$75.50
+81206;MSFT;$68.07
+83147;JAVA;$110.60
+83827;SAP;$50.60
+84038;SAP;$54.50
+84300;YHOO;$68.26
+85639;ORCL;$80.93
+87411;SAP;$50.69
+87801;JAVA;$114.14
+88644;RHT;$76.44
+89280;ORCL;$77.21
+90903;JAVA;$114.60
+91632;RHT;$80.88
+92167;JAVA;$104.90
+92929;IBM;$52.05
+93923;YHOO;$62.41
+95393;RHT;$86.42
+96007;YHOO;$63.19
+97543;RHT;$80.59
+98099;ORCL;$82.93
+99683;RHT;$83.57
+100260;ORCL;$75.02
+102025;ORCL;$71.38
+103634;JAVA;$109.41
+104317;MSFT;$72.77
+106147;ORCL;$76.19
+107760;YHOO;$57.41
+109284;SAP;$54.91
+109706;SAP;$57.34
+110048;RHT;$79.02
+110477;YHOO;$62.91
+111974;YHOO;$67.15
+113454;MSFT;$68.06
+115246;JAVA;$100.14
+116026;IBM;$47.97
+117017;RHT;$71.97
+117659;RHT;$75.60
+118242;RHT;$72.00
+118687;JAVA;$93.19
+119387;IBM;$48.82
+120452;JAVA;$85.71
+121303;GOOG;$141.71
+122464;RHT;$75.37
+122982;ORCL;$75.98
+124535;IBM;$44.08
+125548;ORCL;$74.39
+127171;GOOG;$139.32
+128345;ORCL;$70.08
+130116;GOOG;$150.12
+131412;ORCL;$67.70
+133017;RHT;$72.19
+133608;ORCL;$70.33
+135277;YHOO;$63.15
+136702;IBM;$41.70
+137680;YHOO;$67.95
+139092;SAP;$58.86
+139381;MSFT;$64.44
+141163;YHOO;$66.22
+142694;ORCL;$66.08
+144295;RHT;$73.00
+144941;IBM;$45.80
+145888;SAP;$57.50
+146215;MSFT;$69.32
+147993;JAVA;$86.11
+148724;ORCL;$72.32
+150328;SAP;$58.70
+150630;MSFT;$69.03
+152519;YHOO;$69.89
+153876;ORCL;$69.88
+155426;JAVA;$85.00
+156103;RHT;$68.17
+156594;IBM;$46.55
+157665;IBM;$47.31
+158549;IBM;$45.56
+159459;YHOO;$66.53
+160897;YHOO;$67.09
+162313;ORCL;$64.07
+163971;YHOO;$68.48
+165309;YHOO;$64.46
+166767;MSFT;$63.38
+168711;YHOO;$60.02
+170258;JAVA;$77.85
+171016;YHOO;$54.47
+172394;SAP;$59.23
+172717;JAVA;$82.58
+173386;IBM;$49.15
+174318;IBM;$48.02
+175240;SAP;$53.61
+175569;RHT;$71.80
+176184;SAP;$57.51
+176417;RHT;$74.38
+177001;GOOG;$159.67
+178160;IBM;$50.33
+179233;IBM;$52.06
+180303;SAP;$55.93
+180709;RHT;$70.78
+181222;GOOG;$157.66
+182409;YHOO;$50.40
+183913;JAVA;$81.17
+184615;SAP;$61.51
+184902;YHOO;$49.20
+186451;MSFT;$68.41
+188246;IBM;$55.71
+189315;MSFT;$70.22
+191207;YHOO;$45.69
+192673;ORCL;$61.42
+194419;SAP;$59.44
+194737;RHT;$77.43
+195206;SAP;$54.60
+195518;YHOO;$45.46
+196906;SAP;$54.60
+197277;GOOG;$171.78
+198499;ORCL;$62.00
+200051;JAVA;$75.99
+200737;IBM;$51.56
+201825;GOOG;$155.26
+202961;IBM;$53.42
+203959;ORCL;$61.67
+205582;SAP;$57.52
+205806;SAP;$53.44
+206144;ORCL;$60.43
+207707;RHT;$73.33
+208164;YHOO;$41.91
+209667;SAP;$57.95
+209995;SAP;$62.98
+210237;ORCL;$56.20
+211952;RHT;$78.81
+212436;GOOG;$146.34
+213649;GOOG;$155.42
+214935;RHT;$81.42
+215428;GOOG;$162.10
+216563;ORCL;$57.65
+218329;YHOO;$41.69
+219815;YHOO;$37.80
+221248;JAVA;$72.19
+221984;SAP;$64.48
+222226;MSFT;$74.57
+224027;JAVA;$77.02
+224689;YHOO;$34.36
+226185;YHOO;$33.98
+227672;RHT;$80.83
+228246;ORCL;$57.94
+229966;GOOG;$149.09
+231268;ORCL;$55.50
+232974;ORCL;$60.18
+234710;SAP;$64.40
+234985;RHT;$75.33
+235508;MSFT;$80.15
+237357;YHOO;$30.68
+238811;YHOO;$32.06
+240309;ORCL;$65.43
+242064;RHT;$74.10
+242673;SAP;$66.37
+243042;MSFT;$83.62
+245005;MSFT;$77.95
+246814;ORCL;$65.94
+248519;SAP;$64.06
+248789;RHT;$74.03
+249306;RHT;$70.46
+249933;SAP;$66.09
+250270;MSFT;$72.20
+252100;SAP;$67.79
+252496;MSFT;$69.12
+254356;SAP;$72.31
+254652;SAP;$78.20
+254901;ORCL;$71.83
+256454;ORCL;$74.84
+258129;JAVA;$76.42
+258800;RHT;$67.54
+259328;RHT;$64.47
+259803;MSFT;$69.75
+261656;GOOG;$140.35
+262914;SAP;$77.07
+263255;SAP;$82.23
+263632;IBM;$51.93
+264725;JAVA;$78.08
+265453;RHT;$62.45
+266000;YHOO;$30.25
+267521;YHOO;$31.05
+269048;IBM;$49.53
+270123;MSFT;$62.90
+271964;SAP;$83.75
+272190;ORCL;$67.60
+273783;IBM;$46.81
+274693;MSFT;$61.82
+276689;IBM;$49.22
+277637;YHOO;$28.80
+279010;RHT;$57.33
+279589;YHOO;$26.20
+281095;MSFT;$67.51
+282892;YHOO;$26.90
+284289;JAVA;$82.77
+285082;MSFT;$69.09
+286940;JAVA;$87.50
+287660;RHT;$54.90
+288112;YHOO;$26.31
+289562;MSFT;$74.09
+291532;RHT;$54.40
+292096;JAVA;$83.58
+292862;RHT;$49.01
+293476;JAVA;$90.66
+294191;MSFT;$77.22
+295974;SAP;$87.91
+296370;YHOO;$26.30
+297708;RHT;$51.29
+298181;RHT;$47.43
+298802;IBM;$46.12
+299850;JAVA;$87.82
+300721;GOOG;$142.76
+301948;RHT;$52.17
+302504;YHOO;$24.79
+303868;GOOG;$135.93
+305069;YHOO;$23.16
+306433;MSFT;$74.71
+308416;JAVA;$94.77
+309124;IBM;$49.99
+310015;RHT;$47.02
+310652;MSFT;$70.07
+312434;SAP;$93.19
+312832;GOOG;$130.68
+313974;ORCL;$67.08
+315615;MSFT;$70.92
+317565;SAP;$93.00
+317980;GOOG;$140.20
+319268;ORCL;$64.18
+320922;IBM;$49.95
+321983;IBM;$50.15
+322933;ORCL;$61.88
+324531;MSFT;$75.25
+326309;JAVA;$92.03
+327105;JAVA;$89.78
+327889;IBM;$46.96
+328873;SAP;$99.43
+329088;RHT;$45.29
+329592;MSFT;$72.00
+331413;GOOG;$132.94
+332661;SAP;$101.85
+332924;GOOG;$121.40
+334171;ORCL;$58.72
+335835;JAVA;$82.43
+336600;YHOO;$24.92
+338053;JAVA;$78.80
+338720;MSFT;$68.32
+340709;GOOG;$122.56
+341884;YHOO;$26.63
+343298;SAP;$110.46
+343649;IBM;$42.50
+344698;GOOG;$112.96
+345984;YHOO;$26.64
+347321;RHT;$46.62
+347893;JAVA;$77.99
+348632;SAP;$100.18
+348995;ORCL;$55.73
+350573;RHT;$46.84
+351052;RHT;$42.67
+351490;SAP;$98.83
+351832;JAVA;$83.11
+352659;SAP;$92.58
+352926;JAVA;$75.92
+353685;GOOG;$118.50
+354866;YHOO;$24.77
+356206;ORCL;$60.60
+357852;YHOO;$26.00
+359356;MSFT;$66.98
+361165;JAVA;$75.15
+361842;IBM;$45.50
+362736;RHT;$44.40
+363251;SAP;$101.26
+363496;RHT;$40.39
+363937;ORCL;$65.06
+365516;MSFT;$66.65
+367305;ORCL;$59.43
+369059;IBM;$49.32
+370026;YHOO;$28.09
+371448;IBM;$49.57
+372356;ORCL;$58.93
+374028;JAVA;$82.46
+374825;YHOO;$28.92
+376356;MSFT;$66.17
+378142;YHOO;$27.01
+379552;GOOG;$113.30
+380868;JAVA;$77.88
+381721;JAVA;$73.97
+382451;JAVA;$70.85
+383115;GOOG;$118.85
+384391;IBM;$54.42
+385377;JAVA;$76.57
+386091;RHT;$36.63
+386519;SAP;$106.35
+386927;IBM;$49.76
+387873;IBM;$46.68
+388859;MSFT;$59.72
+390856;IBM;$43.53
+391953;IBM;$45.55
+392837;SAP;$108.42
+393239;MSFT;$56.21
+395054;MSFT;$51.29
+396958;ORCL;$58.64
+398688;ORCL;$63.70
+400425;YHOO;$24.34
+401762;MSFT;$47.68
+403737;RHT;$33.58
+404195;GOOG;$126.19
+405493;JAVA;$81.52
+406220;IBM;$41.95
+407298;JAVA;$88.94
+408096;RHT;$32.35
+408612;MSFT;$44.79
+410558;RHT;$30.49
+411058;SAP;$98.34
+411424;MSFT;$41.90
+413418;IBM;$38.01
+414472;SAP;$105.29
+414768;GOOG;$123.51
+415868;RHT;$32.40
+416495;MSFT;$42.42
+418400;JAVA;$90.07
+419252;GOOG;$134.54
+420436;GOOG;$143.18
+421749;RHT;$35.50
+422274;IBM;$39.77
+423156;RHT;$33.02
+423585;YHOO;$24.18
+425097;SAP;$96.02
+425331;JAVA;$83.20
+426018;YHOO;$24.33
+427442;SAP;$87.03
+427696;IBM;$37.13
+428747;RHT;$35.58
+429217;ORCL;$67.15
+430799;ORCL;$73.52
+432445;RHT;$38.43
+432905;ORCL;$80.24
+434507;IBM;$38.57
+435427;IBM;$35.93
+436421;RHT;$36.11
+437043;RHT;$32.87
+437585;SAP;$93.85
+437981;JAVA;$85.03
+438801;MSFT;$41.07
+440661;IBM;$32.79
+441559;MSFT;$44.81
+443439;ORCL;$81.58
+445127;RHT;$30.87
+445596;GOOG;$155.10
+446724;ORCL;$76.34
+448496;ORCL;$69.15
+450054;RHT;$30.12
+450636;JAVA;$83.55
+451291;ORCL;$68.32
+452949;YHOO;$26.32
+454470;YHOO;$26.02
+455867;RHT;$28.66
+456514;YHOO;$25.56
+458000;YHOO;$23.95
+459493;YHOO;$21.71
+460826;GOOG;$161.74
+462090;IBM;$33.69
+463142;GOOG;$169.30
+464269;SAP;$85.15
+464531;JAVA;$78.49
+465225;JAVA;$71.37
+465875;IBM;$36.19
+466771;GOOG;$155.83
+468085;GOOG;$152.12
+469258;ORCL;$67.15
+470916;RHT;$29.54
+471549;ORCL;$67.74
+473250;YHOO;$21.00
+474577;SAP;$91.37
+474856;ORCL;$69.73
+476514;IBM;$36.73
+477514;GOOG;$153.63
+478819;IBM;$33.19
+479854;SAP;$88.74
+480159;GOOG;$138.66
+481304;ORCL;$72.06
+482933;SAP;$89.76
+483310;JAVA;$66.19
+483994;JAVA;$60.87
+484715;GOOG;$130.37
+485918;MSFT;$40.42
+487776;SAP;$97.77
+488190;IBM;$35.28
+489277;GOOG;$130.21
+490482;RHT;$28.51
+490969;JAVA;$66.71
+491780;ORCL;$67.16
+493552;ORCL;$70.07
+495159;SAP;$95.32
+495384;IBM;$37.96
+496463;YHOO;$19.50
+497967;IBM;$39.91
+499024;MSFT;$43.39
+500908;RHT;$30.77
+501396;IBM;$43.08
+502349;GOOG;$128.10
+503457;YHOO;$18.65
+504833;YHOO;$17.27
+506198;YHOO;$16.14
+507687;ORCL;$70.04
+509438;RHT;$29.79
+509927;IBM;$44.65
+510814;GOOG;$133.04
+511984;IBM;$48.45
+512952;JAVA;$62.82
+513738;JAVA;$62.42
+514473;IBM;$45.60
+515564;MSFT;$42.27
+517486;JAVA;$57.82
+518152;YHOO;$14.73
+519620;YHOO;$16.13
+521005;SAP;$93.07
+521298;RHT;$29.13
+521734;RHT;$26.24
+522238;YHOO;$15.38
+523569;MSFT;$41.58
+525546;JAVA;$58.55
+526261;YHOO;$16.09
+527800;ORCL;$75.08
+529499;YHOO;$17.31
+531017;MSFT;$44.52
+532850;IBM;$43.88
+533893;MSFT;$40.47
+535797;MSFT;$40.72
+537782;YHOO;$18.53
+539259;RHT;$23.73
+539844;IBM;$44.61
+540874;RHT;$24.33
+541347;JAVA;$58.18
+542074;IBM;$47.75
+542982;JAVA;$53.38
+543671;GOOG;$127.55
+544975;GOOG;$138.83
+546156;SAP;$83.87
+546427;RHT;$25.97
+546999;RHT;$27.15
+547597;IBM;$50.23
+548566;MSFT;$40.65
+550363;ORCL;$77.22
+552066;GOOG;$129.70
+553239;JAVA;$48.51
+554088;SAP;$92.14
+554444;GOOG;$128.62
+555739;JAVA;$48.97
+556504;JAVA;$48.53
+557321;IBM;$48.20
+558274;RHT;$27.74
+558865;MSFT;$38.14
+560713;YHOO;$20.31
+562051;YHOO;$21.13
+563413;JAVA;$44.83
+564096;JAVA;$41.12
+564911;SAP;$100.85
+565127;SAP;$110.26
+565548;GOOG;$126.77
+566813;ORCL;$78.88
+568491;SAP;$114.86
+568719;YHOO;$21.58
+570103;RHT;$29.98
+570708;IBM;$51.53
+571683;IBM;$49.98
+572629;SAP;$115.29
+572965;ORCL;$85.49
+574528;MSFT;$35.81
+576370;RHT;$30.37
+576817;MSFT;$33.68
+578758;SAP;$126.53
+579120;ORCL;$77.82
+580865;SAP;$121.49
+581152;ORCL;$72.24
+582816;MSFT;$32.75
+584744;JAVA;$38.25
+585586;YHOO;$20.02
+586927;GOOG;$119.30
+588098;ORCL;$75.96
+589739;IBM;$47.72
+590787;GOOG;$117.29
+592097;IBM;$45.88
+593164;ORCL;$73.82
+594778;GOOG;$123.92
+595924;JAVA;$40.90
+596642;YHOO;$21.75
+598060;IBM;$42.23
+598963;SAP;$128.26
+599177;ORCL;$76.49
+600929;RHT;$30.62
+601397;IBM;$40.16
+602414;JAVA;$40.06
+603112;JAVA;$40.27
+603808;YHOO;$21.17
+605357;SAP;$134.19
+605566;YHOO;$19.73
+606933;MSFT;$34.92
+608796;MSFT;$34.78
+610590;YHOO;$18.39
+612070;JAVA;$37.35
+612738;YHOO;$19.18
+614285;ORCL;$79.14
+616039;IBM;$41.89
+617135;GOOG;$113.68
+618449;YHOO;$18.13
+619967;RHT;$28.05
+620503;SAP;$143.63
+620925;IBM;$43.20
+621855;RHT;$27.41
+622387;RHT;$25.49
+622898;JAVA;$38.37
+623715;ORCL;$74.63
+625473;GOOG;$108.32
+626727;RHT;$23.61
+627283;MSFT;$31.96
+629281;YHOO;$19.39
+630624;RHT;$22.70
+631205;JAVA;$41.24
+631886;JAVA;$37.35
+632555;YHOO;$19.76
+633957;RHT;$22.62
+634464;MSFT;$31.47
+636440;JAVA;$34.85
+637246;MSFT;$28.73
+639051;MSFT;$27.66
+640863;RHT;$22.93
+641370;MSFT;$30.36
+643226;GOOG;$100.27
+644404;SAP;$155.58
+644615;ORCL;$70.65
+646248;RHT;$23.47
+646789;ORCL;$71.05
+648377;ORCL;$65.63
+650017;SAP;$152.52
+650243;JAVA;$32.52
+650995;MSFT;$32.79
+652917;IBM;$41.87
+653948;ORCL;$71.67
+655607;GOOG;$101.58
+656815;IBM;$44.76
+657751;IBM;$45.05
+658832;JAVA;$34.31
+659695;ORCL;$71.38
+661450;RHT;$23.22
+661922;JAVA;$34.13
+662632;IBM;$41.40
+663702;IBM;$37.50
+664793;ORCL;$76.43
+666383;GOOG;$94.18
+667519;GOOG;$90.29
+668699;JAVA;$32.66
+669475;MSFT;$31.39
+671281;ORCL;$71.91
+672930;ORCL;$77.04
+674685;JAVA;$30.20
+675524;RHT;$21.93
+676076;IBM;$39.67
+676956;MSFT;$31.29
+678856;RHT;$23.44
+679382;SAP;$144.78
+679630;ORCL;$77.55
+681351;YHOO;$18.39
+682821;JAVA;$27.93
+683590;ORCL;$77.41
+685232;JAVA;$28.37
+685943;YHOO;$20.10
+687296;RHT;$22.53
+687929;GOOG;$89.68
+689126;GOOG;$94.17
+690445;JAVA;$29.64
+691240;SAP;$150.66
+691559;IBM;$39.76
+692569;RHT;$20.42
+693209;MSFT;$28.83
+695129;SAP;$153.34
+695492;JAVA;$27.08
+696258;MSFT;$31.38
+698043;IBM;$40.70
+698949;JAVA;$29.00
+699652;MSFT;$31.10
+701629;RHT;$21.18
+702269;ORCL;$75.93
+703819;GOOG;$99.67
+705004;GOOG;$107.03
+706148;ORCL;$83.42
+707865;YHOO;$19.57
+709280;MSFT;$29.98
+711140;ORCL;$89.42
+712874;SAP;$151.07
+713120;GOOG;$98.59
+714222;SAP;$139.68
+714617;SAP;$144.40
+715008;GOOG;$100.53
+716109;SAP;$143.74
+716379;YHOO;$19.58
+717742;GOOG;$97.89
+718965;IBM;$37.22
+719972;SAP;$152.77
+720194;SAP;$150.39
+720456;RHT;$23.08
+720973;RHT;$25.20
+721615;IBM;$34.61
+722651;GOOG;$92.67
+723794;RHT;$23.42
+724414;SAP;$141.13
+724711;ORCL;$81.97
+726329;IBM;$36.29
+727307;SAP;$127.95
+727720;ORCL;$76.81
+729411;MSFT;$28.91
+731203;RHT;$24.97
+731734;MSFT;$26.74
+733559;SAP;$118.82
+733880;YHOO;$18.64
+735298;YHOO;$19.13
+736839;IBM;$32.94
+737719;RHT;$25.40
+738188;RHT;$25.08
+738725;MSFT;$25.77
+740610;YHOO;$19.30
+741997;YHOO;$20.21
+743544;IBM;$30.20
+744432;IBM;$27.24
+745354;IBM;$25.49
+746421;IBM;$24.70
+747428;JAVA;$29.28
+748181;ORCL;$81.06
+749915;JAVA;$29.14
+750579;YHOO;$18.59
+752044;ORCL;$85.45
+753743;MSFT;$27.57
+755686;ORCL;$80.94
+757380;SAP;$114.06
+757667;ORCL;$83.42
+759334;ORCL;$77.86
+761096;IBM;$23.46
+762110;IBM;$23.99
+763165;RHT;$25.70
+763741;SAP;$102.75
+764062;IBM;$22.82
+765124;MSFT;$29.17
+766979;ORCL;$76.08
+768614;MSFT;$26.91
+770434;GOOG;$83.74
+771540;GOOG;$91.77
+772686;YHOO;$18.23
+774014;IBM;$24.64
+775037;IBM;$26.22
+776097;MSFT;$28.56
+778072;SAP;$101.23
+778428;YHOO;$18.08
+779796;MSFT;$30.58
+781638;IBM;$27.84
+782673;SAP;$110.20
+783046;RHT;$28.07
+783549;JAVA;$28.62
+784321;JAVA;$30.82
+785025;SAP;$105.53
+785439;RHT;$28.82
+786039;SAP;$97.02
+786455;RHT;$27.63
+787103;IBM;$29.57
+788014;JAVA;$33.79
+788734;YHOO;$18.88
+790228;YHOO;$19.02
+791768;ORCL;$73.54
+793347;MSFT;$28.03
+795327;ORCL;$79.35
+796916;MSFT;$29.88
+798742;MSFT;$32.69
+800588;SAP;$102.34
+800848;JAVA;$36.88
+801515;ORCL;$73.19
+803067;GOOG;$85.56
+804217;SAP;$99.14
+804546;RHT;$25.48
+805035;RHT;$26.49
+805578;IBM;$31.01
+806474;SAP;$105.82
+806696;JAVA;$36.76
+807537;RHT;$25.62
+808028;JAVA;$38.57
+808854;YHOO;$19.05
+810372;YHOO;$17.37
+811711;GOOG;$78.90
+812985;GOOG;$79.38
+814291;RHT;$27.64
+814862;YHOO;$16.73
+816312;SAP;$96.13
+816623;RHT;$30.10
+817103;IBM;$28.76
+818158;SAP;$100.77
+818453;MSFT;$31.17
+820329;SAP;$92.10
+820534;SAP;$92.11
+820744;GOOG;$76.67
+821849;RHT;$31.72
+822316;MSFT;$29.73
+824241;SAP;$99.56
+824593;MSFT;$29.99
+826462;ORCL;$69.42
+828118;YHOO;$15.91
+829596;ORCL;$63.81
+831276;MSFT;$28.48
+833268;SAP;$93.71
+833657;MSFT;$25.83
+835518;MSFT;$25.80
+837437;IBM;$29.17
+838359;JAVA;$40.91
+839129;YHOO;$16.59
+840634;RHT;$29.82
+841188;MSFT;$26.77
+843009;RHT;$31.09
+843590;IBM;$27.89
+844581;SAP;$94.53
+844844;RHT;$28.45
+845326;RHT;$28.53
+845844;SAP;$98.74
+846066;SAP;$101.15
+846320;RHT;$30.68
+846929;ORCL;$62.75
+848665;GOOG;$70.04
+849943;IBM;$28.90
+850851;RHT;$31.54
+851361;ORCL;$65.57
+853025;RHT;$29.15
+853523;GOOG;$75.38
+854736;JAVA;$43.47
+855574;GOOG;$76.10
+856788;ORCL;$59.89
+858515;MSFT;$29.00
+860418;IBM;$26.61
+861395;ORCL;$57.16
+863072;YHOO;$16.03
+864461;MSFT;$27.35
+866421;SAP;$110.91
+866703;YHOO;$14.56
+868220;ORCL;$57.54
+869985;RHT;$31.75
+870455;MSFT;$26.71
+872291;IBM;$24.09
+873332;MSFT;$27.53
+875163;SAP;$119.00
+875470;RHT;$34.30
+876113;SAP;$121.42
+876526;ORCL;$52.48
+878284;GOOG;$70.46
+879439;GOOG;$72.41
+880702;SAP;$123.73
+880959;ORCL;$51.21
+882519;RHT;$34.46
+883020;JAVA;$39.93
+883887;MSFT;$28.65
+885686;GOOG;$76.03
+886820;ORCL;$48.31
+888408;MSFT;$28.65
+890183;MSFT;$30.36
+892136;SAP;$123.29
+892445;MSFT;$28.08
+894264;JAVA;$38.11
+895043;MSFT;$26.76
+896965;ORCL;$49.89
+898696;YHOO;$13.25
+900143;IBM;$22.90
+901064;RHT;$36.40
+901549;RHT;$39.08
+901999;RHT;$38.14
+902556;YHOO;$14.18
+903952;SAP;$134.11
+904244;SAP;$139.06
+904628;MSFT;$28.50
+906433;JAVA;$35.99
+907111;GOOG;$80.79
+908408;YHOO;$14.03
+909918;JAVA;$37.46
+910730;RHT;$34.74
+911339;SAP;$133.20
+911653;GOOG;$75.72
+912808;MSFT;$29.61
+914727;YHOO;$14.74
+916057;GOOG;$70.70
+917306;RHT;$35.05
+917741;RHT;$34.89
+918292;MSFT;$27.75
+920098;MSFT;$26.49
+921947;YHOO;$13.59
+923431;RHT;$36.30
+923953;MSFT;$26.49
+925746;SAP;$137.78
+925998;ORCL;$48.72
+927578;IBM;$24.08
+928460;IBM;$26.19
+929534;IBM;$27.73
+930477;GOOG;$68.81
+931684;IBM;$27.14
+932676;MSFT;$29.09
+934649;MSFT;$30.48
+936484;JAVA;$38.61
+937158;IBM;$29.31
+938157;GOOG;$72.00
+939267;JAVA;$36.82
+939929;YHOO;$13.96
+941406;IBM;$29.90
+942347;MSFT;$31.02
+944226;RHT;$32.93
+944758;GOOG;$70.94
+945987;SAP;$143.57
+946247;ORCL;$48.15
+948021;YHOO;$13.82
+949506;IBM;$26.91
+950503;YHOO;$12.95
+951848;RHT;$32.06
+952459;YHOO;$11.87
+953979;JAVA;$39.82
+954757;SAP;$130.67
+955023;SAP;$119.60
+955266;RHT;$35.15
+955820;GOOG;$64.32
+956943;SAP;$127.14
+957226;ORCL;$48.63
+958853;ORCL;$47.76
+960620;ORCL;$50.50
+962194;SAP;$116.22
+962577;IBM;$25.37
+963536;IBM;$24.70
+964421;GOOG;$59.93
+965620;IBM;$27.10
+966565;MSFT;$30.76
+968431;YHOO;$11.00
+969807;RHT;$33.00
+970428;GOOG;$59.35
+971607;SAP;$110.77
+971894;JAVA;$38.97
+972697;ORCL;$50.44
+974425;ORCL;$54.54
+976182;MSFT;$28.75
+978129;YHOO;$12.07
+979492;MSFT;$28.77
+981460;GOOG;$57.57
+982694;IBM;$29.19
+983723;GOOG;$53.66
+984912;RHT;$33.07
+985560;SAP;$121.41
+985793;YHOO;$11.66
+987185;JAVA;$37.05
+988026;GOOG;$53.63
+989350;SAP;$131.65
+989572;ORCL;$50.18
+991196;YHOO;$11.08
+992597;SAP;$122.29
+992858;GOOG;$58.17
+994061;GOOG;$61.49
+995299;RHT;$30.29
+995746;RHT;$31.22
+996314;SAP;$125.17
+996691;IBM;$31.79
+997726;RHT;$32.56
+998288;JAVA;$35.13
+999008;SAP;$133.17
+999225;YHOO;$9.99
+1000704;MSFT;$26.63
+1002607;SAP;$134.16
+1002919;ORCL;$51.53
+1004586;IBM;$33.20
+1005596;IBM;$35.67
+1006684;RHT;$32.36
+1007197;JAVA;$36.12
+1007981;MSFT;$26.59
+1009966;MSFT;$27.10
+1011928;JAVA;$36.57
+1012591;RHT;$30.37
+1013079;GOOG;$57.14
+1014369;YHOO;$9.28
+1015859;SAP;$122.43
+1016236;JAVA;$33.04
+1017110;IBM;$36.21
+1018063;MSFT;$29.60
+1019845;JAVA;$33.99
+1020621;RHT;$30.74
+1021078;SAP;$134.19
+1021301;ORCL;$50.33
+1022863;IBM;$32.98
+1023775;ORCL;$48.20
+1025536;GOOG;$55.08
+1026851;MSFT;$27.20
+1028666;IBM;$32.71
+1029692;MSFT;$29.67
+1031506;JAVA;$37.13
+1032183;IBM;$32.29
+1033136;GOOG;$58.76
+1034337;JAVA;$34.41
+1035045;ORCL;$48.16
+1036785;RHT;$30.76
+1037215;RHT;$29.82
+1037764;RHT;$31.46
+1038279;JAVA;$31.55
+1039061;IBM;$34.87
+1040156;IBM;$32.77
+1041185;JAVA;$30.26
+1041996;ORCL;$50.67
+1043744;YHOO;$10.03
+1045172;GOOG;$54.19
+1046383;YHOO;$10.60
+1047830;MSFT;$30.06
+1049691;MSFT;$28.82
+1051557;JAVA;$28.83
+1052370;RHT;$29.60
+1052944;IBM;$33.00
+1053992;IBM;$32.26
+1055035;YHOO;$9.92
+1056448;RHT;$27.60
+1057017;IBM;$29.34
+1058089;JAVA;$26.75
+1058957;IBM;$31.36
+1059859;RHT;$27.76
+1060295;YHOO;$9.42
+1061771;SAP;$142.65
+1062084;IBM;$34.21
+1063039;MSFT;$29.57
+1064992;RHT;$29.73
+1065482;IBM;$35.25
+1066369;SAP;$134.74
+1066647;IBM;$38.25
+1067549;ORCL;$54.45
+1069172;SAP;$129.14
+1069377;GOOG;$51.36
+1070529;JAVA;$29.33
+1071211;MSFT;$28.96
+1073109;IBM;$34.45
+1074062;MSFT;$28.30
+1075968;GOOG;$51.83
+1077181;GOOG;$46.76
+1078496;YHOO;$10.01
+1080011;SAP;$120.29
+1080320;ORCL;$57.03
+1082067;YHOO;$10.99
+1083567;MSFT;$27.84
+1085346;GOOG;$43.50
+1086548;ORCL;$52.21
+1088284;IBM;$36.96
+1089236;JAVA;$28.77
+1089996;GOOG;$47.02
+1091268;SAP;$128.18
+1091549;ORCL;$54.33
+1093239;GOOG;$47.56
+1094393;SAP;$135.80
+1094792;ORCL;$52.55
+1096525;GOOG;$51.22
+1097673;SAP;$133.34
+1097911;SAP;$125.16
+1098264;GOOG;$50.61
+1099513;ORCL;$47.39
+1101216;YHOO;$11.81
+1102545;IBM;$33.69
+1103579;IBM;$35.24
+1104622;ORCL;$51.91
+1106378;ORCL;$54.11
+1108111;JAVA;$27.94
+1108910;SAP;$124.05
+1109268;IBM;$34.22
+1110143;JAVA;$30.70
+1110871;MSFT;$28.62
+1112651;MSFT;$26.26
+1114547;RHT;$29.62
+1115055;SAP;$112.35
+1115265;GOOG;$49.21
+1116493;ORCL;$50.24
+1118197;JAVA;$33.28
+1118871;YHOO;$11.27
+1120380;IBM;$35.07
+1121335;ORCL;$52.04
+1122903;MSFT;$25.53
+1124854;IBM;$35.85
+1125938;IBM;$34.12
+1126917;YHOO;$12.39
+1128272;GOOG;$45.77
+1129419;RHT;$26.75
+1129926;SAP;$109.73
+1130194;SAP;$108.27
+1130471;RHT;$25.66
+1130903;MSFT;$27.82
+1132889;MSFT;$29.45
+1134724;IBM;$36.87
+1135749;ORCL;$56.08
+1137359;GOOG;$42.49
+1138545;ORCL;$60.57
+1140132;IBM;$37.94
+1141151;MSFT;$30.08
+1143075;JAVA;$32.10
+1143810;GOOG;$39.91
+1144992;GOOG;$36.24
+1146287;SAP;$100.82
+1146540;RHT;$23.91
+1147085;ORCL;$61.79
+1148640;MSFT;$31.42
+1150606;RHT;$22.62
+1151126;YHOO;$11.94
+1152589;RHT;$22.28
+1153213;SAP;$93.72
+1153625;SAP;$101.47
+1153924;SAP;$107.13
+1154279;MSFT;$28.94
+1156075;MSFT;$30.26
+1158026;JAVA;$29.86
+1158816;MSFT;$31.07
+1160755;IBM;$36.54
+1161703;IBM;$33.73
+1162673;YHOO;$11.60
+1164000;GOOG;$36.75
+1165293;SAP;$107.10
+1165639;YHOO;$12.26
+1167114;MSFT;$28.04
+1168951;GOOG;$38.65
+1170243;IBM;$33.39
+1171191;MSFT;$25.34
+1173018;SAP;$108.52
+1173360;ORCL;$60.71
+1175082;MSFT;$22.91
+1177005;JAVA;$30.50
+1177833;RHT;$23.77
+1178421;GOOG;$38.24
+1179554;MSFT;$23.82
+1181522;MSFT;$21.58
+1183376;RHT;$24.20
+1183842;RHT;$25.21
+1184391;ORCL;$58.22
+1186011;GOOG;$39.76
+1187226;YHOO;$11.09
+1188713;RHT;$27.64
+1189277;YHOO;$11.60
+1190756;MSFT;$23.08
+1192733;YHOO;$11.02
+1194215;SAP;$110.24
+1194507;RHT;$27.51
+1195120;JAVA;$27.49
+1195861;MSFT;$21.40
+1197640;RHT;$28.37
+1198095;RHT;$30.97
+1198731;JAVA;$27.99
+1199583;GOOG;$37.93


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/resources/stocktickstream.dat
___________________________________________________________________
Name: svn:executable
   + *

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,20 @@
+package org.drools.examples.broker;
+
+import org.drools.examples.broker.model.Company;
+import org.drools.examples.broker.model.StockTick;
+
+dialect "mvel"
+
+declare StockTick
+    @role( event )
+end
+
+rule "Update price"
+when
+    $st : StockTick( $sb : symbol, $pr : price ) from entry-point "StockTick stream"
+    $cp : Company( symbol == $sb )
+then
+    $cp.currentPrice = $pr;
+end
+
+ 
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/EventFeederTest.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/EventFeederTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/EventFeederTest.java	2009-01-08 06:05:27 UTC (rev 24597)
@@ -0,0 +1,164 @@
+package org.drools.examples.broker.events;
+
+import java.util.concurrent.TimeUnit;
+
+import junit.framework.TestCase;
+
+import org.drools.time.impl.JDKTimerService;
+import org.drools.time.impl.PseudoClockScheduler;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.Sequence;
+import org.jmock.States;
+
+public class EventFeederTest extends TestCase {
+    Mockery context = new Mockery();
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    public void testFeedPseudoClock() {
+        // create the events for the test
+        final Event<String> event1 = new EventImpl<String>( 1000, "one" );
+        final Event<String> event2 = new EventImpl<String>( 1100, "two" );
+        final Event<String> event3 = new EventImpl<String>( 1120, "three" );
+        final Event<String> event4 = new EventImpl<String>( 1300, "four" );
+        final Event<String> event5 = new EventImpl<String>( 1550, "five" );
+        final Event<String> event6 = new EventImpl<String>( 1700, "six" );
+        
+        // define a jmock sequence and state machine
+        final Sequence seq = context.sequence( "call sequence" );
+        final States ts = context.states( "timestamp" ).startsAs( String.valueOf( event1.getTimestamp() ) );
+        
+        // create mock objects for the source and the receiver
+        final EventSource source = context.mock( EventSource.class );
+        final EventReceiver receiver = context.mock( EventReceiver.class );
+        
+        // create the scheduler used by drools and the feeder to be tested
+        PseudoClockScheduler clock = new PseudoClockScheduler();
+        EventFeeder feeder = new EventFeeder( clock, source, receiver );
+        
+        // create the expectations
+        context.checking( new Expectations() {{
+            // there is an event1, so, read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) ); 
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event1 ) );  
+            oneOf( receiver ).receive( event1 ); inSequence( seq ); when( ts.is( String.valueOf( event1.getTimestamp() ) ) ); 
+            then( ts.is( String.valueOf( event2.getTimestamp() ) ) );
+            
+            // there is an event 2, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event2 ) );  
+            oneOf( receiver ).receive( event2 ); inSequence( seq ); when( ts.is( String.valueOf( event2.getTimestamp() ) ) );
+            then( ts.is( String.valueOf( event3.getTimestamp() ) ) );
+            
+            // there is an event 3, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event3 ) );  
+            oneOf( receiver ).receive( event3 ); inSequence( seq ); when( ts.is( String.valueOf( event3.getTimestamp() ) ) );
+            then( ts.is( String.valueOf( event4.getTimestamp() ) ) );
+            
+            // there is an event 4, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event4 ) );  
+            oneOf( receiver ).receive( event4 ); inSequence( seq ); when( ts.is( String.valueOf( event4.getTimestamp() ) ) ); 
+            then( ts.is( String.valueOf( event5.getTimestamp() ) ) );
+            
+            // there is an event 5, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event5 ) );  
+            oneOf( receiver ).receive( event5 ); inSequence( seq ); when( ts.is( String.valueOf( event5.getTimestamp() ) ) ); 
+            then( ts.is( String.valueOf( event6.getTimestamp() ) ) );
+            
+            // there is an event 6, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event6 ) );  
+            oneOf( receiver ).receive( event6 ); inSequence( seq ); when( ts.is( String.valueOf( event6.getTimestamp() ) ) ); 
+            
+            // there are no more events
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( false ) );
+        }});
+        
+        feeder.feed();
+        // advancing time step by step, so that we can test state between advances
+        clock.advanceTime( event1.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        clock.advanceTime( event2.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        clock.advanceTime( event3.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        clock.advanceTime( event4.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        clock.advanceTime( event5.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        clock.advanceTime( event6.getTimestamp() - clock.getCurrentTime(), TimeUnit.MILLISECONDS );
+        
+        context.assertIsSatisfied();
+    }
+
+    @SuppressWarnings("static-access")
+    public void testFeedRealtimeClock() {
+        // create the events for the test
+        long startTime = System.currentTimeMillis() + 10000;
+        final Event<String> event1 = new EventImpl<String>( startTime + 1000, "one" );
+        final Event<String> event2 = new EventImpl<String>( startTime + 1100, "two" );
+        final Event<String> event3 = new EventImpl<String>( startTime + 1120, "three" );
+        final Event<String> event4 = new EventImpl<String>( startTime + 1300, "four" );
+        final Event<String> event5 = new EventImpl<String>( startTime + 1550, "five" );
+        final Event<String> event6 = new EventImpl<String>( startTime + 1700, "six" );
+        
+        // define a jmock sequence and state machine
+        final Sequence seq = context.sequence( "call sequence" );
+        
+        // create mock objects for the source and the receiver
+        final EventSource source = context.mock( EventSource.class );
+        final EventReceiver receiver = context.mock( EventReceiver.class );
+        
+        // create the scheduler used by drools and the feeder to be tested
+        JDKTimerService clock = new JDKTimerService(1);
+        EventFeeder feeder = new EventFeeder( clock, source, receiver );
+        
+        // create the expectations
+        context.checking( new Expectations() {{
+            // there is an event1, so, read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) ); 
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event1 ) );  
+            oneOf( receiver ).receive( event1 ); inSequence( seq ); 
+            
+            // there is an event 2, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event2 ) );  
+            oneOf( receiver ).receive( event2 ); inSequence( seq ); 
+            
+            // there is an event 3, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event3 ) );  
+            oneOf( receiver ).receive( event3 ); inSequence( seq ); 
+            
+            // there is an event 4, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event4 ) );  
+            oneOf( receiver ).receive( event4 ); inSequence( seq ); 
+            
+            // there is an event 5, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event5 ) );  
+            oneOf( receiver ).receive( event5 ); inSequence( seq ); 
+            
+            // there is an event 6, so read and feed
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( true ) );
+            oneOf( source ).getNext(); inSequence( seq ); will( returnValue( event6 ) );  
+            oneOf( receiver ).receive( event6 ); inSequence( seq );  
+            
+            // there are no more events
+            oneOf( source ).hasNext(); inSequence( seq ); will( returnValue( false ) );
+        }});
+        
+        feeder.feed();
+        
+        // give time for the test to run
+        try {
+            Thread.currentThread().sleep( 20000 );
+        } catch ( InterruptedException e ) {
+            e.printStackTrace();
+        }
+        
+        context.assertIsSatisfied();
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/test/java/org/drools/examples/broker/events/EventFeederTest.java
___________________________________________________________________
Name: svn:executable
   + *




More information about the jboss-svn-commits mailing list