[jboss-svn-commits] JBL Code SVN: r33621 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/event and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 24 09:14:55 EDT 2010


Author: eaa
Date: 2010-06-24 09:14:53 -0400 (Thu, 24 Jun 2010)
New Revision: 33621

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetAppliedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetProcessedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterResourceProcessedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetAppliedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetProcessedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeResourceProcessedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ChangeSetProcessingEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeAgentEventListener.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeBaseUpdatedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ResourceCompilationFailedEvent.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DebugKnowledgeAgentEventListener.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DefaultKnowledgeAgentEventListener.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/KnowledgeAgentEventSupport.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
Log:
JBRULES-2557: Expose Knowledge Agent events
	- KnowledgeAgentImpl: now exposes Before/AfterChangeSetApplied, Before/AfterChangeSetProcessed, Before/AfterResourceProcessed, KnowledgeBaseUpdated and ResourceCompilationFailed

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java	2010-06-24 12:38:11 UTC (rev 33620)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -3,6 +3,7 @@
 import org.drools.ChangeSet;
 import org.drools.KnowledgeBase;
 import org.drools.SystemEventListener;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
 import org.drools.io.Resource;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatelessKnowledgeSession;
@@ -15,6 +16,16 @@
  * 
  */
 public interface KnowledgeAgent {
+
+    void addEventListener(KnowledgeAgentEventListener listener);
+
+
+    public enum ResourceStatus{
+        RESOURCE_ADDED,
+        RESOURCE_MODIFIED,
+        RESOURCE_REMOVED;
+    }
+
     /**
      * 
      * @return

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetAppliedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetAppliedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetAppliedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,39 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import org.drools.ChangeSet;
+
+/**
+ *
+ * @author esteban
+ */
+public class AfterChangeSetAppliedEvent extends ChangeSetProcessingEvent{
+
+    private static final long serialVersionUID = 510L;
+
+    public AfterChangeSetAppliedEvent(ChangeSet changeSet) {
+        super(changeSet);
+    }
+
+    @Override
+     public String toString() {
+        return "==>[AfterChangeSetAppliedEvent: " + getChangeSet()+ "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetProcessedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetProcessedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterChangeSetProcessedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,66 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+package org.drools.event.knowledgeagent;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.drools.ChangeSet;
+import org.drools.definition.KnowledgeDefinition;
+import org.drools.io.Resource;
+
+/**
+ *
+ * @author esteban
+ */
+public class AfterChangeSetProcessedEvent extends ChangeSetProcessingEvent {
+
+    private static final long serialVersionUID = 510L;
+    private final List<Resource> addedResources;
+    private final Map<Resource, Set<KnowledgeDefinition>> modifiedResourceMappings;
+    private final Map<Resource, Set<KnowledgeDefinition>> removedResourceMappings;
+
+    public AfterChangeSetProcessedEvent(ChangeSet changeSet, List<Resource> addedResources, Map<Resource, Set<KnowledgeDefinition>> modifiedResourceMappings, Map<Resource, Set<KnowledgeDefinition>> removedResourceMappings) {
+        super(changeSet);
+        this.addedResources = addedResources;
+        this.modifiedResourceMappings = modifiedResourceMappings;
+        this.removedResourceMappings = removedResourceMappings;
+    }
+
+    public List<Resource> getAddedResources() {
+        return addedResources;
+    }
+
+    public Map<Resource, Set<KnowledgeDefinition>> getModifiedResourceMappings() {
+        return modifiedResourceMappings;
+    }
+
+    public Map<Resource, Set<KnowledgeDefinition>> getRemovedResourceMappings() {
+        return removedResourceMappings;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+    
+    
+
+    @Override
+    public String toString() {
+        return "==>[AfterChangeSetProcessedEvent: " + getChangeSet() + "]";
+    }
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterResourceProcessedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterResourceProcessedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/AfterResourceProcessedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,61 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import org.drools.ChangeSet;
+import org.drools.agent.KnowledgeAgent.ResourceStatus;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+/**
+ *
+ * @author esteban
+ */
+public class AfterResourceProcessedEvent extends ChangeSetProcessingEvent{
+
+    private static final long serialVersionUID = 510L;
+
+    private final Resource resource;
+    private final ResourceType resourceType;
+    private final ResourceStatus status;
+
+    public AfterResourceProcessedEvent(ChangeSet changeSet, Resource resource, ResourceType resourceType, ResourceStatus status) {
+        super(changeSet);
+        this.resource = resource;
+        this.resourceType = resourceType;
+        this.status = status;
+    }
+
+    public Resource getResource() {
+        return resource;
+    }
+
+    public ResourceStatus getStatus() {
+        return status;
+    }
+
+    public ResourceType getResourceType() {
+        return resourceType;
+    }
+
+    @Override
+     public String toString() {
+        return "==>[AfterResourceProcessedEvent("+getStatus()+"): " + getResource()+ "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetAppliedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetAppliedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetAppliedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,39 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import org.drools.ChangeSet;
+
+/**
+ *
+ * @author esteban
+ */
+public class BeforeChangeSetAppliedEvent extends ChangeSetProcessingEvent{
+
+    private static final long serialVersionUID = 510L;
+
+    public BeforeChangeSetAppliedEvent(ChangeSet changeSet) {
+        super(changeSet);
+    }
+
+    @Override
+     public String toString() {
+        return "==>[BeforeChangeSetAppliedEvent: " + getChangeSet()+ "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetProcessedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetProcessedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeChangeSetProcessedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,39 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import org.drools.ChangeSet;
+
+/**
+ *
+ * @author esteban
+ */
+public class BeforeChangeSetProcessedEvent extends ChangeSetProcessingEvent{
+
+    private static final long serialVersionUID = 510L;
+
+    public BeforeChangeSetProcessedEvent(ChangeSet changeSet) {
+        super(changeSet);
+    }
+
+    @Override
+     public String toString() {
+        return "==>[BeforeChangeSetProcessedEvent: " + getChangeSet()+ "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeResourceProcessedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeResourceProcessedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/BeforeResourceProcessedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,63 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import org.drools.ChangeSet;
+import org.drools.agent.KnowledgeAgent.ResourceStatus;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+/**
+ *
+ * @author esteban
+ */
+public class BeforeResourceProcessedEvent extends ChangeSetProcessingEvent{
+
+    private static final long serialVersionUID = 510L;
+
+    private final Resource resource;
+    private final ResourceType resourceType;
+    private final ResourceStatus status;
+
+    public BeforeResourceProcessedEvent(ChangeSet changeSet, Resource resource, ResourceType resourceType, ResourceStatus status) {
+        super(changeSet);
+        this.resource = resource;
+        this.resourceType = resourceType;
+        this.status = status;
+    }
+
+    public Resource getResource() {
+        return resource;
+    }
+
+    public ResourceStatus getStatus() {
+        return status;
+    }
+
+    public ResourceType getResourceType() {
+        return resourceType;
+    }
+
+    @Override
+    public String toString() {
+        return "==>[BeforeResourceProcessedEvent(" + getStatus() + "): " + getResource() + "]";
+    }
+
+
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ChangeSetProcessingEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ChangeSetProcessingEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ChangeSetProcessingEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,38 @@
+package org.drools.event.knowledgeagent;
+
+/*
+ * Copyright 2010 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.util.EventObject;
+import org.drools.ChangeSet;
+
+public class ChangeSetProcessingEvent
+        extends EventObject {
+
+    private static final long serialVersionUID = 510L;
+
+    public ChangeSetProcessingEvent(ChangeSet changeSet) {
+        super(changeSet);
+    }
+
+    public ChangeSet getChangeSet() {
+        return (ChangeSet) getSource();
+    }
+
+    @Override
+    public String toString() {
+        return "==>[ChangeSetProcessingEvent: " + getChangeSet() + "]";
+    }
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeAgentEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeAgentEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeAgentEventListener.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,44 @@
+package org.drools.event.knowledgeagent;
+
+/*
+ * Copyright 2010 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.util.EventListener;
+
+
+/**
+ * @author <a href="mailto:esteban.aliverti at gmail.com">Esteban Aliverti</a>
+ */
+public interface KnowledgeAgentEventListener
+    extends
+    EventListener {
+    
+    void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event);
+
+    void afterChangeSetApplied(AfterChangeSetAppliedEvent event);
+
+    void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event);
+
+    void afterChangeSetProcessed(AfterChangeSetProcessedEvent event);
+
+    void beforeResourceProcessed(BeforeResourceProcessedEvent event);
+
+    void afterResourceProcessed(AfterResourceProcessedEvent event);
+
+    void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event);
+
+    void resourceCompilationFailed(ResourceCompilationFailedEvent event);
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeBaseUpdatedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeBaseUpdatedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/KnowledgeBaseUpdatedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,45 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import java.util.EventObject;
+import org.drools.KnowledgeBase;
+
+/**
+ *
+ * @author esteban
+ */
+public class KnowledgeBaseUpdatedEvent extends EventObject{
+
+    private static final long serialVersionUID = 510L;
+
+
+    public KnowledgeBaseUpdatedEvent(KnowledgeBase kbase) {
+        super(kbase);
+    }
+
+    public KnowledgeBase getKnowledgeBase() {
+        return (KnowledgeBase)this.getSource();
+    }
+
+    @Override
+     public String toString() {
+        return "==>[KnowledgeBaseUpdatedEvent: " + getKnowledgeBase()+ "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ResourceCompilationFailedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ResourceCompilationFailedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/knowledgeagent/ResourceCompilationFailedEvent.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,59 @@
+/*
+ *  Copyright 2010 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.
+ *  under the License.
+ */
+
+package org.drools.event.knowledgeagent;
+
+import java.util.EventObject;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+/**
+ *
+ * @author esteban
+ */
+public class ResourceCompilationFailedEvent extends EventObject{
+
+    private static final long serialVersionUID = 510L;
+
+    private final Resource resource;
+    private final ResourceType resourceType;
+
+    public ResourceCompilationFailedEvent(KnowledgeBuilder kbuilder, Resource resource, ResourceType resourceType) {
+        super(kbuilder);
+        this.resource = resource;
+        this.resourceType = resourceType;
+    }
+
+    public Resource getResource() {
+        return resource;
+    }
+
+    public ResourceType getResourceType() {
+        return resourceType;
+    }
+
+    public KnowledgeBuilder getKnowledgeBuilder() {
+        return (KnowledgeBuilder)this.getSource();
+    }
+
+    @Override
+    public String toString() {
+        return "==>[ResourceCompilationFailedEvent: " + getKnowledgeBuilder() + "]";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DebugKnowledgeAgentEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DebugKnowledgeAgentEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DebugKnowledgeAgentEventListener.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,49 @@
+package org.drools.event.rule;
+
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
+
+public class DebugKnowledgeAgentEventListener
+    implements
+    KnowledgeAgentEventListener {
+
+    public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+        System.err.print(event);
+    }
+
+    public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+        System.err.print(event);
+    }
+
+    public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+        System.err.print(event);
+    }
+
+    public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+        System.err.print(event);
+    }
+
+    public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+        System.err.print(event);
+    }
+
+    public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+        System.err.print(event);
+    }
+
+    public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+        System.err.print(event);
+    }
+
+    public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+        System.err.print(event);
+    }
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DefaultKnowledgeAgentEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DefaultKnowledgeAgentEventListener.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/event/rule/DefaultKnowledgeAgentEventListener.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,41 @@
+package org.drools.event.rule;
+
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
+
+public class DefaultKnowledgeAgentEventListener
+    implements
+    KnowledgeAgentEventListener {
+
+    public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+    }
+
+    public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+    }
+
+    public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+    }
+
+    public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+    }
+
+    public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+    }
+
+    public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+    }
+
+    public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+    }
+
+    public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentEventListenerTest.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,489 @@
+package org.drools.agent;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.core.util.FileManager;
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
+import org.drools.io.ResourceChangeScannerConfiguration;
+import org.drools.io.ResourceFactory;
+import org.drools.io.impl.ResourceChangeNotifierImpl;
+import org.drools.io.impl.ResourceChangeScannerImpl;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.ResourceHandler;
+
+public class KnowledgeAgentEventListenerTest extends TestCase {
+
+    FileManager fileManager;
+    private Server server;
+    private final Object lock = new Object();
+    private volatile boolean changeSetApplied;
+    private boolean compilationErrors;
+    private boolean kbaseUpdated;
+    private int beforeChangeSetProcessed;
+    private int afterChangeSetProcessed;
+    private int beforeChangeSetApplied;
+    private int afterChangeSetApplied;
+    private int beforeResourceProcessed;
+    private int afterResourceProcessed;
+
+
+    @Override
+    protected void setUp() throws Exception {
+        fileManager = new FileManager();
+        fileManager.setUp();
+        ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+
+        ResourceFactory.getResourceChangeNotifierService().start();
+        ResourceFactory.getResourceChangeScannerService().start();
+
+        this.server = new Server(0);
+        ResourceHandler resourceHandler = new ResourceHandler();
+        resourceHandler.setResourceBase(fileManager.getRootDirectory().getPath());
+
+        server.setHandler(resourceHandler);
+
+        server.start();
+
+        this.resetEventCounters();
+    }
+
+    private int getPort() {
+        return this.server.getConnectors()[0].getLocalPort();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        fileManager.tearDown();
+        ResourceFactory.getResourceChangeNotifierService().stop();
+        ResourceFactory.getResourceChangeScannerService().stop();
+        ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
+        ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
+
+        server.stop();
+    }
+
+    public void testEventListenerWithIncrementalChangeSet() throws Exception {
+
+        String header = "";
+        header += "package org.drools.test\n";
+        header += "import org.drools.Person\n\n";
+        header += "global java.util.List list\n\n";
+
+        //create a basic dsl file
+        File f1 = fileManager.newFile("myExpander.dsl");
+        Writer output = new BufferedWriter(new FileWriter(f1));
+        output.write(this.createCommonDSL(null));
+        output.close();
+
+        //create a basic dslr file
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+        String xml = "";
+        xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+        xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+        xml += "    <add> ";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rules.drl' type='DSLR' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/myExpander.dsl' type='DSL' />";
+        xml += "    </add> ";
+        xml += "</change-set>";
+        File fxml = fileManager.newFile("changeset.xml");
+        output = new BufferedWriter(new FileWriter(fxml));
+        output.write(xml);
+        output.close();
+
+        List<String> list = new ArrayList<String>();
+
+        //Create a new Agent with newInstace=true
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        KnowledgeAgent kagent = this.createKAgent(kbase, false);
+
+        //Agent: take care of them!
+        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        Thread.sleep(2000);
+        //the dsl is now modified.
+        f1 = fileManager.newFile("myExpander.dsl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(this.createCommonDSL("name == \"John\""));
+        output.close();
+
+        //We also need to mark the dslr file as modified, so the rules could
+        //be regenerated
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        //The new fact activated and fired the modified rule
+        Thread.sleep(2000);
+
+        //let's add a new rule
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.write(this.createCommonDSLRRule("Rule2"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(1, this.beforeResourceProcessed);
+        assertEquals(1, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        //let's remove Rule1 and Rule2 and add a new rule: Rule3
+        Thread.sleep(2000);
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule3"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(1, this.beforeResourceProcessed);
+        assertEquals(1, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        //let's delete the dsl file (errors are expected)
+        Thread.sleep(2000);
+        f1 = fileManager.newFile("myExpander.dsl");
+        f1.delete();
+
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertTrue(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        kagent.monitorResourceChangeEvents(false);
+    }
+
+    public void testEventListenerWithoutIncrementalChangeSet() throws Exception {
+
+        System.out.println("\n\ntestDSLAndNewInstance\n\n");
+
+        String header = "";
+        header += "package org.drools.test\n";
+        header += "import org.drools.Person\n\n";
+        header += "global java.util.List list\n\n";
+
+        //create a basic dsl file
+        File f1 = fileManager.newFile("myExpander.dsl");
+        Writer output = new BufferedWriter(new FileWriter(f1));
+        output.write(this.createCommonDSL(null));
+        output.close();
+
+        //create a basic dslr file
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+        String xml = "";
+        xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+        xml += "    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+        xml += "    xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+        xml += "    <add> ";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/rules.drl' type='DSLR' />";
+        xml += "        <resource source='http://localhost:" + this.getPort() + "/myExpander.dsl' type='DSL' />";
+        xml += "    </add> ";
+        xml += "</change-set>";
+        File fxml = fileManager.newFile("changeset.xml");
+        output = new BufferedWriter(new FileWriter(fxml));
+        output.write(xml);
+        output.close();
+
+        List<String> list = new ArrayList<String>();
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+        //Create a new Agent with newInstace=true
+        KnowledgeAgent kagent = this.createKAgent(kbase,true);
+
+        //Agent: take care of them!
+        kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+
+
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        Thread.sleep(2000);
+        //Let's modify the dsl file
+        f1 = fileManager.newFile("myExpander.dsl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(this.createCommonDSL("name == \"John\""));
+        output.close();
+
+        //We need to mark the dslr file as modified (even when it was not) so
+        //the agent could recreate the rules it contains using the new dsl.
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        Thread.sleep(2000);
+        //Let's add a new Rule
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.write(this.createCommonDSLRRule("Rule2"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(1, this.beforeResourceProcessed);
+        assertEquals(1, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        Thread.sleep(2000);
+        //Let's remove both rules and add a new one: Rule3
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule3"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(1, this.beforeResourceProcessed);
+        assertEquals(1, this.afterResourceProcessed);
+        assertFalse(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+        Thread.sleep(2000);
+        //let's delete the dsl file (errors are expected)
+        f1 = fileManager.newFile("myExpander.dsl");
+        f1.delete();
+
+        f1 = fileManager.newFile("rules.drl");
+        output = new BufferedWriter(new FileWriter(f1));
+
+        output.write(header);
+        output.write(this.createCommonDSLRRule("Rule1"));
+        output.close();
+
+        this.waitUntilChangeSetApplied();
+        assertEquals(1, this.beforeChangeSetApplied);
+        assertEquals(1, this.afterChangeSetApplied);
+        assertEquals(1, this.beforeChangeSetProcessed);
+        assertEquals(1, this.afterChangeSetProcessed);
+        assertEquals(2, this.beforeResourceProcessed);
+        assertEquals(2, this.afterResourceProcessed);
+        assertTrue(this.compilationErrors);
+        assertTrue(this.kbaseUpdated);
+        this.resetEventCounters();
+
+
+        kagent.monitorResourceChangeEvents(false);
+    }
+
+    private KnowledgeAgent createKAgent(KnowledgeBase kbase, boolean newInstance) {
+        ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
+        sconf.setProperty("drools.resource.scanner.interval", "2");
+        ResourceFactory.getResourceChangeScannerService().configure(sconf);
+
+        //System.setProperty(KnowledgeAgentFactory.PROVIDER_CLASS_NAME_PROPERTY_NAME, "org.drools.agent.impl.KnowledgeAgentProviderImpl");
+
+        KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
+        aconf.setProperty("drools.agent.scanDirectories", "true");
+        aconf.setProperty("drools.agent.scanResources", "true");
+        // Testing incremental build here
+        aconf.setProperty("drools.agent.newInstance", "" + newInstance);
+
+        KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
+                "test agent", kbase, aconf);
+
+        final KnowledgeAgentEventListenerTest test = this;
+        kagent.addEventListener(new KnowledgeAgentEventListener() {
+
+            public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+                beforeChangeSetApplied++;
+            }
+
+            public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+                afterChangeSetApplied++;
+                synchronized (lock) {
+                    changeSetApplied = true;
+                    lock.notifyAll();
+                }
+            }
+
+            public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+                beforeChangeSetProcessed++;
+            }
+
+            public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+                afterChangeSetProcessed++;
+            }
+
+            public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+                beforeResourceProcessed++;
+            }
+
+            public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+                afterResourceProcessed++;
+            }
+
+            public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+                kbaseUpdated = true;
+            }
+
+            public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+                compilationErrors = true;
+            }
+        });
+
+        assertEquals("test agent", kagent.getName());
+
+        return kagent;
+    }
+
+    private String createCommonDSLRRule(String ruleName) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("rule ");
+        sb.append(ruleName);
+        sb.append("\n");
+        sb.append("when\n");
+        sb.append("There is a Person\n");
+        sb.append("then\n");
+        sb.append("add rule's name to list;\n");
+        sb.append("end\n");
+
+        return sb.toString();
+    }
+
+    private String createCommonDSL(String restriction) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[condition][]There is a Person = Person(");
+        if (restriction != null) {
+            sb.append(restriction);
+        }
+        sb.append(")\n");
+        sb.append("[consequence][]add rule's name to list = list.add( drools.getRule().getName() );\n");
+        return sb.toString();
+    }
+
+    private void waitUntilChangeSetApplied() {
+        synchronized (lock) {
+            while (!changeSetApplied) {
+                try {
+                    lock.wait();
+                } catch (InterruptedException e) {
+                }
+                System.out.println("Waking up!");
+            }
+            changeSetApplied = false;
+        }
+    }
+
+    private void resetEventCounters(){
+        this.beforeChangeSetApplied=0;
+        this.beforeChangeSetProcessed=0;
+        this.beforeResourceProcessed=0;
+        this.afterChangeSetApplied=0;
+        this.afterChangeSetProcessed=0;
+        this.afterResourceProcessed=0;
+        this.compilationErrors = false;
+        this.changeSetApplied = false;
+        this.kbaseUpdated = false;
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/KnowledgeAgentEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/KnowledgeAgentEventSupport.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/KnowledgeAgentEventSupport.java	2010-06-24 13:14:53 UTC (rev 33621)
@@ -0,0 +1,142 @@
+package org.drools.event;
+
+/*
+ * Copyright 2010 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.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.drools.definition.KnowledgeDefinition;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import java.util.Iterator;
+import org.drools.ChangeSet;
+import org.drools.KnowledgeBase;
+import org.drools.agent.KnowledgeAgent.ResourceStatus;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+/**
+ * @author <a href="mailto:esteban.aliverti at gmail.com">Esteban Aliverti</a>
+ */
+public class KnowledgeAgentEventSupport extends AbstractEventSupport<KnowledgeAgentEventListener> {
+
+    public KnowledgeAgentEventSupport() {
+    }
+
+    public void fireBeforeChangeSetApplied(ChangeSet changeSet) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            final BeforeChangeSetAppliedEvent event = new BeforeChangeSetAppliedEvent(changeSet);
+            do{
+                iter.next().beforeChangeSetApplied(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireAfterChangeSetApplied(ChangeSet changeSet) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            final AfterChangeSetAppliedEvent event = new AfterChangeSetAppliedEvent(changeSet);
+            do{
+                iter.next().afterChangeSetApplied(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireBeforeChangeSetProcessed(ChangeSet changeSet) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final BeforeChangeSetProcessedEvent event = new BeforeChangeSetProcessedEvent(changeSet);
+                iter.next().beforeChangeSetProcessed(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireAfterChangeSetProcessed(ChangeSet changeSet, List<Resource> addedResources, Map<Resource, Set<KnowledgeDefinition>> modifiedResourceMappings, Map<Resource, Set<KnowledgeDefinition>> removedResourceMappings) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final AfterChangeSetProcessedEvent event = new AfterChangeSetProcessedEvent(changeSet, addedResources,  modifiedResourceMappings, removedResourceMappings);
+                iter.next().afterChangeSetProcessed(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireBeforeResourceProcessed(ChangeSet changeSet, Resource resource, ResourceType type, ResourceStatus status) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final BeforeResourceProcessedEvent event = new BeforeResourceProcessedEvent(changeSet, resource, type, status);
+                iter.next().beforeResourceProcessed(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireAfterResourceProcessed(ChangeSet changeSet, Resource resource, ResourceType type, ResourceStatus status) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final AfterResourceProcessedEvent event = new AfterResourceProcessedEvent(changeSet, resource, type, status);
+                iter.next().afterResourceProcessed(event);
+            }  while (iter.hasNext());
+        }
+    }
+    
+    public void fireKnowledgeBaseUpdated(KnowledgeBase kbase) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final KnowledgeBaseUpdatedEvent event = new KnowledgeBaseUpdatedEvent(kbase);
+                iter.next().knowledgeBaseUpdated(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+    public void fireResourceCompilationFailed(KnowledgeBuilder kbuilder, Resource resource, ResourceType type) {
+        final Iterator<KnowledgeAgentEventListener> iter = getEventListenersIterator();
+
+        if (iter.hasNext()) {
+            do{
+                final ResourceCompilationFailedEvent event = new ResourceCompilationFailedEvent(kbuilder, resource, type);
+                iter.next().resourceCompilationFailed(event);
+            }  while (iter.hasNext());
+        }
+    }
+
+
+    public void reset() {
+        this.clear();
+    }
+
+}
\ No newline at end of file



More information about the jboss-svn-commits mailing list