[jboss-svn-commits] JBL Code SVN: r25808 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Mar 24 21:53:31 EDT 2009
Author: stampy88
Date: 2009-03-24 21:53:31 -0400 (Tue, 24 Mar 2009)
New Revision: 25808
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AbstractEventSupport.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java
Log:
Refactored rest of event support classes per JBRULES-2028
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AbstractEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AbstractEventSupport.java 2009-03-25 00:54:05 UTC (rev 25807)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AbstractEventSupport.java 2009-03-25 01:53:31 UTC (rev 25808)
@@ -86,4 +86,8 @@
public boolean isEmpty() {
return this.listeners.isEmpty();
}
+
+ public void clear() {
+ this.listeners.clear();
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java 2009-03-25 00:54:05 UTC (rev 25807)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java 2009-03-25 01:53:31 UTC (rev 25808)
@@ -16,147 +16,103 @@
* limitations under the License.
*/
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
+import org.drools.WorkingMemory;
import org.drools.common.InternalWorkingMemory;
import org.drools.event.rule.ActivationCancelledCause;
-import org.drools.WorkingMemory;
import org.drools.spi.Activation;
import org.drools.spi.AgendaGroup;
+import java.util.Iterator;
+
/**
* @author <a href="mailto:simon at redhillconsulting.com.au">Simon Harris </a>
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
*/
-public class AgendaEventSupport
- implements
- Externalizable {
- /**
- *
- */
- private static final long serialVersionUID = 400L;
- private List<AgendaEventListener> listeners = new CopyOnWriteArrayList<AgendaEventListener>();
+public class AgendaEventSupport extends AbstractEventSupport<AgendaEventListener> {
public AgendaEventSupport() {
}
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- listeners = (List<AgendaEventListener>)in.readObject();
- }
-
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(listeners);
- }
-
- public void addEventListener(final AgendaEventListener listener) {
- if ( !this.listeners.contains( listener ) ) {
- this.listeners.add( listener );
- }
- }
-
- public void removeEventListener(final AgendaEventListener listener) {
- this.listeners.remove( listener );
- }
-
- public List<AgendaEventListener> getEventListeners() {
- return Collections.unmodifiableList( this.listeners );
- }
-
- public int size() {
- return this.listeners.size();
- }
-
- public boolean isEmpty() {
- return this.listeners.isEmpty();
- }
-
public void fireActivationCreated(final Activation activation,
final WorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final ActivationCreatedEvent event = new ActivationCreatedEvent( activation );
+ if (iter.hasNext()) {
+ final ActivationCreatedEvent event = new ActivationCreatedEvent(activation);
- for ( AgendaEventListener listener: listeners) {
- listener.activationCreated( event, workingMemory );
+ do{
+ iter.next().activationCreated(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void fireActivationCancelled(final Activation activation,
final WorkingMemory workingMemory,
final ActivationCancelledCause cause) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final ActivationCancelledEvent event = new ActivationCancelledEvent( activation,
- cause );
+ if (iter.hasNext()) {
+ final ActivationCancelledEvent event = new ActivationCancelledEvent(activation, cause);
- for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
- ((AgendaEventListener) this.listeners.get( i )).activationCancelled( event,
- workingMemory);
+ do{
+ iter.next().activationCancelled(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void fireBeforeActivationFired(final Activation activation,
final WorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final BeforeActivationFiredEvent event = new BeforeActivationFiredEvent( activation );
+ if (iter.hasNext()) {
+ final BeforeActivationFiredEvent event = new BeforeActivationFiredEvent(activation);
- for ( AgendaEventListener listener: listeners) {
- listener.beforeActivationFired( event, workingMemory );
+ do{
+ iter.next().beforeActivationFired(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void fireAfterActivationFired(final Activation activation,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final AfterActivationFiredEvent event = new AfterActivationFiredEvent( activation );
+ if (iter.hasNext()) {
+ final AfterActivationFiredEvent event = new AfterActivationFiredEvent(activation);
- for ( AgendaEventListener listener: listeners) {
- listener.afterActivationFired( event, workingMemory );
+ do{
+ iter.next().afterActivationFired(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void fireAgendaGroupPopped(final AgendaGroup agendaGroup,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final AgendaGroupPoppedEvent event = new AgendaGroupPoppedEvent( agendaGroup );
+ if (iter.hasNext()) {
+ final AgendaGroupPoppedEvent event = new AgendaGroupPoppedEvent(agendaGroup);
- for ( AgendaEventListener listener: listeners) {
- listener.agendaGroupPopped( event, workingMemory );
+ do{
+ iter.next().agendaGroupPopped(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void fireAgendaGroupPushed(final AgendaGroup agendaGroup,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<AgendaEventListener> iter = getEventListenersIterator();
- final AgendaGroupPushedEvent event = new AgendaGroupPushedEvent( agendaGroup );
+ if (iter.hasNext()) {
+ final AgendaGroupPushedEvent event = new AgendaGroupPushedEvent(agendaGroup);
- for ( AgendaEventListener listener: listeners) {
- listener.agendaGroupPushed( event, workingMemory );
+ do{
+ iter.next().agendaGroupPushed(event, workingMemory);
+ } while (iter.hasNext());
}
}
public void reset() {
- this.listeners.clear();
+ this.clear();
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java 2009-03-25 00:54:05 UTC (rev 25807)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java 2009-03-25 01:53:31 UTC (rev 25808)
@@ -23,12 +23,6 @@
import java.util.Iterator;
/**
- * Please note that any event notification methods, e.g. <method>fireBeforePackageAdded</method>, etc.,
- * always create the event and iterator regardless if there are listeners. This is because if the
- * check is to see if there are listeners via the <method>isEmpty</method> method, theoretically
- * there should be synchonrization involved to ensure the <method>isEmpty</method> and
- * </method>getEventListenersIterator</method> both see the same list contents.
- *
* @author etirelli
* @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
*/
@@ -42,134 +36,176 @@
public RuleBaseEventSupport(final RuleBase ruleBase) {
this.ruleBase = ruleBase;
}
-
+
public void setRuleBase(RuleBase ruleBase) {
this.ruleBase = ruleBase;
}
public void fireBeforePackageAdded(final Package newPkg) {
- final BeforePackageAddedEvent event = new BeforePackageAddedEvent(this.ruleBase, newPkg);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforePackageAdded(event);
+ if (iter.hasNext()) {
+ final BeforePackageAddedEvent event = new BeforePackageAddedEvent(this.ruleBase, newPkg);
+
+ do {
+ iter.next().beforePackageAdded(event);
+ } while (iter.hasNext());
}
}
public void fireAfterPackageAdded(final Package newPkg) {
- final AfterPackageAddedEvent event = new AfterPackageAddedEvent(this.ruleBase, newPkg);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterPackageAdded(event);
+ if (iter.hasNext()) {
+ final AfterPackageAddedEvent event = new AfterPackageAddedEvent(this.ruleBase, newPkg);
+
+ do {
+ iter.next().afterPackageAdded(event);
+ } while (iter.hasNext());
}
}
public void fireBeforePackageRemoved(final Package pkg) {
- final BeforePackageRemovedEvent event = new BeforePackageRemovedEvent(this.ruleBase, pkg);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforePackageRemoved(event);
+ if (iter.hasNext()) {
+ final BeforePackageRemovedEvent event = new BeforePackageRemovedEvent(this.ruleBase, pkg);
+
+ do {
+ iter.next().beforePackageRemoved(event);
+ } while (iter.hasNext());
}
}
public void fireAfterPackageRemoved(final Package pkg) {
- final AfterPackageRemovedEvent event = new AfterPackageRemovedEvent(this.ruleBase, pkg);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterPackageRemoved(event);
+ if (iter.hasNext()) {
+ final AfterPackageRemovedEvent event = new AfterPackageRemovedEvent(this.ruleBase, pkg);
+
+ do {
+ iter.next().afterPackageRemoved(event);
+ } while (iter.hasNext());
}
}
public void fireBeforeRuleBaseLocked() {
- final BeforeRuleBaseLockedEvent event = new BeforeRuleBaseLockedEvent(this.ruleBase);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforeRuleBaseLocked(event);
+ if (iter.hasNext()) {
+ final BeforeRuleBaseLockedEvent event = new BeforeRuleBaseLockedEvent(this.ruleBase);
+
+ do {
+ iter.next().beforeRuleBaseLocked(event);
+ } while (iter.hasNext());
}
}
public void fireAfterRuleBaseLocked() {
- final AfterRuleBaseLockedEvent event = new AfterRuleBaseLockedEvent(this.ruleBase);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterRuleBaseLocked(event);
+ if (iter.hasNext()) {
+ final AfterRuleBaseLockedEvent event = new AfterRuleBaseLockedEvent(this.ruleBase);
+
+ do {
+ iter.next().afterRuleBaseLocked(event);
+ } while (iter.hasNext());
}
}
public void fireBeforeRuleBaseUnlocked() {
- final BeforeRuleBaseUnlockedEvent event = new BeforeRuleBaseUnlockedEvent(this.ruleBase);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforeRuleBaseUnlocked(event);
+ if (iter.hasNext()) {
+ final BeforeRuleBaseUnlockedEvent event = new BeforeRuleBaseUnlockedEvent(this.ruleBase);
+
+ do {
+ iter.next().beforeRuleBaseUnlocked(event);
+ } while (iter.hasNext());
}
}
public void fireAfterRuleBaseUnlocked() {
- final AfterRuleBaseUnlockedEvent event = new AfterRuleBaseUnlockedEvent(this.ruleBase);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterRuleBaseUnlocked(event);
+ if (iter.hasNext()) {
+ final AfterRuleBaseUnlockedEvent event = new AfterRuleBaseUnlockedEvent(this.ruleBase);
+
+ do {
+ iter.next().afterRuleBaseUnlocked(event);
+ } while (iter.hasNext());
}
}
public void fireBeforeRuleAdded(final Package newPkg, final Rule rule) {
- final BeforeRuleAddedEvent event = new BeforeRuleAddedEvent(this.ruleBase, newPkg, rule);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforeRuleAdded(event);
+ if (iter.hasNext()) {
+ final BeforeRuleAddedEvent event = new BeforeRuleAddedEvent(this.ruleBase, newPkg, rule);
+
+ do {
+ iter.next().beforeRuleAdded(event);
+ } while (iter.hasNext());
}
}
public void fireAfterRuleAdded(final Package newPkg, final Rule rule) {
- final AfterRuleAddedEvent event = new AfterRuleAddedEvent(this.ruleBase, newPkg, rule);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterRuleAdded(event);
+ if (iter.hasNext()) {
+ final AfterRuleAddedEvent event = new AfterRuleAddedEvent(this.ruleBase, newPkg, rule);
+
+ do {
+ iter.next().afterRuleAdded(event);
+ } while (iter.hasNext());
}
}
public void fireBeforeRuleRemoved(final Package pkg, final Rule rule) {
- final BeforeRuleRemovedEvent event = new BeforeRuleRemovedEvent(this.ruleBase, pkg, rule);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforeRuleRemoved(event);
+ if (iter.hasNext()) {
+ final BeforeRuleRemovedEvent event = new BeforeRuleRemovedEvent(this.ruleBase, pkg, rule);
+
+ do {
+ iter.next().beforeRuleRemoved(event);
+ } while (iter.hasNext());
}
}
public void fireAfterRuleRemoved(final Package pkg, final Rule rule) {
- final AfterRuleRemovedEvent event = new AfterRuleRemovedEvent(this.ruleBase, pkg, rule);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterRuleRemoved(event);
+ if (iter.hasNext()) {
+ final AfterRuleRemovedEvent event = new AfterRuleRemovedEvent(this.ruleBase, pkg, rule);
+
+ do {
+ iter.next().afterRuleRemoved(event);
+ } while (iter.hasNext());
}
}
public void fireBeforeFunctionRemoved(final Package pkg, final String function) {
- final BeforeFunctionRemovedEvent event = new BeforeFunctionRemovedEvent(this.ruleBase, pkg, function);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().beforeFunctionRemoved(event);
+ if (iter.hasNext()) {
+ final BeforeFunctionRemovedEvent event = new BeforeFunctionRemovedEvent(this.ruleBase, pkg, function);
+
+ do {
+ iter.next().beforeFunctionRemoved(event);
+ } while (iter.hasNext());
}
}
public void fireAfterFunctionRemoved(final Package pkg, final String function) {
- final AfterFunctionRemovedEvent event = new AfterFunctionRemovedEvent(this.ruleBase, pkg, function);
final Iterator<RuleBaseEventListener> iter = getEventListenersIterator();
- while (iter.hasNext()) {
- iter.next().afterFunctionRemoved(event);
+ if (iter.hasNext()) {
+ final AfterFunctionRemovedEvent event = new AfterFunctionRemovedEvent(this.ruleBase, pkg, function);
+
+ do {
+ iter.next().afterFunctionRemoved(event);
+ } while (iter.hasNext());
}
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java 2009-03-25 00:54:05 UTC (rev 25807)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java 2009-03-25 01:53:31 UTC (rev 25808)
@@ -1,280 +1,231 @@
-package org.drools.event;
-
-/*
- * Copyright 2005 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import org.drools.WorkingMemory;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.process.instance.ProcessInstance;
-import org.drools.runtime.process.NodeInstance;
-import org.drools.runtime.process.WorkflowProcessInstance;
-import org.drools.spi.RuleFlowGroup;
-
-/**
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public class RuleFlowEventSupport implements Externalizable {
-
- // TODO separate out process level stuff
-
- private static final long serialVersionUID = 400L;
- private List<RuleFlowEventListener> listeners = new CopyOnWriteArrayList<RuleFlowEventListener>();
-
- public RuleFlowEventSupport() {
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- listeners = (List<RuleFlowEventListener>)in.readObject();
- }
-
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(listeners);
- }
-
- public void addEventListener(final RuleFlowEventListener listener) {
- if ( !this.listeners.contains( listener ) ) {
- this.listeners.add( listener );
- }
- }
-
- public void removeEventListener(final RuleFlowEventListener listener) {
- this.listeners.remove( listener );
- }
-
- public List<RuleFlowEventListener> getEventListeners() {
- return Collections.unmodifiableList( this.listeners );
- }
-
- public int size() {
- return this.listeners.size();
- }
-
- public boolean isEmpty() {
- return this.listeners.isEmpty();
- }
-
- public void fireBeforeRuleFlowProcessStarted(
- final ProcessInstance instance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowStartedEvent event = new RuleFlowStartedEvent( instance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowStarted( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowProcessStarted(
- final ProcessInstance instance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowStartedEvent event = new RuleFlowStartedEvent( instance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowStarted( event, workingMemory );
- }
- }
-
- public void fireBeforeRuleFlowProcessCompleted(
- final WorkflowProcessInstance instance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent( instance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowCompleted( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowProcessCompleted(
- final WorkflowProcessInstance instance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent( instance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowCompleted( event, workingMemory );
- }
- }
-
- public void fireBeforeRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
- final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
-
- final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent( ruleFlowGroup );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowGroupActivated( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
- final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
-
- final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent( ruleFlowGroup );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowGroupActivated( event, workingMemory );
- }
- }
-
- public void fireBeforeRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
- final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
-
- final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent( ruleFlowGroup );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowGroupDeactivated( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
- final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
-
- final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent( ruleFlowGroup );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowGroupDeactivated( event, workingMemory );
- }
- }
-
- public void fireBeforeRuleFlowNodeTriggered(
- final NodeInstance ruleFlowNodeInstance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowNodeTriggered( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowNodeTriggered(
- final NodeInstance ruleFlowNodeInstance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowNodeTriggered( event, workingMemory );
- }
- }
-
- public void fireBeforeRuleFlowNodeLeft(
- final NodeInstance ruleFlowNodeInstance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.beforeRuleFlowNodeLeft( event, workingMemory );
- }
- }
-
- public void fireAfterRuleFlowNodeLeft(
- final NodeInstance ruleFlowNodeInstance,
- final InternalWorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
-
- for ( RuleFlowEventListener listener: listeners ) {
- listener.afterRuleFlowNodeLeft( event, workingMemory );
- }
- }
-
- public void fireBeforeVariableChange(final ProcessInstance instance,
- final String name,
- final Object value,
- WorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value );
-
- for ( RuleFlowEventListener listener: listeners ) {
- if(listener instanceof RuleFlowEventListenerExtension) {
- ((RuleFlowEventListenerExtension) listener).beforeVariableChange(event, workingMemory);
- }
- }
- }
-
- public void fireAfterVariableChange(final ProcessInstance instance,
- final String name,
- final Object value,
- WorkingMemory workingMemory) {
- if (this.listeners.isEmpty()) {
- return;
- }
-
- final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value );
-
- for ( RuleFlowEventListener listener: listeners ) {
- if(listener instanceof RuleFlowEventListenerExtension) {
- ((RuleFlowEventListenerExtension) listener).afterVariableChange(event, workingMemory);
- }
-
- }
- }
-
- public void reset() {
- this.listeners.clear();
- }
-
+package org.drools.event;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
+import org.drools.spi.RuleFlowGroup;
+
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
+ */
+public class RuleFlowEventSupport extends AbstractEventSupport<RuleFlowEventListener> {
+
+ // TODO separate out process level stuff
+
+ public void fireBeforeRuleFlowProcessStarted(final ProcessInstance instance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowStartedEvent event = new RuleFlowStartedEvent(instance);
+
+ do{
+ iter.next().beforeRuleFlowStarted(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowProcessStarted(final ProcessInstance instance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowStartedEvent event = new RuleFlowStartedEvent(instance);
+
+ do {
+ iter.next().afterRuleFlowStarted(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeRuleFlowProcessCompleted(final WorkflowProcessInstance instance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent(instance);
+
+ do {
+ iter.next().beforeRuleFlowCompleted(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowProcessCompleted(final WorkflowProcessInstance instance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent(instance);
+
+ do {
+ iter.next().afterRuleFlowCompleted(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent(ruleFlowGroup);
+
+ do {
+ iter.next().beforeRuleFlowGroupActivated(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent(ruleFlowGroup);
+
+ do{
+ iter.next().afterRuleFlowGroupActivated(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent(ruleFlowGroup);
+
+ do{
+ iter.next().beforeRuleFlowGroupDeactivated(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent(ruleFlowGroup);
+
+ do {
+ iter.next().afterRuleFlowGroupDeactivated(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeRuleFlowNodeTriggered(final NodeInstance ruleFlowNodeInstance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(ruleFlowNodeInstance);
+
+ do {
+ iter.next().beforeRuleFlowNodeTriggered(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowNodeTriggered(final NodeInstance ruleFlowNodeInstance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(ruleFlowNodeInstance);
+
+ do{
+ iter.next().afterRuleFlowNodeTriggered(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeRuleFlowNodeLeft(final NodeInstance ruleFlowNodeInstance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(ruleFlowNodeInstance);
+
+ do{
+ iter.next().beforeRuleFlowNodeLeft(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterRuleFlowNodeLeft(final NodeInstance ruleFlowNodeInstance,
+ final InternalWorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(ruleFlowNodeInstance);
+
+ do{
+ iter.next().afterRuleFlowNodeLeft(event, workingMemory);
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireBeforeVariableChange(final ProcessInstance instance,
+ final String name,
+ final Object value,
+ WorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value);
+
+ do{
+ RuleFlowEventListener listener = iter.next();
+ if (listener instanceof RuleFlowEventListenerExtension) {
+ ((RuleFlowEventListenerExtension) listener).beforeVariableChange(event, workingMemory);
+ }
+ } while (iter.hasNext());
+ }
+ }
+
+ public void fireAfterVariableChange(final ProcessInstance instance,
+ final String name,
+ final Object value,
+ WorkingMemory workingMemory) {
+ final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
+
+ if (iter.hasNext()) {
+ final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value);
+
+ do{
+ RuleFlowEventListener listener = iter.next();
+ if (listener instanceof RuleFlowEventListenerExtension) {
+ ((RuleFlowEventListenerExtension) listener).afterVariableChange(event, workingMemory);
+ }
+ } while (iter.hasNext());
+ }
+ }
+
+ public void reset() {
+ this.clear();
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java 2009-03-25 00:54:05 UTC (rev 25807)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java 2009-03-25 01:53:31 UTC (rev 25808)
@@ -22,6 +22,7 @@
import java.io.ObjectOutput;
import java.util.Collections;
import java.util.List;
+import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
import org.drools.common.InternalWorkingMemory;
@@ -30,64 +31,25 @@
/**
* @author <a href="mailto:simon at redhillconsulting.com.au">Simon Harris </a>
+ * @author <a href="mailto:stampy88 at yahoo.com">dave sinclair</a>
*/
-public class WorkingMemoryEventSupport
- implements
- Externalizable {
- /**
- *
- */
- private static final long serialVersionUID = 400L;
- private List<WorkingMemoryEventListener> listeners = new CopyOnWriteArrayList<WorkingMemoryEventListener>();
+public class WorkingMemoryEventSupport extends AbstractEventSupport<WorkingMemoryEventListener> {
- public WorkingMemoryEventSupport() {
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- listeners = (List<WorkingMemoryEventListener>)in.readObject();
- }
-
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(listeners);
- }
-
- public void addEventListener(final WorkingMemoryEventListener listener) {
- if ( !this.listeners.contains( listener ) ) {
- this.listeners.add( listener );
- }
- }
-
- public void removeEventListener(final WorkingMemoryEventListener listener) {
- this.listeners.remove( listener );
- }
-
- public List getEventListeners() {
- return Collections.unmodifiableList( this.listeners );
- }
-
- public int size() {
- return this.listeners.size();
- }
-
- public boolean isEmpty() {
- return this.listeners.isEmpty();
- }
-
public void fireObjectInserted(final PropagationContext propagationContext,
final FactHandle handle,
final Object object,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<WorkingMemoryEventListener> iter = getEventListenersIterator();
- final ObjectInsertedEvent event = new ObjectInsertedEvent( workingMemory,
- propagationContext,
- handle,
- object );
+ if (iter.hasNext()) {
+ final ObjectInsertedEvent event = new ObjectInsertedEvent(workingMemory,
+ propagationContext,
+ handle,
+ object);
- for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
- ((WorkingMemoryEventListener) this.listeners.get( i )).objectInserted( event );
+ do {
+ iter.next().objectInserted(event);
+ } while (iter.hasNext());
}
}
@@ -96,18 +58,18 @@
final Object oldObject,
final Object object,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<WorkingMemoryEventListener> iter = getEventListenersIterator();
- final ObjectUpdatedEvent event = new ObjectUpdatedEvent( workingMemory,
- propagationContext,
- handle,
- oldObject,
- object );
+ if (iter.hasNext()) {
+ final ObjectUpdatedEvent event = new ObjectUpdatedEvent(workingMemory,
+ propagationContext,
+ handle,
+ oldObject,
+ object);
- for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
- ((WorkingMemoryEventListener) this.listeners.get( i )).objectUpdated( event );
+ do {
+ iter.next().objectUpdated(event);
+ } while (iter.hasNext());
}
}
@@ -115,22 +77,21 @@
final FactHandle handle,
final Object oldObject,
final InternalWorkingMemory workingMemory) {
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ final Iterator<WorkingMemoryEventListener> iter = getEventListenersIterator();
- final ObjectRetractedEvent event = new ObjectRetractedEvent( workingMemory,
- propagationContext,
- handle,
- oldObject );
+ if (iter.hasNext()) {
+ final ObjectRetractedEvent event = new ObjectRetractedEvent(workingMemory,
+ propagationContext,
+ handle,
+ oldObject);
- for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
- ((WorkingMemoryEventListener) this.listeners.get( i )).objectRetracted( event );
+ do {
+ iter.next().objectRetracted(event);
+ } while (iter.hasNext());
}
}
public void reset() {
- this.listeners.clear();
+ this.clear();
}
-
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list