[jboss-svn-commits] JBL Code SVN: r20955 - in labs/jbossrules/trunk/drools-core: src/main/java/org/drools/agent and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jul 8 03:53:24 EDT 2008
Author: Rikkola
Date: 2008-07-08 03:53:24 -0400 (Tue, 08 Jul 2008)
New Revision: 20955
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageChangeInfo.java
Modified:
labs/jbossrules/trunk/drools-core/.classpath
labs/jbossrules/trunk/drools-core/.project
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/DirectoryScanner.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageProvider.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleAgent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/URLScanner.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/DirectoryScannerTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/MockProvider.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleAgentTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java
Log:
JBRULES-1660: Rule agent not detecting deleted files and removing packages
Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/.classpath 2008-07-08 07:53:24 UTC (rev 20955)
@@ -1,12 +1,8 @@
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-</classpath>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
+ <classpathentry kind="con" path="org.devzuz.q.maven.jdt.core.mavenClasspathContainer"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Modified: labs/jbossrules/trunk/drools-core/.project
===================================================================
--- labs/jbossrules/trunk/drools-core/.project 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/.project 2008-07-08 07:53:24 UTC (rev 20955)
@@ -1,16 +1,28 @@
-<projectDescription>
- <name>drools-core</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
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>drools-core</name>
+ <comment>A rule production system</comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.drools.eclipse.droolsbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
+ </natures>
+</projectDescription>
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/DirectoryScanner.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/DirectoryScanner.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/DirectoryScanner.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -1,57 +1,92 @@
package org.drools.agent;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import org.drools.RuleBase;
import org.drools.rule.Package;
/**
- * This will scan a directory for files to watch for a change.
- * It will update the list of files only if they number of files in a directory changes.
+ * This will scan a directory for files to watch for a change. It will update
+ * the list of files only if they number of files in a directory changes.
*
* @author Michael Neale
*/
public class DirectoryScanner extends PackageProvider {
- private File[] currentList;
- private FileScanner scanner;
- private File dir;
+ private FileScanner scanner;
+ private File dir;
- void configure(Properties config) {
- String d = config.getProperty( RuleAgent.DIRECTORY );
+ void configure(Properties config) {
+ String d = config.getProperty(RuleAgent.DIRECTORY);
- //now check to see whats in them dir...
- dir = new File( d );
- if ( !(dir.isDirectory() && dir.exists()) ) {
- throw new IllegalArgumentException( "The directory " + d + "is not valid." );
- }
+ // now check to see whats in them dir...
+ dir = new File(d);
+ if (!(dir.isDirectory() && dir.exists())) {
+ throw new IllegalArgumentException("The directory " + d
+ + "is not valid.");
+ }
+
+ scanner = new FileScanner();
+ scanner.setFiles( dir.listFiles() );
- this.currentList = dir.listFiles();
- scanner = new FileScanner();
- scanner.setFiles( currentList );
+ }
- }
+ PackageChangeInfo loadPackageChanges() {
+
+ Map<String, String> pathToPackage = scanner.pathToPackage;
+ Collection<String> removedPackageNames = new ArrayList<String>();
+
+ if( pathToPackage != null ) {
+ Map<String,String> tempPathToPackage = new HashMap<String, String>();
+
+ File[] files = dir.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ File f = files[i];
+ String path = f.getPath();
+
+ if (pathToPackage.containsKey(path)) {
- Package[] loadPackageChanges() {
- if ( currentList.length != dir.listFiles().length ) {
- listener.info( "Extra files detected in the directory " + dir.getPath() );
- currentList = dir.listFiles();
- scanner = new FileScanner();
- scanner.setFiles( currentList );
- }
- return scanner.loadPackageChanges();
- }
-
- public String toString() {
- String s = "DirectoryScanner";
- if (dir != null) {
- s = s + " scanning dir: " + dir.getPath();
- }
- if (currentList != null) {
- s = s + " found " + currentList.length + " file(s).";
- }
- return s;
- }
+ tempPathToPackage.put(path, pathToPackage.get(path));
+ pathToPackage.remove(path);
+ }
+ }
+
+ if( pathToPackage.size() > 0 || files.length != tempPathToPackage.size() ) {
+ removedPackageNames.addAll( pathToPackage.values() );
+
+ listener.info("File changes detected in the directory "
+ + dir.getPath());
+
+// scanner = new FileScanner();
+ scanner.setFiles( files );
+ }
+
+ scanner.pathToPackage = tempPathToPackage;
+ }
+
+ PackageChangeInfo info = scanner.loadPackageChanges();
+
+ info.addRemovedPackages(removedPackageNames);
+
+ return info;
+ }
+
+ public String toString() {
+ String s = "DirectoryScanner";
+ if (dir != null) {
+ s = s + " scanning dir: " + dir.getPath();
+ }
+ if (scanner != null && scanner.files != null) {
+ s = s + " found " + scanner.files.length + " file(s).";
+ }
+ return s;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -4,7 +4,6 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -19,11 +18,12 @@
*
*/
public class FileScanner extends PackageProvider {
+
+ File[] files;
+ Map lastUpdated = new HashMap();
+ Map<String,String> pathToPackage = null;
- File[] files;
- Map lastUpdated = new HashMap();
-
/**
* This sets the list of files to be monitored.
* This takes a list of paths and files (not directories).
@@ -52,8 +52,8 @@
* If there was an error reading the packages, this will not fail, it will
* just do nothing (as there may be a temporary IO issue).
*/
- Package[] loadPackageChanges() {
- Package[] changes = getChangeSet();
+ PackageChangeInfo loadPackageChanges() {
+ PackageChangeInfo changes = getChangeSet();
return changes;
}
@@ -64,19 +64,31 @@
* Calculate a change set, based on last updated times.
* (keep a map of files).
*/
- private Package[] getChangeSet() {
- if ( this.files == null ) return new Package[0];
- List list = new ArrayList();
+ private PackageChangeInfo getChangeSet() {
+ PackageChangeInfo info = new PackageChangeInfo();
+ if ( this.files == null ) return info;
+
+ if( pathToPackage == null ) pathToPackage = new HashMap<String,String>();
+
for ( int i = 0; i < files.length; i++ ) {
File f = files[i];
- if ( hasChanged( f.getPath(),
+
+ if( !f.exists() ){
+ String name = pathToPackage.get(f.getPath());
+ if( name != null ){
+ info.addRemovedPackage( name );
+ }
+ } else if ( hasChanged( f.getPath(),
this.lastUpdated,
f.lastModified() ) ) {
Package p = readPackage( f );
- if ( p != null ) list.add( p );
+ if ( p != null ) {
+ info.addPackage( p );
+ pathToPackage.put(f.getPath(), p.getName());
+ }
}
}
- return (Package[]) list.toArray( new Package[list.size()] );
+ return info;
}
/**
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageChangeInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageChangeInfo.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageChangeInfo.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -0,0 +1,61 @@
+package org.drools.agent;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.drools.rule.Package;
+
+/**
+ * Contains the changes to packages.
+ *
+ * @author Toni Rikkola
+ *
+ */
+class PackageChangeInfo {
+
+ private Collection<Package> changedPackages;
+ private Collection<String> removedPackages;
+
+ void addPackage(Package p) {
+
+ if (changedPackages == null) {
+ changedPackages = new ArrayList<Package>();
+ }
+
+ changedPackages.add(p);
+ }
+
+ void addRemovedPackages(Collection<String> removedPackages) {
+
+ for (String name : removedPackages) {
+ addRemovedPackage(name);
+ }
+
+ }
+
+ Collection<Package> getChangedPackages() {
+ if (changedPackages != null) {
+ return changedPackages;
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ Collection<String> getRemovedPackages() {
+ if (removedPackages != null) {
+ return removedPackages;
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ void addRemovedPackage(String name) {
+
+ if (removedPackages == null) {
+ removedPackages = new ArrayList<String>();
+ }
+
+ removedPackages.add(name);
+ }
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageProvider.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageProvider.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -3,6 +3,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import org.drools.RuleBase;
@@ -24,7 +25,7 @@
* If there was an error reading the packages, this will not fail, it will
* just do nothing (as there may be a temporary IO issue).
*/
- abstract Package[] loadPackageChanges();
+ abstract PackageChangeInfo loadPackageChanges();
/**
* This will be passed the entire config.
@@ -47,29 +48,49 @@
}
}
}
+
+ static void removePackages( Collection<String> removedPackages,
+ RuleBase rb,
+ AgentEventListener listener ) {
+
+ for (String name : removedPackages) {
+ listener.info( "Removing package called " + name );
+ removePackage(name, rb);
+ }
+ }
-
- static void applyChanges(RuleBase rb, boolean removeExistingPackages, Package[] ps, AgentEventListener listener) {
- applyChanges( rb, removeExistingPackages, Arrays.asList( ps ), listener );
+ static void applyChanges(RuleBase rb, boolean removeExistingPackages, Collection changes,
+ AgentEventListener listener) {
+ applyChanges(rb, removeExistingPackages, changes, null, listener);
}
- static void applyChanges(RuleBase rb, boolean removeExistingPackages, Collection changes, AgentEventListener listener) {
- rb.lock();
- if ( changes == null ) return;
- for ( Iterator iter = changes.iterator(); iter.hasNext(); ) {
- Package p = (Package) iter.next();
-
- if ( removeExistingPackages ) {
- removePackage( p.getName(),
- rb );
- }
- try {
- listener.info( "Adding package called " + p.getName() );
- rb.addPackage( p );
- } catch ( Exception e ) {
- throw new RuntimeDroolsException( e );
- }
- }
+ static void applyChanges(RuleBase rb, boolean removeExistingPackages, Collection changes,
+ Collection<String> removed, AgentEventListener listener) {
+ if ( changes == null && removed == null ) return;
+
+ rb.lock();
+
+ if(removed != null ) {
+ removePackages(removed, rb, listener);
+ }
+
+ if( changes != null ) {
+ for ( Iterator iter = changes.iterator(); iter.hasNext(); ) {
+ Package p = (Package) iter.next();
+
+ if ( removeExistingPackages ) {
+ removePackage( p.getName(),
+ rb );
+ }
+ try {
+ listener.info( "Adding package called " + p.getName() );
+ rb.addPackage( p );
+ } catch ( Exception e ) {
+ throw new RuntimeDroolsException( e );
+ }
+ }
+ }
+
rb.unlock();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleAgent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleAgent.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleAgent.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -4,6 +4,7 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@@ -290,18 +291,25 @@
}
public void refreshRuleBase() {
+
+ List<Package> changedPackages = new ArrayList<Package>();
+ List<String> removedPackages = new ArrayList<String>();
- List changedPackages = new ArrayList();
-
for ( Iterator iter = providers.iterator(); iter.hasNext(); ) {
PackageProvider prov = (PackageProvider) iter.next();
- Package[] changes = checkForChanges( prov );
- if (changes != null && changes.length > 0) {
- changedPackages.addAll( Arrays.asList( changes ) );
+ PackageChangeInfo info = checkForChanges( prov );
+ Collection<Package> changes = info.getChangedPackages();
+ Collection<String> removed = info.getRemovedPackages();
+ if (changes != null && changes.size() > 0) {
+ changedPackages.addAll( changes );
+ }
+ if (removed != null && removed.size() > 0) {
+ removedPackages.addAll( removed );
}
}
- if (changedPackages.size() > 0) {
+ // Update changes.
+ if (changedPackages.size() > 0 || removedPackages.size() > 0) {
listener.info( "Applying changes to the rulebase." );
//we have a change
if (this.newInstance) {
@@ -309,30 +317,33 @@
//blow away old
this.ruleBase = RuleBaseFactory.newRuleBase( this.ruleBaseConf );
+ // Remove removed packages.
+ for (String name : removedPackages) {
+ this.packages.remove( name );
+ }
//need to store ALL packages
- for ( Iterator iter = changedPackages.iterator(); iter.hasNext(); ) {
- Package element = (Package) iter.next();
+ for ( Package element : changedPackages ) {
this.packages.put( element.getName(), element ); //replace
}
//get packages from full name
PackageProvider.applyChanges( this.ruleBase, false, this.packages.values(), this.listener );
} else {
- PackageProvider.applyChanges( this.ruleBase, true, changedPackages, this.listener );
+ PackageProvider.applyChanges( this.ruleBase, true, changedPackages, removedPackages, this.listener );
}
}
}
- private synchronized Package[] checkForChanges(PackageProvider prov) {
+ private synchronized PackageChangeInfo checkForChanges(PackageProvider prov) {
listener.debug( "SCANNING FOR CHANGE " + prov.toString() );
if (this.ruleBase == null) ruleBase = RuleBaseFactory.newRuleBase( this.ruleBaseConf );
- Package[] changes = prov.loadPackageChanges();
- return changes;
+ PackageChangeInfo info = prov.loadPackageChanges();
+ return info ;
}
/**
- * Convert a space seperated list into a List of stuff.
+ * Convert a space separated list into a List of stuff.
* If a filename or whatnot has a space in it, you can put double quotes around it
* and it will read it in as one token.
*/
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/URLScanner.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/URLScanner.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/URLScanner.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -84,8 +84,8 @@
- Package[] loadPackageChanges() { //void updateRuleBase(RuleBase rb, boolean removeExistingPackages) {
- Package[] changes = null;
+ PackageChangeInfo loadPackageChanges() { //void updateRuleBase(RuleBase rb, boolean removeExistingPackages) {
+ PackageChangeInfo changes = null;
try {
changes = getChangeSet();
return changes;
@@ -102,21 +102,24 @@
return null;
}
- private Package[] getChangeSet() throws IOException, ClassNotFoundException {
- if ( this.urls == null ) return new Package[0];
- List list = new ArrayList();
+ private PackageChangeInfo getChangeSet() throws IOException, ClassNotFoundException {
+
+ PackageChangeInfo info = new PackageChangeInfo();
+
+ if ( this.urls == null ) return info;
+
for ( int i = 0; i < urls.length; i++ ) {
URL u = urls[i];
if ( hasChanged( u, this.lastUpdated) ) {
Package p = readPackage( u );
if ( p == null ) return null;
- list.add( p );
+ info.addPackage( p );
if (localCacheDir != null) {
writeLocalCacheCopy(p, u, localCacheDir);
}
}
}
- return (Package[]) list.toArray( new Package[list.size()] );
+ return info;
}
private void writeLocalCacheCopy(Package p, URL u, File localCacheDir) {
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/DirectoryScannerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/DirectoryScannerTest.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/DirectoryScannerTest.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -9,43 +9,89 @@
import junit.framework.TestCase;
+public class DirectoryScannerTest extends TestCase {
+ public void testScan() throws Exception {
+ File dir = RuleBaseAssemblerTest.getTempDirectory();
-public class DirectoryScannerTest extends TestCase {
+ Package p1 = new Package("p1");
+ Package p2 = new Package("p2");
+ File p1f = new File(dir, "p1.pkg");
+ File p2f = new File(dir, "p2.pkg");
- public void testScan() throws Exception {
- File dir = RuleBaseAssemblerTest.getTempDirectory();
-
- Package p1 = new Package("p1");
- Package p2 = new Package("p2");
- File p1f = new File(dir, "p1.pkg");
- File p2f = new File(dir, "p2.pkg");
-
- RuleBaseAssemblerTest.writePackage( p1, p1f );
- RuleBaseAssemblerTest.writePackage( p2, p2f);
-
- DirectoryScanner scan = new DirectoryScanner();
- scan.listener = new MockListener();
- Properties props = new Properties();
- props.setProperty( RuleAgent.DIRECTORY, dir.getPath() );
-
- scan.configure( props );
-
- RuleBase rb = RuleBaseFactory.newRuleBase();
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
-
- assertEquals(2, rb.getPackages().length);
-
- Package p3 = new Package("p3");
- File p3f = new File(dir, "p3.pkg");
-
- RuleBaseAssemblerTest.writePackage( p3, p3f );
-
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
+ RuleBaseAssemblerTest.writePackage(p1, p1f);
+ RuleBaseAssemblerTest.writePackage(p2, p2f);
- assertEquals(3, rb.getPackages().length);
- }
-
-
-
+ DirectoryScanner scan = new DirectoryScanner();
+ scan.listener = new MockListener();
+ Properties props = new Properties();
+ props.setProperty(RuleAgent.DIRECTORY, dir.getPath());
+
+ scan.configure(props);
+
+ RuleBase rb = RuleBaseFactory.newRuleBase();
+ PackageProvider.applyChanges(rb, true, scan.loadPackageChanges().getChangedPackages(),
+ new MockListener());
+
+ assertEquals(2, rb.getPackages().length);
+
+ Package p3 = new Package("p3");
+ File p3f = new File(dir, "p3.pkg");
+
+ RuleBaseAssemblerTest.writePackage(p3, p3f);
+
+ PackageProvider.applyChanges(rb, true, scan.loadPackageChanges().getChangedPackages(),
+ new MockListener());
+
+ assertEquals(3, rb.getPackages().length);
+ }
+
+ public void testScanDRLFileReplace() throws Exception {
+ File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+ Package p1 = new Package("p1");
+ Package p2 = new Package("p2");
+ File p1f = new File(dir, "p1.pkg");
+ File p2f = new File(dir, "p2.pkg");
+
+ RuleBaseAssemblerTest.writePackage(p1, p1f);
+ RuleBaseAssemblerTest.writePackage(p2, p2f);
+
+ DirectoryScanner scan = new DirectoryScanner();
+ scan.listener = new MockListener();
+ Properties props = new Properties();
+ props.setProperty(RuleAgent.DIRECTORY, dir.getPath());
+
+ scan.configure(props);
+
+ RuleBase rb = RuleBaseFactory.newRuleBase();
+
+ PackageChangeInfo info1 = scan.loadPackageChanges();
+
+ assertEquals(2, info1.getChangedPackages().size());
+ assertEquals(0, info1.getRemovedPackages().size());
+
+ PackageProvider.applyChanges(rb, true, info1.getChangedPackages(), info1.getRemovedPackages(), new MockListener());
+
+ assertEquals(2, rb.getPackages().length);
+
+ // Delete file p2.pkg and create file p3.pkg.
+ boolean fileDeleted = p2f.delete();
+ assertTrue(fileDeleted);
+
+ Package p3 = new Package("p3");
+ File p3f = new File(dir, "p3.pkg");
+
+ RuleBaseAssemblerTest.writePackage(p3, p3f);
+
+ PackageChangeInfo info2 = scan.loadPackageChanges();
+
+ assertEquals(1, info2.getChangedPackages().size());
+ assertEquals(1, info2.getRemovedPackages().size());
+
+ PackageProvider.applyChanges(rb, true, info2.getChangedPackages(), info2.getRemovedPackages(), new MockListener());
+
+ assertEquals(2, rb.getPackages().length);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -52,7 +52,7 @@
scan.configure( props );
RuleBase rb = RuleBaseFactory.newRuleBase();
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), new MockListener() );
@@ -60,13 +60,13 @@
assertTrue("p1".equals(rb.getPackages()[0].getName()) || "p1".equals(rb.getPackages()[1].getName()));
assertTrue("p2".equals(rb.getPackages()[0].getName()) || "p2".equals(rb.getPackages()[1].getName()));
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), new MockListener() );
assertEquals(2, rb.getPackages().length);
assertTrue("p1".equals(rb.getPackages()[0].getName()) || "p1".equals(rb.getPackages()[1].getName()));
assertTrue("p2".equals(rb.getPackages()[0].getName()) || "p2".equals(rb.getPackages()[1].getName()));
RuleBaseAssemblerTest.writePackage( p2, p2f );
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), new MockListener() );
assertEquals(2, rb.getPackages().length);
@@ -79,7 +79,7 @@
FileScanner scan = new FileScanner();
RuleBase rb = RuleBaseFactory.newRuleBase();
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), new MockListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), new MockListener() );
assertEquals(0, rb.getPackages().length);
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/MockProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/MockProvider.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/MockProvider.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -11,7 +11,7 @@
public void configure(Properties config) {
}
- Package[] loadPackageChanges() {
+ PackageChangeInfo loadPackageChanges() {
return null;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleAgentTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleAgentTest.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleAgentTest.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -223,8 +223,122 @@
}
+
+ public void testPollingFilesRuleBaseRemoveNewInstanceFalse() throws Exception {
+ File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+ Package p1 = new Package("p1");
+ File p1f = new File(dir, "p43_.pkg");
+ RuleBaseAssemblerTest.writePackage( p1, p1f );
+
+ Package p2 = new Package("p2");
+ File p2f = new File(dir, "p44_.pkg");
+ RuleBaseAssemblerTest.writePackage( p2, p2f );
+
+
+
+ String path = dir.getPath() + "/" + "p43_.pkg " + dir.getPath() + "/p44_.pkg";
+
+ Properties props = new Properties();
+ props.setProperty( "file", path );
+
+ props.setProperty( "newInstance", "false" );
+ RuleAgent ag = RuleAgent.newRuleAgent(props);
+
+ assertFalse(ag.isNewInstance());
+
+ RuleBase rb = ag.getRuleBase();
+ assertEquals(2, rb.getPackages().length);
+
+
+ boolean success = p2f.delete();
+ assertTrue(success);
+
+ ag.refreshRuleBase();
+ assertEquals(1, rb.getPackages().length);
+ Thread.sleep( 1000 );
+ //only change one
+ RuleBaseAssemblerTest.writePackage( p1, p1f );
+ Thread.sleep( 1000 );
+ ag.refreshRuleBase();
+
+
+ //check we will have 2
+ assertEquals(1, rb.getPackages().length);
+
+ ag.refreshRuleBase();
+ ag.refreshRuleBase();
+
+ assertEquals(1, rb.getPackages().length);
+
+
+
+
+ }
+
+ public void testPollingFilesRuleBaseRemoveNewInstanceTrue() throws Exception {
+ File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+ Package p1 = new Package("p1");
+ File p1f = new File(dir, "p43_.pkg");
+ RuleBaseAssemblerTest.writePackage( p1, p1f );
+
+ Package p2 = new Package("p2");
+ File p2f = new File(dir, "p44_.pkg");
+ RuleBaseAssemblerTest.writePackage( p2, p2f );
+
+
+
+ String path = dir.getPath() + "/" + "p43_.pkg " + dir.getPath() + "/p44_.pkg";
+
+ Properties props = new Properties();
+ props.setProperty( "file", path );
+
+ props.setProperty( "newInstance", "true" );
+ RuleAgent ag = RuleAgent.newRuleAgent(props);
+
+ assertTrue(ag.isNewInstance());
+
+ RuleBase rb = ag.getRuleBase();
+ assertEquals(2, rb.getPackages().length);
+
+
+ boolean success = p2f.delete();
+ assertTrue(success);
+
+ ag.refreshRuleBase();
+ RuleBase rb_ = ag.getRuleBase();
+
+ assertNotSame(rb, rb_);
+
+ assertEquals(1, rb_.getPackages().length);
+ Thread.sleep( 1000 );
+ //only change one
+ RuleBaseAssemblerTest.writePackage( p1, p1f );
+ Thread.sleep( 1000 );
+ ag.refreshRuleBase();
+
+ RuleBase rb__ = ag.getRuleBase();
+
+ assertNotSame(rb, rb__);
+
+ //check we will have 2
+ assertEquals(1, rb__.getPackages().length);
+
+ ag.refreshRuleBase();
+ ag.refreshRuleBase();
+
+ RuleBase rb___ = ag.getRuleBase();
+ assertEquals(1, rb___.getPackages().length);
+
+
+
+
+ }
+
+
public void testDirectory() throws Exception {
File dir = RuleBaseAssemblerTest.getTempDirectory();
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java 2008-07-08 04:44:31 UTC (rev 20954)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java 2008-07-08 07:53:24 UTC (rev 20955)
@@ -136,7 +136,7 @@
RuleBase rb = RuleBaseFactory.newRuleBase();
AgentEventListener list = getNilListener();
- PackageProvider.applyChanges( rb, false, scan.loadPackageChanges(), list );
+ PackageProvider.applyChanges( rb, false, scan.loadPackageChanges().getChangedPackages(), list );
assertEquals( 2, rb.getPackages().length );
@@ -202,7 +202,7 @@
assertNotNull( scan.localCacheDir );
RuleBase rb = RuleBaseFactory.newRuleBase();
- PackageProvider.applyChanges( rb, false, scan.loadPackageChanges(), getNilListener() );
+ PackageProvider.applyChanges( rb, false, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
assertEquals( 2, rb.getPackages().length );
@@ -236,7 +236,7 @@
rb = RuleBaseFactory.newRuleBase();
assertEquals(0, rb.getPackages().length);
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), getNilListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
assertEquals(2, rb.getPackages().length);
@@ -261,8 +261,8 @@
};
- Package[] changes = scan.loadPackageChanges();
- assertEquals(0, changes.length);
+ PackageChangeInfo changes = scan.loadPackageChanges();
+ assertEquals(0, changes.getChangedPackages().size());
assertEquals(true, fetchCalled[0]);
assertEquals(2, ((MockListener)scan.listener).exceptions.size());
@@ -305,7 +305,7 @@
assertNotNull( scan.localCacheDir );
RuleBase rb = RuleBaseFactory.newRuleBase();
- PackageProvider.applyChanges( rb, true, scan.loadPackageChanges(), getNilListener() );
+ PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
assertEquals(2, rb.getPackages().length);
More information about the jboss-svn-commits
mailing list