[jboss-svn-commits] JBL Code SVN: r12727 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/agent and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 21 00:28:04 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-06-21 00:28:03 -0400 (Thu, 21 Jun 2007)
New Revision: 12727

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/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/RuleBaseAgent.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java
Log:
JBRULES-752 refactoring love

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	2007-06-21 03:52:07 UTC (rev 12726)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/DirectoryScanner.java	2007-06-21 04:28:03 UTC (rev 12727)
@@ -1,24 +1,44 @@
 package org.drools.agent;
 
-import java.util.List;
+import java.io.File;
+import java.util.Properties;
 
 import org.drools.RuleBase;
 
+/**
+ * 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 List dir;
+    private File[] currentList;
+    private FileScanner scanner;
+    private File dir;
 
-    void configure(List configList) {
-        this.dir = configList;
+    void configure(Properties config) {        
+        String d = config.getProperty( RuleBaseAgent.DIRECTORY );
+        
         //now check to see whats in them dir...
-        if (configList.size() > 1) {
-            throw new IllegalArgumentException("You can only monitor one directory at a time this way.");
+        dir = new File(d);
+        if (!(dir.isDirectory() && dir.exists())) {
+            throw new IllegalArgumentException("The directory " + d + "is not valid.");            
         }
         
+        this.currentList = dir.listFiles();
+        scanner = new FileScanner();
+        scanner.setFiles( currentList );
+        
     }
 
     void updateRuleBase(RuleBase rb, boolean removeExistingPackages) {
-        
+        if (currentList.length != dir.listFiles().length) {
+            currentList = dir.listFiles();
+            scanner = new FileScanner();
+            scanner.setFiles( currentList );
+        }
+        scanner.updateRuleBase( rb, removeExistingPackages );        
     }
 
 }

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	2007-06-21 03:52:07 UTC (rev 12726)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java	2007-06-21 04:28:03 UTC (rev 12727)
@@ -9,6 +9,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import org.drools.RuleBase;
 import org.drools.RuntimeDroolsException;
@@ -33,7 +34,8 @@
      * This sets the list of files to be monitored.
      * This takes a list of paths and files (not directories).
      */
-    void configure(List paths) { 
+    void configure(Properties config) { 
+        List paths = RuleBaseAgent.list( config.getProperty( RuleBaseAgent.FILES ) );
         files = new File[paths.size()];
         for ( int i = 0; i < paths.size(); i++ ) {
             File file = new File( (String) paths.get( i ) );
@@ -43,6 +45,13 @@
             files[i] = file;
         }
     }
+    
+    /**
+     * An alternative way to configure.
+     */
+    void setFiles(File[] files) {
+        this.files = files;
+    }
 
     /**
      * Perform the scan, adding in any packages changed to the rulebase.

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	2007-06-21 03:52:07 UTC (rev 12726)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/PackageProvider.java	2007-06-21 04:28:03 UTC (rev 12727)
@@ -1,6 +1,6 @@
 package org.drools.agent;
 
-import java.util.List;
+import java.util.Properties;
 
 import org.drools.RuleBase;
 
@@ -20,9 +20,9 @@
     
     
     /**
-     * This will be passed a list of configuration strings which were extracted from the config property.
+     * This will be passed the entire config.
      */
-    abstract void configure(List configList);
+    abstract void configure(Properties config);
     
     
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleBaseAgent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleBaseAgent.java	2007-06-21 03:52:07 UTC (rev 12726)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/RuleBaseAgent.java	2007-06-21 04:28:03 UTC (rev 12727)
@@ -1,9 +1,6 @@
 package org.drools.agent;
 
-import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -17,7 +14,6 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.RuntimeDroolsException;
-import org.drools.util.BinaryRuleBaseLoader;
 
 /**
  * This manages a single rulebase, based on the properties given
@@ -31,6 +27,7 @@
  *  <code>file</code>: a space seperated listing of files that make up the 
  *  packages of the rulebase. 
  *  
+ *  <code>dir</code>: a single file system directory to monitor for packages.
  *  ...
  * 
  * @author Michael Neale
@@ -43,7 +40,7 @@
      */
     public static final String NEW_INSTANCE      = "newInstance";
     public static final String FILES             = "file";
-    //public static final String DIRECTORIES = "dir";
+    public static final String DIRECTORY = "dir";
     //public static final String URIS = "uri";
     public static final String POLL_INTERVAL     = "poll";
 
@@ -80,10 +77,9 @@
 
         for ( Iterator iter = config.keySet().iterator(); iter.hasNext(); ) {
             String key = (String) iter.next();
-            if ( key.equals( POLL_INTERVAL ) || key.equals( NEW_INSTANCE ) ) {
-                //already dealt with these
-            } else {
-                providers.add( getProvider( key, config.getProperty( key ) ) );
+            PackageProvider prov = getProvider( key, config );
+            if (prov != null) {
+                providers.add( prov ) ;
             }
         }
 
@@ -93,11 +89,14 @@
     /**
      * Return a configured provider ready to go.
      */
-    private PackageProvider getProvider(String key, String property) {
+    private PackageProvider getProvider(String key, Properties config) {
+        if (!PACKAGE_PROVIDERS.containsKey( key )) {
+            return null; 
+        }
         Class clz = (Class) PACKAGE_PROVIDERS.get( key );
         try {
             PackageProvider prov = (PackageProvider) clz.newInstance();
-            prov.configure( list( property ) );
+            prov.configure( config );
             return prov;
         } catch ( InstantiationException e ) {
             throw new RuntimeDroolsException( "Unable to load up a package provider for " + key,

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	2007-06-21 03:52:07 UTC (rev 12726)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/FileScannerTest.java	2007-06-21 04:28:03 UTC (rev 12727)
@@ -5,6 +5,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
@@ -44,7 +45,9 @@
         RuleBaseAssemblerTest.writePackage( p2, p2f);
         
         FileScanner scan = new FileScanner();
-        scan.configure( Arrays.asList( new String[] {p1f.getPath(), p2f.getPath()}) );
+        Properties props = new Properties();
+        props.setProperty( RuleBaseAgent.FILES, p1f.getPath() + " " + p2f.getPath() );
+        scan.configure( props );
         
         RuleBase rb = RuleBaseFactory.newRuleBase();
         scan.updateRuleBase( rb, true );




More information about the jboss-svn-commits mailing list