[jboss-svn-commits] JBL Code SVN: r25300 - in labs/jbossrules/trunk: drools-ant/src/test/java/org/drools/contrib and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 17 04:04:14 EST 2009


Author: Rikkola
Date: 2009-02-17 04:04:14 -0500 (Tue, 17 Feb 2009)
New Revision: 25300

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
Modified:
   labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java
   labs/jbossrules/trunk/drools-ant/src/test/java/org/drools/contrib/DroolsAntTaskTest.java
   labs/jbossrules/trunk/drools-ant/src/test/resources/DroolsAntTask.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/HttpClientImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/IHttpClient.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/RuleBaseAssemblerTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java
Log:
-Made KnowledgePackageImp externalizable
-Rule agent and ant task working with knowledge packages and bases
-JBRULES-1911: package compiled by the drools-ant task cannot be used by KnowledgeBuilder nor old RuleAgent

Modified: labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java
===================================================================
--- labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsCompilerAntTask.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -16,33 +16,55 @@
 
 package org.drools.contrib;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collection;
+
 import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.taskdefs.MatchingTask;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.RuntimeDroolsException;
-import org.drools.guvnor.client.modeldriven.brl.RuleModel;
-import org.drools.guvnor.server.util.BRDRLPersistence;
-import org.drools.guvnor.server.util.BRXMLPersistence;
+import org.drools.builder.DecisionTableConfiguration;
+import org.drools.builder.DecisionTableInputType;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.decisiontable.InputType;
 import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.definition.KnowledgePackage;
+import org.drools.guvnor.client.modeldriven.brl.RuleModel;
+import org.drools.guvnor.server.util.BRDRLPersistence;
+import org.drools.guvnor.server.util.BRXMLPersistence;
+import org.drools.io.ResourceFactory;
 import org.drools.lang.Expander;
 import org.drools.lang.dsl.DSLMappingFile;
 import org.drools.lang.dsl.DSLTokenizedMappingFile;
 import org.drools.lang.dsl.DefaultExpander;
 import org.drools.lang.dsl.DefaultExpanderResolver;
-import org.drools.rule.Package;
+import org.drools.util.DroolsStreamUtils;
 
-import java.io.*;
-
 /**
  * An ant task to allow rulebase compilation and serialization during a build.
  * 
@@ -50,339 +72,482 @@
  */
 public class DroolsCompilerAntTask extends MatchingTask {
 
-	public static String BRLFILEEXTENSION = ".brl";
-	public static String XMLFILEEXTENSION = ".xml";
-	public static String RULEFLOWFILEEXTENSION = ".rfm";
-	public static String DSLFILEEXTENSION = ".dslr";
-    public static String XLSFILEEXTENSION = ".xls";
-    
-    public static String PACKAGEBINFORMAT = "package";
+    public static String BRLFILEEXTENSION      = ".brl";
+    public static String XMLFILEEXTENSION      = ".xml";
+    public static String RULEFLOWFILEEXTENSION = ".rfm";
+    public static String DSLFILEEXTENSION      = ".dsl";
+    public static String DSLRFILEEXTENSION     = ".dslr";
+    public static String XLSFILEEXTENSION      = ".xls";
 
-    private File srcdir;
-	private File toFile;
-	private Path classpath;
-	
-	private String binformat;
+    public static String PACKAGEBINFORMAT      = "package";
+    public static String PACKAGEBINTYPE        = "knowledge";
 
-	
-	/**
-	 * Source directory to read DRL files from
-	 * 
-	 * @param directory
-	 */
-	public void setSrcDir(File directory) {
-		this.srcdir = directory;
-	}
+    private File         srcdir;
+    private File         toFile;
+    private Path         classpath;
 
-	/**
-	 * File to serialize the rulebase to
-	 * 
-	 * @param toFile
-	 */
-	public void setToFile(File toFile) {
-		this.toFile = toFile;
-	}
+    private String       binformat;
+    private String       bintype;
 
-	/**
-	 * The classpath to use when compiling the rulebase
-	 * 
-	 * @param classpath
-	 */
-	public void setClasspath(Path classpath) {
-		createClasspath().append(classpath);
-	}
+    /**
+     * Source directory to read DRL files from
+     * 
+     * @param directory
+     */
+    public void setSrcDir(File directory) {
+        this.srcdir = directory;
+    }
 
-	/**
-	 * Classpath to use, by reference, when compiling the rulebase
-	 * 
-	 * @param a reference to an existing classpath
-	 */
-	public void setClasspathref(Reference r) {
-		createClasspath().setRefid(r);
-	}
+    /**
+     * File to serialize the rulebase to
+     * 
+     * @param toFile
+     */
+    public void setToFile(File toFile) {
+        this.toFile = toFile;
+    }
 
-	/**
-	 * Adds a path to the classpath.
-	 * 
-	 * @return created classpath
-	 */
-	public Path createClasspath() {
-		if (this.classpath == null) {
-			this.classpath = new Path(getProject());
-		}
-		return this.classpath.createPath();
-	}
+    /**
+     * The classpath to use when compiling the rulebase
+     * 
+     * @param classpath
+     */
+    public void setClasspath(Path classpath) {
+        createClasspath().append( classpath );
+    }
 
-	/**
-	 * Task's main method
-	 */
-	public void execute() throws BuildException {
-		super.execute();
+    /**
+     * Classpath to use, by reference, when compiling the rulebase
+     * 
+     * @param a
+     *            reference to an existing classpath
+     */
+    public void setClasspathref(Reference r) {
+        createClasspath().setRefid( r );
+    }
 
-		// checking parameters are set
-		if (toFile == null) {
-			throw new BuildException(
-					"Destination rulebase file does not specified.");
-		}
+    /**
+     * Adds a path to the classpath.
+     * 
+     * @return created classpath
+     */
+    public Path createClasspath() {
+        if ( this.classpath == null ) {
+            this.classpath = new Path( getProject() );
+        }
+        return this.classpath.createPath();
+    }
 
-		// checking parameters are set
-		if (srcdir == null) {
-			throw new BuildException("Source directory not specified.");
-		}
+    /**
+     * Task's main method
+     */
+    public void execute() throws BuildException {
+        super.execute();
 
-		if (!srcdir.exists()) {
-			throw new BuildException("Source directory does not exists."
-					+ srcdir.getAbsolutePath());
-		}
+        // checking parameters are set
+        if ( toFile == null ) {
+            throw new BuildException( "Destination rulebase file does not specified." );
+        }
 
-		AntClassLoader loader = null;
-		try {
-			// create a specialized classloader
-			loader = getClassLoader();
+        // checking parameters are set
+        if ( srcdir == null ) {
+            throw new BuildException( "Source directory not specified." );
+        }
 
-			// create a package builder configured to use the given classloader
-			PackageBuilder builder = getPackageBuilder(loader);
+        if ( !srcdir.exists() ) {
+            throw new BuildException( "Source directory does not exists." + srcdir.getAbsolutePath() );
+        }
 
-			// get the list of files to be added to the rulebase
-			String[] fileNames = getFileList();
+        AntClassLoader loader = null;
+        try {
+            // create a specialized classloader
+            loader = getClassLoader();
 
-			for (int i = 0; i < fileNames.length; i++) {
-				// compile rule file and add to the builder
-				compileAndAddFile(builder, fileNames[i]);
-			}
-			
-			if ( builder.hasErrors() ) {
-			    System.err.println( builder.getErrors().toString() );
-			}
+            if ( PACKAGEBINTYPE.equals( bintype ) ) {
+                createWithKnowledgeBuilder( loader );
+            } else {
+                createWithPackageBuilder( loader );
+            }
+        } catch ( Exception e ) {
+            throw new BuildException( "RuleBaseTask failed: " + e.getMessage(),
+                                      e );
+        } finally {
+            if ( loader != null ) {
+                loader.resetThreadContextLoader();
+            }
+        }
+    }
 
-			// gets the package
-			org.drools.rule.Package pkg = builder.getPackage();
-			
-            // creates the rulebase
-            RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+    private void createWithKnowledgeBuilder(AntClassLoader loader) throws FileNotFoundException,
+                                                                  DroolsParserException,
+                                                                  IOException {
+        // create a package builder configured to use the given classloader
+        KnowledgeBuilder kbuilder = getKnowledgeBuilder( loader );
 
-            // adds the package
-            ruleBase.addPackage(pkg);
-			
-			
-			if (PACKAGEBINFORMAT.equals( binformat )  ) {
-			    serializeObject( pkg );
-			} else {
-	            // serialize the rule base to the destination file
-	            serializeObject(ruleBase);
-			}
-		} catch (Exception e) {
-			throw new BuildException("RuleBaseTask failed: " + e.getMessage(),
-					e);
-		} finally {
-			if (loader != null) {
-				loader.resetThreadContextLoader();
-			}
-		}
-	}
-	
-	/**
-	 * @param ruleBase
-	 * @throws FileNotFoundException
-	 * @throws IOException
-	 */
-	private void serializeObject(Object object)
-			throws FileNotFoundException, IOException {
-		ObjectOutputStream outstream = null;
-		try {
-			FileOutputStream fout = new FileOutputStream(toFile);
-			outstream = new ObjectOutputStream(fout);
-			outstream.writeObject(object);
-		} finally {
-			if (outstream != null) {
-				outstream.close();
-			}
-		}
-	}
+        // get the list of files to be added to the rulebase
+        String[] fileNames = getFileList();
 
-	/**
-	 * @param builder
-	 * @param fileName
-	 * @return
-	 * @throws FileNotFoundException
-	 * @throws DroolsParserException
-	 * @throws IOException
-	 */
-	private void compileAndAddFile(PackageBuilder builder, String fileName)
-			throws FileNotFoundException, DroolsParserException, IOException {
-		InputStreamReader instream = null;
-        File file = new File(this.srcdir, fileName);
+        for ( int i = 0; i < fileNames.length; i++ ) {
+            // compile rule file and add to the builder
+            compileAndAddFile( kbuilder,
+                               fileNames[i] );
+        }
 
+        if ( kbuilder.hasErrors() ) {
+            System.err.println( kbuilder.getErrors().toString() );
+        }
+
+        // gets the packages
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+        // creates the knowledge base
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+        // adds the packages
+        kbase.addKnowledgePackages( pkgs );
+
+        if ( PACKAGEBINFORMAT.equals( binformat ) ) {
+            serializeObject( pkgs.iterator().next() );
+        } else {
+            // serialize the knowledge base to the destination file
+            serializeObject( kbase );
+        }
+    }
+
+    private void createWithPackageBuilder(AntClassLoader loader) throws FileNotFoundException,
+                                                                DroolsParserException,
+                                                                IOException {
+        // create a package builder configured to use the given classloader
+        PackageBuilder builder = getPackageBuilder( loader );
+
+        // get the list of files to be added to the rulebase
+        String[] fileNames = getFileList();
+
+        for ( int i = 0; i < fileNames.length; i++ ) {
+            // compile rule file and add to the builder
+            compileAndAddFile( builder,
+                               fileNames[i] );
+        }
+
+        if ( builder.hasErrors() ) {
+            System.err.println( builder.getErrors().toString() );
+        }
+
+        // gets the package
+        org.drools.rule.Package pkg = builder.getPackage();
+
+        // creates the rulebase
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+        // adds the package
+        ruleBase.addPackage( pkg );
+
+        if ( PACKAGEBINFORMAT.equals( binformat ) ) {
+            serializeObject( pkg );
+        } else {
+            // serialize the rule base to the destination file
+            serializeObject( ruleBase );
+        }
+    }
+
+    /**
+     * @param ruleBase
+     * @throws FileNotFoundException
+     * @throws IOException
+     */
+    private void serializeObject(Object object) throws FileNotFoundException,
+                                               IOException {
+        FileOutputStream fout = null;
         try {
+            fout = new FileOutputStream( toFile );
+            DroolsStreamUtils.streamOut( fout,
+                                         object );
+        } finally {
+            if ( fout != null ) {
+                fout.close();
+            }
+        }
+    }
 
-			if (fileName.endsWith(DroolsCompilerAntTask.BRLFILEEXTENSION)) {
+    /**
+     * @param builder
+     * @param fileName
+     * @return
+     * @throws FileNotFoundException
+     * @throws DroolsParserException
+     * @throws IOException
+     */
+    private void compileAndAddFile(KnowledgeBuilder kbuilder,
+                                   String fileName) throws FileNotFoundException,
+                                                   DroolsParserException,
+                                                   IOException {
 
-				RuleModel model = BRXMLPersistence.getInstance().unmarshal(
-						loadResource(fileName));
-				String packagefile = loadResource(resolvePackageFile(this.srcdir
-						.getAbsolutePath()));
-				model.name = fileName.replace(DroolsCompilerAntTask.BRLFILEEXTENSION,
-						"");
-				ByteArrayInputStream istream = new ByteArrayInputStream(
-						(packagefile + BRDRLPersistence.getInstance().marshal(
-								model)).getBytes());
-				instream = new InputStreamReader(istream);
+        FileReader fileReader = new FileReader( new File( this.srcdir,
+                                                          fileName ) );
 
-			} else {
-				instream = new InputStreamReader(new FileInputStream(file));
-			}
-            
-            if (fileName.endsWith(DroolsCompilerAntTask.RULEFLOWFILEEXTENSION)) {
-				builder.addRuleFlow(instream);
-			} else if (fileName.endsWith(DroolsCompilerAntTask.XMLFILEEXTENSION)) {
-				builder.addPackageFromXml(instream);
-            } else if (fileName.endsWith(DroolsCompilerAntTask.XLSFILEEXTENSION)) {
+        if ( fileName.endsWith( DroolsCompilerAntTask.BRLFILEEXTENSION ) ) {
 
+            // TODO: Right now I have to first change this to String. Change to
+            // use KnowledgeBuilder directly when the support for that is done.
+            // -Toni Rikkola-
+
+            RuleModel model = BRXMLPersistence.getInstance().unmarshal( loadResource( fileName ) );
+            String packagefile = loadResource( resolvePackageFile( this.srcdir.getAbsolutePath() ) );
+            model.name = fileName.replace( DroolsCompilerAntTask.BRLFILEEXTENSION,
+                                           "" );
+            ByteArrayInputStream istream = new ByteArrayInputStream( (packagefile + BRDRLPersistence.getInstance().marshal( model )).getBytes() );
+
+            Reader instream = new InputStreamReader( istream );
+
+            kbuilder.add( ResourceFactory.newReaderResource( instream ),
+                          ResourceType.DRL );
+
+        } else if ( fileName.endsWith( DroolsCompilerAntTask.RULEFLOWFILEEXTENSION ) ) {
+
+            kbuilder.add( ResourceFactory.newReaderResource( fileReader ),
+                          ResourceType.DRF );
+
+        } else if ( fileName.endsWith( DroolsCompilerAntTask.XMLFILEEXTENSION ) ) {
+            kbuilder.add( ResourceFactory.newReaderResource( fileReader ),
+                          ResourceType.XDRL );
+        } else if ( fileName.endsWith( DroolsCompilerAntTask.XLSFILEEXTENSION ) ) {
+
+            DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory.newDecisionTableConfiguration();
+            dtableconfiguration.setInputType( DecisionTableInputType.XLS );
+
+            kbuilder.add( ResourceFactory.newReaderResource( fileReader ),
+                          ResourceType.DTABLE,
+                          dtableconfiguration );
+
+            // } else if
+            // (fileName.endsWith(DroolsCompilerAntTask.DSLFILEEXTENSION)) {
+            //
+            // kbuilder.add(ResourceFactory.newReaderResource(fileReader),
+            // ResourceType.DSL);
+
+        } else if ( fileName.endsWith( DroolsCompilerAntTask.DSLRFILEEXTENSION ) ) {
+
+            // Get the DSL too.
+            String[] dsls = resolveDSLFilesToArray();
+            for ( int i = 0; i < dsls.length; i++ ) {
+                kbuilder.add( ResourceFactory.newFileResource( new File( this.srcdir,
+                                                                         dsls[i] ) ),
+                              ResourceType.DSL );
+            }
+
+            kbuilder.add( ResourceFactory.newReaderResource( fileReader ),
+                          ResourceType.DSLR );
+
+        } else {
+            kbuilder.add( ResourceFactory.newReaderResource( fileReader ),
+                          ResourceType.DRL );
+        }
+    }
+
+    /**
+     * @param builder
+     * @param fileName
+     * @return
+     * @throws FileNotFoundException
+     * @throws DroolsParserException
+     * @throws IOException
+     */
+    private void compileAndAddFile(PackageBuilder builder,
+                                   String fileName) throws FileNotFoundException,
+                                                   DroolsParserException,
+                                                   IOException {
+        InputStreamReader instream = null;
+        File file = new File( this.srcdir,
+                              fileName );
+
+        try {
+
+            if ( fileName.endsWith( DroolsCompilerAntTask.BRLFILEEXTENSION ) ) {
+
+                RuleModel model = BRXMLPersistence.getInstance().unmarshal( loadResource( fileName ) );
+                String packagefile = loadResource( resolvePackageFile( this.srcdir.getAbsolutePath() ) );
+                model.name = fileName.replace( DroolsCompilerAntTask.BRLFILEEXTENSION,
+                                               "" );
+                ByteArrayInputStream istream = new ByteArrayInputStream( (packagefile + BRDRLPersistence.getInstance().marshal( model )).getBytes() );
+                instream = new InputStreamReader( istream );
+
+            } else {
+                instream = new InputStreamReader( new FileInputStream( file ) );
+            }
+
+            if ( fileName.endsWith( DroolsCompilerAntTask.RULEFLOWFILEEXTENSION ) ) {
+                builder.addRuleFlow( instream );
+            } else if ( fileName.endsWith( DroolsCompilerAntTask.XMLFILEEXTENSION ) ) {
+                builder.addPackageFromXml( instream );
+            } else if ( fileName.endsWith( DroolsCompilerAntTask.XLSFILEEXTENSION ) ) {
+
                 final SpreadsheetCompiler converter = new SpreadsheetCompiler();
-                final String drl = converter.compile( new FileInputStream(file),
+                final String drl = converter.compile( new FileInputStream( file ),
                                                       InputType.XLS );
 
+                System.out.println( drl );
 
-                System.out.println(drl);
+                builder.addPackageFromDrl( new StringReader( drl ) );
 
-                builder.addPackageFromDrl(new StringReader(drl));
+            } else if ( fileName.endsWith( DroolsCompilerAntTask.DSLRFILEEXTENSION ) ) {
+                DrlParser parser = new DrlParser();
+                String expandedDRL = parser.getExpandedDRL( loadResource( fileName ),
+                                                            resolveDSLFiles() );
+                builder.addPackageFromDrl( new StringReader( expandedDRL ) );
+            } else {
+                builder.addPackageFromDrl( instream );
+            }
+        } finally {
+            if ( instream != null ) {
+                instream.close();
+            }
+        }
+    }
 
-            } else if (fileName.endsWith(DroolsCompilerAntTask.DSLFILEEXTENSION)) {
-				DrlParser parser = new DrlParser();
-				String expandedDRL = parser.getExpandedDRL(
-						loadResource(fileName), resolveDSLFiles());
-				builder.addPackageFromDrl(new StringReader(expandedDRL));
-			} else {
-				builder.addPackageFromDrl(instream);
-			}
-		} finally {
-			if (instream != null) {
-				instream.close();
-			}
-		}
-	}
+    private String[] resolveDSLFilesToArray() {
 
-	private DefaultExpanderResolver resolveDSLFiles() throws IOException {
+        Collection<String> list = new ArrayList<String>();
 
-		DefaultExpanderResolver resolver = new DefaultExpanderResolver();
-		final File dir = new File(this.srcdir.getAbsolutePath());
-		DSLMappingFile file = new DSLTokenizedMappingFile();
+        final File dir = new File( this.srcdir.getAbsolutePath() );
 
-		FilenameFilter filter = new FilenameFilter() {
-			public boolean accept(File dir, String name) {
-				return name.endsWith(".dsl");
-			}
-		};
+        FilenameFilter filter = new FilenameFilter() {
+            public boolean accept(File dir,
+                                  String name) {
+                return name.endsWith( ".dsl" );
+            }
+        };
 
-		String[] children = dir.list(filter);
-		if (children.length == 0) {
-			throw new BuildException(
-					"There are no DSL files for this directory:"
-							+ this.srcdir.getAbsolutePath());
-		}
+        return dir.list( filter );
+    }
 
-		for (int index = 0; index < children.length; index++) {
-			if (file.parseAndLoad(new StringReader(loadResource(children[index])))) {
-				final Expander expander = new DefaultExpander();
-				expander.addDSLMapping(file.getMapping());
-				resolver.addExpander("*", expander);
-			} else {
-				throw new RuntimeDroolsException(
-						"Error parsing and loading DSL file."
-								+ file.getErrors());
-			}
-		}
+    private DefaultExpanderResolver resolveDSLFiles() throws IOException {
 
-		return resolver;
-	}
+        DefaultExpanderResolver resolver = new DefaultExpanderResolver();
+        final File dir = new File( this.srcdir.getAbsolutePath() );
+        DSLMappingFile file = new DSLTokenizedMappingFile();
 
-	private String resolvePackageFile(String dirname) {
+        FilenameFilter filter = new FilenameFilter() {
+            public boolean accept(File dir,
+                                  String name) {
+                return name.endsWith( ".dsl" );
+            }
+        };
 
-		File dir = new File(dirname);
-		FilenameFilter filter = new FilenameFilter() {
-			public boolean accept(File dir, String name) {
-				return name.endsWith(".package");
-			}
-		};
+        String[] children = dir.list( filter );
+        if ( children.length == 0 ) {
+            throw new BuildException( "There are no DSL files for this directory:" + this.srcdir.getAbsolutePath() );
+        }
 
-		String[] children = dir.list(filter);
-		if (children.length > 1) {
-			throw new BuildException(
-					"There are more than one package configuration file for this directory :"
-							+ dirname);
-		}
+        for ( int index = 0; index < children.length; index++ ) {
+            if ( file.parseAndLoad( new StringReader( loadResource( children[index] ) ) ) ) {
+                final Expander expander = new DefaultExpander();
+                expander.addDSLMapping( file.getMapping() );
+                resolver.addExpander( "*",
+                                      expander );
+            } else {
+                throw new RuntimeDroolsException( "Error parsing and loading DSL file." + file.getErrors() );
+            }
+        }
 
-		if (children.length == 0) {
-			throw new BuildException(
-					"There is no package configuration file for this directory:"
-							+ dirname);
-		}
+        return resolver;
+    }
 
-		return children[0];
-	}
+    private String resolvePackageFile(String dirname) {
 
-	private String loadResource(final String name) throws IOException {
+        File dir = new File( dirname );
+        FilenameFilter filter = new FilenameFilter() {
+            public boolean accept(File dir,
+                                  String name) {
+                return name.endsWith( ".package" );
+            }
+        };
 
-		final InputStream in = new FileInputStream(this.srcdir + "/" + name);
-		final Reader reader = new InputStreamReader(in);
-		final StringBuffer text = new StringBuffer();
-		final char[] buf = new char[1024];
-		int len = 0;
+        String[] children = dir.list( filter );
+        if ( children.length > 1 ) {
+            throw new BuildException( "There are more than one package configuration file for this directory :" + dirname );
+        }
 
-		while ((len = reader.read(buf)) >= 0) {
-			text.append(buf, 0, len);
-		}
+        if ( children.length == 0 ) {
+            throw new BuildException( "There is no package configuration file for this directory:" + dirname );
+        }
 
-		return text.toString();
-	}
+        return children[0];
+    }
 
-	/**
-	 * @return
-	 */
-	private AntClassLoader getClassLoader() {
-		// defining a new specialized classloader and setting it as the thread
-		// context classloader
-		AntClassLoader loader = null;
-		if (classpath != null) {
-			loader = new AntClassLoader(PackageBuilder.class.getClassLoader(),
-					getProject(), classpath, false);
-		} else {
-			loader = new AntClassLoader(PackageBuilder.class.getClassLoader(),
-					false);
-		}
-		loader.setThreadContextLoader();
-		return loader;
-	}
+    private String loadResource(final String name) throws IOException {
 
-	/**
-	 * @param loader
-	 * @return
-	 */
-	private PackageBuilder getPackageBuilder(AntClassLoader loader) {
-		// creating package builder configured with the give classloader
-		PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
-		conf.setClassLoader(loader);
-		PackageBuilder builder = new PackageBuilder(conf);
-		return builder;
-	}
+        final InputStream in = new FileInputStream( this.srcdir + "/" + name );
+        final Reader reader = new InputStreamReader( in );
+        final StringBuffer text = new StringBuffer();
+        final char[] buf = new char[1024];
+        int len = 0;
 
-	/**
-	 * Returns the list of files to be added into the rulebase
-	 * 
-	 * @return
-	 */
-	private String[] getFileList() {
-		// scan source directory for rule files
-		DirectoryScanner directoryScanner = getDirectoryScanner(srcdir);
-		String[] fileNames = directoryScanner.getIncludedFiles();
+        while ( (len = reader.read( buf )) >= 0 ) {
+            text.append( buf,
+                         0,
+                         len );
+        }
 
-		if (fileNames == null || fileNames.length <= 0) {
-			throw new BuildException(
-					"No rule files found in include directory.");
-		}
-		return fileNames;
-	}
+        return text.toString();
+    }
 
+    /**
+     * @return
+     */
+    private AntClassLoader getClassLoader() {
+        // defining a new specialized classloader and setting it as the thread
+        // context classloader
+        AntClassLoader loader = null;
+        if ( classpath != null ) {
+            loader = new AntClassLoader( PackageBuilder.class.getClassLoader(),
+                                         getProject(),
+                                         classpath,
+                                         false );
+        } else {
+            loader = new AntClassLoader( PackageBuilder.class.getClassLoader(),
+                                         false );
+        }
+        loader.setThreadContextLoader();
+        return loader;
+    }
+
+    /**
+     * @param loader
+     * @return
+     */
+    private PackageBuilder getPackageBuilder(AntClassLoader loader) {
+        // creating package builder configured with the give classloader
+        PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        conf.setClassLoader( loader );
+        PackageBuilder builder = new PackageBuilder( conf );
+        return builder;
+    }
+
+    /**
+     * Returns the list of files to be added into the rulebase
+     * 
+     * @return
+     */
+    private String[] getFileList() {
+        // scan source directory for rule files
+        DirectoryScanner directoryScanner = getDirectoryScanner( srcdir );
+        String[] fileNames = directoryScanner.getIncludedFiles();
+
+        if ( fileNames == null || fileNames.length <= 0 ) {
+            throw new BuildException( "No rule files found in include directory." );
+        }
+        return fileNames;
+    }
+
+    private KnowledgeBuilder getKnowledgeBuilder(AntClassLoader loader) {
+        // creating package builder configured with the give classloader
+        PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
+        conf.setClassLoader( loader );
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( conf );
+        return kbuilder;
+    }
+
     public void setBinformat(String binformat) {
         this.binformat = binformat;
     }
@@ -391,4 +556,12 @@
         return binformat;
     }
 
+    public String getBintype() {
+        return bintype;
+    }
+
+    public void setBintype(String bintype) {
+        this.bintype = bintype;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-ant/src/test/java/org/drools/contrib/DroolsAntTaskTest.java
===================================================================
--- labs/jbossrules/trunk/drools-ant/src/test/java/org/drools/contrib/DroolsAntTaskTest.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-ant/src/test/java/org/drools/contrib/DroolsAntTaskTest.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -16,8 +16,17 @@
 
 package org.drools.contrib;
 
+import java.io.FileInputStream;
+import java.io.IOException;
+
 import junit.framework.Assert;
 
+import org.drools.KnowledgeBase;
+import org.drools.RuleBase;
+import org.drools.definition.KnowledgePackage;
+import org.drools.rule.Package;
+import org.drools.util.DroolsStreamUtils;
+
 /**
  * DroolsAntTask test case
  */
@@ -30,39 +39,84 @@
     public void setUp() {
         configureProject( "src/test/resources/DroolsAntTask.xml" );
     }
-    
+
     public void testVerifierReport() {
         try {
             executeTarget( "verifierreport" );
-        } catch (Exception e) {
+        } catch ( Exception e ) {
             e.printStackTrace();
         }
     }
-        
-    public void testDslRules() {
+
+    public void testDslRules() throws IOException,
+                              ClassNotFoundException {
         try {
             executeTarget( "dslRules" );
         } catch ( Exception e ) {
             e.printStackTrace();
             Assert.fail( "Should not throw any exception: " + e.getMessage() );
         }
+
+        Package p1 = (Package) DroolsStreamUtils.streamIn( new FileInputStream( "target/cheese.rules.dpkg" ) );
+
+        assertNotNull( p1 );
+        assertEquals( 1,
+                      p1.getRules().length );
     }
-    
-    
-    public void testRules() {
+
+    public void testDslRulesKnowledge() throws IOException,
+                                       ClassNotFoundException {
         try {
+            executeTarget( "dslRulesKnowledge" );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            Assert.fail( "Should not throw any exception: " + e.getMessage() );
+        }
+
+        KnowledgePackage kpackage1 = (KnowledgePackage) DroolsStreamUtils.streamIn( new FileInputStream( "target/cheese.rules.dpkg" ) );
+
+        assertNotNull( kpackage1 );
+        assertEquals( 1,
+                      kpackage1.getRules().size() );
+    }
+
+    public void testRules() throws IOException,
+                           ClassNotFoundException {
+        try {
             executeTarget( "rules" );
         } catch ( Exception e ) {
             e.printStackTrace();
             Assert.fail( "Should not throw any exception: " + e.getMessage() );
         }
+
+        RuleBase r1 = (RuleBase) DroolsStreamUtils.streamIn( new FileInputStream( "target/cheese.rules" ) );
+
+        assertNotNull( r1 );
+        assertEquals( 1,
+                      r1.getPackages().length );
     }
 
+    public void testRulesKnowledge() throws IOException,
+                                    ClassNotFoundException {
+        try {
+            executeTarget( "rulesKnowledge" );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            Assert.fail( "Should not throw any exception: " + e.getMessage() );
+        }
+
+        KnowledgeBase kbase = (KnowledgeBase) DroolsStreamUtils.streamIn( new FileInputStream( "target/cheese.rules" ) );
+
+        assertNotNull( kbase );
+        assertEquals( 1,
+                      kbase.getKnowledgePackages().size() );
+    }
+
     public void testNoPackageFile() {
         try {
             executeTarget( "rulesnopackagefile" );
             Assert.fail( "Should throw an exception " );
-        } catch (Exception e) {
+        } catch ( Exception e ) {
             e.printStackTrace();
         }
     }
@@ -71,9 +125,9 @@
         try {
             executeTarget( "rulesmanypackagefile" );
             Assert.fail( "Should throw an exception " );
-        } catch (Exception e) {
+        } catch ( Exception e ) {
             e.printStackTrace();
         }
-    }    
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-ant/src/test/resources/DroolsAntTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-ant/src/test/resources/DroolsAntTask.xml	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-ant/src/test/resources/DroolsAntTask.xml	2009-02-17 09:04:14 UTC (rev 25300)
@@ -1,9 +1,9 @@
 <project default="rules">
 	
 	<!-- Uncomment this for Maven Runner -->
-	<property name="eclipsepath"  value=""/>
+	<property name="eclipsepath"  value=""/> 
 	<!-- Uncomment this for Eclipse Runner  -->
-	<!-- <property name="eclipsepath"  value="../../../"/> -->   
+	<!--<property name="eclipsepath"  value="../../../"/> -->   
 	
 	<path id="cheese.classpath">
 		<pathelement location="${eclipsepath}lib/cheese.jar"/>
@@ -37,6 +37,17 @@
 		</compiler>
 	</target>
 
+	<target name="dslRulesKnowledge" >
+		<compiler 
+			srcdir="${eclipsepath}src/test/resources/rules" 		
+			tofile="${eclipsepath}target/cheese.rules.dpkg"
+			classpathref="cheese.classpath" 
+			binformat="package"
+			bintype="knowledge" > 
+			<include name="*.dslr" />
+		</compiler>
+	</target>
+
 	<target name="rules" >
 		<compiler 
 			srcdir="${eclipsepath}src/test/resources/rules" 		
@@ -49,6 +60,19 @@
 		</compiler>
 	</target>
 	
+	<target name="rulesKnowledge" >
+		<compiler 
+			srcdir="${eclipsepath}src/test/resources/rules" 		
+			tofile="${eclipsepath}target/cheese.rules"
+			classpathref="cheese.classpath"
+			bintype="knowledge" > 
+			<include name="*.drl" />
+			<include name="*.brl" />
+			<include name="*.xml" />
+			<include name="*.dslr" />			
+		</compiler>
+	</target>
+	
 	<target name="rulesnopackagefile" >
 		<compiler 
 			srcdir="${eclipsepath}src/test/resources/packagefiletest/emptydir" 		

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	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/FileScanner.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -9,6 +9,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.drools.definitions.impl.KnowledgePackageImp;
 import org.drools.rule.Package;
 import org.drools.util.DroolsStreamUtils;
 
@@ -20,163 +21,164 @@
  */
 public class FileScanner extends PackageProvider {
 
-	File[] files;
-	Map lastUpdated = new HashMap();
-	Map<String, String> pathToPackage = null;
+    File[]              files;
+    Map                 lastUpdated   = new HashMap();
+    Map<String, String> pathToPackage = null;
 
-	/**
-	 * This sets the list of files to be monitored. This takes a list of paths
-	 * and files (not directories).
-	 */
-	void configure(Properties config) {
-		List paths = RuleAgent.list(config.getProperty(RuleAgent.FILES));
-		files = new File[paths.size()];
-		for (int i = 0; i < paths.size(); i++) {
-			File file = new File((String) paths.get(i));
-			if (!file.exists()) {
-				throw new IllegalArgumentException("The file " + file.getName()
-						+ " does not exist.");
-			}
-			files[i] = file;
-		}
-	}
+    /**
+     * This sets the list of files to be monitored. This takes a list of paths
+     * and files (not directories).
+     */
+    void configure(Properties config) {
+        List paths = RuleAgent.list( config.getProperty( RuleAgent.FILES ) );
+        files = new File[paths.size()];
+        for ( int i = 0; i < paths.size(); i++ ) {
+            File file = new File( (String) paths.get( i ) );
+            if ( !file.exists() ) {
+                throw new IllegalArgumentException( "The file " + file.getName() + " does not exist." );
+            }
+            files[i] = file;
+        }
+    }
 
-	/**
-	 * An alternative way to configure.
-	 */
-	void setFiles(File[] files) {
-		this.files = files;
-	}
+    /**
+     * An alternative way to configure.
+     */
+    void setFiles(File[] files) {
+        this.files = files;
+    }
 
-	/**
-	 * Perform the scan. 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).
-	 */
-	PackageChangeInfo loadPackageChanges() {
-		PackageChangeInfo changes = getChangeSet();
-		return changes;
-	}
+    /**
+     * Perform the scan. 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).
+     */
+    PackageChangeInfo loadPackageChanges() {
+        PackageChangeInfo changes = getChangeSet();
+        return changes;
+    }
 
-	/**
-	 * Calculate a change set, based on last updated times. (keep a map of
-	 * files).
-	 */
-	private PackageChangeInfo getChangeSet() {
-		PackageChangeInfo info = new PackageChangeInfo();
-		if (this.files == null)
-			return info;
+    /**
+     * Calculate a change set, based on last updated times. (keep a map of
+     * files).
+     */
+    private PackageChangeInfo getChangeSet() {
+        PackageChangeInfo info = new PackageChangeInfo();
+        if ( this.files == null ) return info;
 
-		if (pathToPackage == null)
-			pathToPackage = new HashMap<String, String>();
+        if ( pathToPackage == null ) pathToPackage = new HashMap<String, String>();
 
-		for (int i = 0; i < files.length; i++) {
-			File f = files[i];
+        for ( int i = 0; i < files.length; i++ ) {
+            File f = files[i];
 
-			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) {
-					info.addPackage(p);
-					pathToPackage.put(f.getPath(), p.getName());
-				}
-			}
-		}
-		return info;
-	}
+            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 ) {
+                    info.addPackage( p );
+                    pathToPackage.put( f.getPath(),
+                                       p.getName() );
+                }
+            }
+        }
+        return info;
+    }
 
-	/**
-	 * If an exception occurs, it is noted, but ignored. Especially IO, as
-	 * generally they are temporary.
-	 */
-	private Package readPackage(File pkgFile) {
+    /**
+     * If an exception occurs, it is noted, but ignored. Especially IO, as
+     * generally they are temporary.
+     */
+    private Package readPackage(File pkgFile) {
 
-		String name = pkgFile.getName();
-		if (!(name.endsWith(".pkg") || name.endsWith(".drl") || name
-				.endsWith(".xls"))) {
-			return null;
-		}
-		// use reflection to load if its DRL, the provider lives in drools
-		// compiler.
-		if (pkgFile.getName().endsWith(".drl")) {
-			try {
-				FileLoader fl = (FileLoader) Class.forName(
-						"org.drools.compiler.SourcePackageProvider")
-						.newInstance();
-				return fl.loadPackage(pkgFile);
-			} catch (Exception e) {
-				this.listener.exception(e);
-				return null;
-			}
+        String name = pkgFile.getName();
+        if ( !(name.endsWith( ".pkg" ) || name.endsWith( ".drl" ) || name.endsWith( ".xls" )) ) {
+            return null;
+        }
+        // use reflection to load if its DRL, the provider lives in drools
+        // compiler.
+        if ( pkgFile.getName().endsWith( ".drl" ) ) {
+            try {
+                FileLoader fl = (FileLoader) Class.forName( "org.drools.compiler.SourcePackageProvider" ).newInstance();
+                return fl.loadPackage( pkgFile );
+            } catch ( Exception e ) {
+                this.listener.exception( e );
+                return null;
+            }
 
-			// use reflection to load if its XLS, the provider lives in drools
-			// decision tables.
-		} else if (pkgFile.getName().endsWith(".xls")) {
-			try {
-				FileLoader fl = (FileLoader) Class.forName(
-						"org.drools.decisiontable.SourcePackageProvider")
-						.newInstance();
-				return fl.loadPackage(pkgFile);
-			} catch (Exception e) {
-				this.listener.exception(e);
-				return null;
-			}
+            // use reflection to load if its XLS, the provider lives in drools
+            // decision tables.
+        } else if ( pkgFile.getName().endsWith( ".xls" ) ) {
+            try {
+                FileLoader fl = (FileLoader) Class.forName( "org.drools.decisiontable.SourcePackageProvider" ).newInstance();
+                return fl.loadPackage( pkgFile );
+            } catch ( Exception e ) {
+                this.listener.exception( e );
+                return null;
+            }
 
-		} else {
+        } else {
 
-			Package p1_ = null;
-			try {
+            Object o = null;
+            try {
 
-				FileInputStream fis = new FileInputStream(pkgFile);
+                FileInputStream fis = new FileInputStream( pkgFile );
 
-				p1_ = (Package) DroolsStreamUtils.streamIn(fis);
+                o = DroolsStreamUtils.streamIn( fis );
 
-				fis.close();
+                fis.close();
 
-			} catch (FileNotFoundException e) {
-				this.listener.exception(e);
-				this.listener.warning("Was unable to find the file "
-						+ pkgFile.getPath());
-			} catch (IOException e) {
-				this.listener.exception(e);
-			} catch (ClassNotFoundException e) {
-				this.listener.exception(e);
-				this.listener
-						.warning("Was unable to load a class when loading a package. Perhaps it is missing from this application.");
-			}
-			return p1_;
-		}
-	}
+            } catch ( FileNotFoundException e ) {
+                this.listener.exception( e );
+                this.listener.warning( "Was unable to find the file " + pkgFile.getPath() );
+            } catch ( IOException e ) {
+                this.listener.exception( e );
+            } catch ( ClassNotFoundException e ) {
+                this.listener.exception( e );
+                this.listener.warning( "Was unable to load a class when loading a package. Perhaps it is missing from this application." );
+            }
 
-	boolean hasChanged(String path, Map updates, long fileLastModified) {
+            if ( o instanceof KnowledgePackageImp ) {
+                return ((KnowledgePackageImp) o).pkg;
+            } else {
+                return (Package) o;
+            }
+        }
+    }
 
-		if (!updates.containsKey(path)) {
-			updates.put(path, new Long(fileLastModified));
-			return true;
-		} else {
-			Long last = (Long) updates.get(path);
-			if (last.longValue() < fileLastModified) {
-				updates.put(path, new Long(fileLastModified));
-				return true;
-			} else {
-				return false;
-			}
-		}
+    boolean hasChanged(String path,
+                       Map updates,
+                       long fileLastModified) {
 
-	}
+        if ( !updates.containsKey( path ) ) {
+            updates.put( path,
+                         new Long( fileLastModified ) );
+            return true;
+        } else {
+            Long last = (Long) updates.get( path );
+            if ( last.longValue() < fileLastModified ) {
+                updates.put( path,
+                             new Long( fileLastModified ) );
+                return true;
+            } else {
+                return false;
+            }
+        }
 
-	public String toString() {
-		StringBuffer buf = new StringBuffer();
-		buf.append("FileScanner scanning: ");
-		for (int i = 0; i < files.length; i++) {
-			File f = files[i];
-			buf.append(f.getPath() + " ");
-		}
-		return buf.toString();
-	}
+    }
 
+    public String toString() {
+        StringBuffer buf = new StringBuffer();
+        buf.append( "FileScanner scanning: " );
+        for ( int i = 0; i < files.length; i++ ) {
+            File f = files[i];
+            buf.append( f.getPath() + " " );
+        }
+        return buf.toString();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/HttpClientImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/HttpClientImpl.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/HttpClientImpl.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -5,10 +5,13 @@
 import java.net.URL;
 import java.net.URLConnection;
 
+import org.drools.definitions.impl.KnowledgePackageImp;
 import org.drools.rule.Package;
 import org.drools.util.DroolsStreamUtils;
 
-public class HttpClientImpl implements IHttpClient {
+public class HttpClientImpl
+    implements
+    IHttpClient {
 
     public LastUpdatedPing checkLastUpdated(URL url) throws IOException {
         URLConnection con = url.openConnection();
@@ -16,19 +19,18 @@
         try {
             httpCon.setRequestMethod( "HEAD" );
 
-
             String lm = httpCon.getHeaderField( "lastModified" );
             LastUpdatedPing ping = new LastUpdatedPing();
 
             ping.responseMessage = httpCon.getHeaderFields().toString();
 
-            if (lm != null) {
+            if ( lm != null ) {
                 ping.lastUpdated = Long.parseLong( lm );
             } else {
-            	long httpLM = httpCon.getLastModified();
-            	if (httpLM > 0) {
-            		ping.lastUpdated = httpLM;
-            	}
+                long httpLM = httpCon.getLastModified();
+                if ( httpLM > 0 ) {
+                    ping.lastUpdated = httpLM;
+                }
             }
 
             return ping;
@@ -38,14 +40,20 @@
 
     }
 
-    public Package fetchPackage(URL url) throws IOException, ClassNotFoundException {
+    public Package fetchPackage(URL url) throws IOException,
+                                        ClassNotFoundException {
         URLConnection con = url.openConnection();
         HttpURLConnection httpCon = (HttpURLConnection) con;
         try {
             httpCon.setRequestMethod( "GET" );
 
-            return (Package) DroolsStreamUtils.streamIn(httpCon.getInputStream());
+            Object o = DroolsStreamUtils.streamIn( httpCon.getInputStream() );
 
+            if ( o instanceof KnowledgePackageImp ) {
+                return ((KnowledgePackageImp) o).pkg;
+            } else {
+                return (Package) o;
+            }
         } finally {
             httpCon.disconnect();
         }
@@ -53,16 +61,13 @@
 
     public static void main(String[] args) throws Exception {
         HttpClientImpl cl = new HttpClientImpl();
-        URL url = new URL("http://localhost:8888/org.drools.guvnor.Guvnor/package/com.billasurf.manufacturing.plant/SNAP");
+        URL url = new URL( "http://localhost:8888/org.drools.guvnor.Guvnor/package/com.billasurf.manufacturing.plant/SNAP" );
 
-
         LastUpdatedPing ping = cl.checkLastUpdated( url );
 
-
         Package p = cl.fetchPackage( url );
 
-
-        System.err.println(ping);
+        System.err.println( ping );
         System.err.println( ping.isError() );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/IHttpClient.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/IHttpClient.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/IHttpClient.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.net.URL;
 
+import org.drools.definition.KnowledgePackage;
 import org.drools.rule.Package;
 
 /**
@@ -16,10 +17,10 @@
 public interface IHttpClient {
 
     public LastUpdatedPing checkLastUpdated(URL url) throws IOException;
-    
-    public Package fetchPackage(URL url) throws IOException, ClassNotFoundException;
-    
-    
+
+    public Package fetchPackage(URL url) throws IOException,
+                                        ClassNotFoundException;
+
 }
 
 /**
@@ -28,16 +29,16 @@
  * @author Michael Neale
  */
 class LastUpdatedPing {
-    public long lastUpdated = -1;
+    public long   lastUpdated = -1;
     public String responseMessage;
-    
+
     public boolean isError() {
-        if (lastUpdated == -1) return true;
-        if (responseMessage == null) return true;
-        if (responseMessage.indexOf( "200 OK" ) == -1) return true;
+        if ( lastUpdated == -1 ) return true;
+        if ( responseMessage == null ) return true;
+        if ( responseMessage.indexOf( "200 OK" ) == -1 ) return true;
         return false;
     }
-    
+
     public String toString() {
         return "Last updated: " + lastUpdated + "\n" + "Reponse header: " + responseMessage;
     }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -1,41 +0,0 @@
-package org.drools.definitions.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.drools.definition.KnowledgePackage;
-import org.drools.definition.process.Process;
-import org.drools.definition.rule.Rule;
-import org.drools.definitions.rule.impl.RuleImpl;
-import org.drools.rule.Package;
-
-public class KnowledgePackageImp implements KnowledgePackage {
-	public Package pkg;
-	
-	public KnowledgePackageImp(Package pkg) {
-		this.pkg = pkg;
-	}
-	
-	public String getName() {
-		return this.pkg.getName();
-	}
-	
-    public Collection<Rule> getRules() {
-    	org.drools.rule.Rule[] rules = pkg.getRules();
-    	List<Rule> list = new ArrayList<Rule>( rules.length );
-    	for( org.drools.rule.Rule rule : rules ) {
-    		list.add( new RuleImpl( rule ) );
-    	}
-    	return list;
-    }
-    
-    public Collection<Process> getProcesses() {
-    	Collection<org.drools.definition.process.Process> processes = ( Collection<org.drools.definition.process.Process> ) pkg.getRuleFlows().values();
-    	List<Process> list = new ArrayList<Process>( processes.size() );
-    	for( org.drools.definition.process.Process process : processes ) {
-    		list.add( process );
-    	}
-    	return list;
-    }
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java (from rev 25235, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -0,0 +1,62 @@
+package org.drools.definitions.impl;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.definition.rule.Rule;
+import org.drools.definitions.rule.impl.RuleImpl;
+import org.drools.rule.Package;
+
+public class KnowledgePackageImp
+    implements
+    KnowledgePackage,
+    Externalizable {
+    public Package pkg;
+
+    public KnowledgePackageImp() {
+        this.pkg = null;
+    }
+
+    public KnowledgePackageImp(Package pkg) {
+        this.pkg = pkg;
+    }
+
+    public String getName() {
+        return this.pkg.getName();
+    }
+
+    public Collection<Rule> getRules() {
+        org.drools.rule.Rule[] rules = pkg.getRules();
+        List<Rule> list = new ArrayList<Rule>( rules.length );
+        for ( org.drools.rule.Rule rule : rules ) {
+            list.add( new RuleImpl( rule ) );
+        }
+        return list;
+    }
+
+    public Collection<Process> getProcesses() {
+        Collection<org.drools.definition.process.Process> processes = (Collection<org.drools.definition.process.Process>) pkg.getRuleFlows().values();
+        List<Process> list = new ArrayList<Process>( processes.size() );
+        for ( org.drools.definition.process.Process process : processes ) {
+            list.add( process );
+        }
+        return list;
+    }
+
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        this.pkg = new Package();
+        this.pkg.readExternal( in );
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        this.pkg.writeExternal( out );
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/definitions/impl/KnowledgePackageImp.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

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	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleAgentTest.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -16,6 +16,8 @@
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseConfiguration.SequentialAgenda;
 import org.drools.common.InternalRuleBase;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
 import org.drools.rule.Package;
 
 public class RuleAgentTest extends TestCase {
@@ -101,6 +103,44 @@
 
     }
 
+    public void testFilesWithKnowledgePackage() throws Exception {
+        File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+        KnowledgePackage kpackage1 = new KnowledgePackageImp( new Package( "p1" ) );
+        File p1f = new File( dir,
+                             "p1.pkg" );
+        RuleBaseAssemblerTest.writePackage( kpackage1,
+                                            p1f );
+
+        KnowledgePackage kpackage2 = new KnowledgePackageImp( new Package( "p2" ) );
+        File p2f = new File( dir,
+                             "p2.pkg" );
+        RuleBaseAssemblerTest.writePackage( kpackage2,
+                                            p2f );
+
+        String path = dir.getPath() + "/" + "p1.pkg " + dir.getPath() + "/" + "p2.pkg";
+
+        Properties props = new Properties();
+        props.setProperty( "file",
+                           path );
+        RuleAgent ag = RuleAgent.newRuleAgent( props );
+        RuleBase rb = ag.getRuleBase();
+        assertNotNull( rb );
+        assertEquals( 2,
+                      rb.getPackages().length );
+
+        assertFalse( ag.isPolling() );
+
+        props.setProperty( "poll",
+                           "1" );
+        ag = RuleAgent.newRuleAgent( props );
+        assertTrue( ag.isPolling() );
+
+        ag.stopPolling();
+        assertFalse( ag.isPolling() );
+
+    }
+
     //    public void testSpaces() throws Exception {
     //        File dir = RuleBaseAssemblerTest.getTempDirectory();
     //        File dir_ = new File(dir, "whee waah");
@@ -270,66 +310,130 @@
                     rb__ );
 
     }
-    
-//    // FIXME - for some reason failing on hudson
-//    public void FIXME_testPollingFilesRuleBaseReplace2() 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" );
-//        
-//        props.setProperty( "poll", "1" );
-//        
-//        KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "agent1", props );
-//        
-//        KnowledgeBase kbase = kagent.getKnowledgeBase();
-//        
-//        assertEquals( 2,
-//                      kbase.getKnowledgePackages().size() );        
-//
-//        KnowledgeBase kbase_ = kagent.getKnowledgeBase();
-//        assertSame( kbase,
-//                    kbase_ );
-//
-//        //only change one
-//        RuleBaseAssemblerTest.writePackage( p1,
-//                                            p1f );
-//        int i = 0;
-//        while ( i < 20 && kagent.getKnowledgeBase() == kbase ) {
-//            // this will sleep for a max of 10 seconds, it'll check every 500ms to see if a new kbase exists
-//            // if it exists, it will break the loop.
-//            Thread.sleep( 500 );
-//            i++;
-//        }
-//        
-//        kbase_ = kagent.getKnowledgeBase();
-//        assertNotSame( kbase,
-//                    kbase_ );
-//
-//        //check we will have 2
-//        assertEquals( 2,
-//                      kbase.getKnowledgePackages().size() );
-//
-//    }    
 
+    public void testPollingFilesRuleBaseReplaceWithKnowledgePackages() throws Exception {
+        File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+        KnowledgePackage kpackage1 = new KnowledgePackageImp( new Package( "p1" ) );
+        File p1f = new File( dir,
+                             "p43_.pkg" );
+        RuleBaseAssemblerTest.writePackage( kpackage1,
+                                            p1f );
+
+        KnowledgePackage kpackage2 = new KnowledgePackageImp( new Package( "p2" ));
+        File p2f = new File( dir,
+                             "p44_.pkg" );
+        RuleBaseAssemblerTest.writePackage( kpackage2,
+                                            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 );
+
+        RuleBase rb_ = ag.getRuleBase();
+        assertSame( rb,
+                    rb_ );
+
+        ag.refreshRuleBase();
+
+        assertSame( rb,
+                    ag.getRuleBase() );
+        Thread.sleep( 1000 );
+        //only change one
+        RuleBaseAssemblerTest.writePackage( kpackage1,
+                                            p1f );
+        Thread.sleep( 1000 );
+        ag.refreshRuleBase();
+
+        rb_ = ag.getRuleBase();
+
+        assertNotSame( rb,
+                       rb_ );
+
+        //check we will have 2
+        assertEquals( 2,
+                      rb_.getPackages().length );
+
+        ag.refreshRuleBase();
+        ag.refreshRuleBase();
+
+        RuleBase rb__ = ag.getRuleBase();
+        assertSame( rb_,
+                    rb__ );
+
+    }
+
+    //    // FIXME - for some reason failing on hudson
+    //    public void FIXME_testPollingFilesRuleBaseReplace2() 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" );
+    //        
+    //        props.setProperty( "poll", "1" );
+    //        
+    //        KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "agent1", props );
+    //        
+    //        KnowledgeBase kbase = kagent.getKnowledgeBase();
+    //        
+    //        assertEquals( 2,
+    //                      kbase.getKnowledgePackages().size() );        
+    //
+    //        KnowledgeBase kbase_ = kagent.getKnowledgeBase();
+    //        assertSame( kbase,
+    //                    kbase_ );
+    //
+    //        //only change one
+    //        RuleBaseAssemblerTest.writePackage( p1,
+    //                                            p1f );
+    //        int i = 0;
+    //        while ( i < 20 && kagent.getKnowledgeBase() == kbase ) {
+    //            // this will sleep for a max of 10 seconds, it'll check every 500ms to see if a new kbase exists
+    //            // if it exists, it will break the loop.
+    //            Thread.sleep( 500 );
+    //            i++;
+    //        }
+    //        
+    //        kbase_ = kagent.getKnowledgeBase();
+    //        assertNotSame( kbase,
+    //                    kbase_ );
+    //
+    //        //check we will have 2
+    //        assertEquals( 2,
+    //                      kbase.getKnowledgePackages().size() );
+    //
+    //    }    
+
     public void testPollingFilesRuleBaseRemoveNewInstanceFalse() throws Exception {
         File dir = RuleBaseAssemblerTest.getTempDirectory();
 
@@ -570,19 +674,19 @@
             public void debug(String message,
                               Object object) {
                 // TODO Auto-generated method stub
-                
+
             }
 
             public void info(String message,
                              Object object) {
                 // TODO Auto-generated method stub
-                
+
             }
 
             public void warning(String message,
                                 Object object) {
                 // TODO Auto-generated method stub
-                
+
             }
         };
 
@@ -778,19 +882,19 @@
         public void debug(String message,
                           Object object) {
             // TODO Auto-generated method stub
-            
+
         }
 
         public void info(String message,
                          Object object) {
             // TODO Auto-generated method stub
-            
+
         }
 
         public void warning(String message,
                             Object object) {
             // TODO Auto-generated method stub
-            
+
         }
 
     }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/RuleBaseAssemblerTest.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -13,56 +13,71 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassFieldAccessorCache;
+import org.drools.definition.KnowledgePackage;
 import org.drools.rule.Package;
 import org.drools.util.DroolsStreamUtils;
 
 public class RuleBaseAssemblerTest extends TestCase {
 
-
     public void testAssemblePackages() throws Exception {
         RuleBase rb = RuleBaseFactory.newRuleBase();
-        Package pkg = new Package("goober");
+        Package pkg = new Package( "goober" );
         pkg.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
         rb.addPackage( pkg );
 
-        Package p1 = new Package("p1");
+        Package p1 = new Package( "p1" );
         p1.setClassFieldAccessorCache( new ClassFieldAccessorCache( Thread.currentThread().getContextClassLoader() ) );
-        
+
         File f = getTempDirectory();
 
-        File p1file = new File(f, "p1.pkg");
+        File p1file = new File( f,
+                                "p1.pkg" );
 
-        writePackage( p1, p1file );
+        writePackage( p1,
+                      p1file );
 
         Package p1_ = readPackage( p1file );
 
         rb = RuleBaseFactory.newRuleBase();
         rb.addPackage( p1_ );
 
-
     }
 
     public static Package readPackage(File p1file) throws IOException,
-                                                          FileNotFoundException,
-                                                          ClassNotFoundException {
-        return (Package) DroolsStreamUtils.streamIn(new FileInputStream(p1file));
+                                                  FileNotFoundException,
+                                                  ClassNotFoundException {
+        return (Package) DroolsStreamUtils.streamIn( new FileInputStream( p1file ) );
     }
 
-    public static void writePackage(Package pkg, File p1file) throws IOException,
-                                                                     FileNotFoundException {
-        FileOutputStream out = new FileOutputStream(p1file);
+    public static void writePackage(Package pkg,
+                                    File p1file) throws IOException,
+                                                FileNotFoundException {
+        FileOutputStream out = new FileOutputStream( p1file );
         try {
-            DroolsStreamUtils.streamOut( out, pkg );
+            DroolsStreamUtils.streamOut( out,
+                                         pkg );
         } finally {
             out.close();
         }
     }
 
+    public static void writePackage(KnowledgePackage kpackage,
+                                    File p1file) throws IOException,
+                                                FileNotFoundException {
+        FileOutputStream out = new FileOutputStream( p1file );
+        try {
+            DroolsStreamUtils.streamOut( out,
+                                         kpackage );
+        } finally {
+            out.close();
+        }
+    }
+
     public static File getTempDirectory() {
         File f = tempDir();
-        if (f.exists()) {
-            if (f.isFile()) {
-                throw new IllegalStateException("The temp directory exists as a file. Nuke it now !");
+        if ( f.exists() ) {
+            if ( f.isFile() ) {
+                throw new IllegalStateException( "The temp directory exists as a file. Nuke it now !" );
             }
             deleteDir( f );
             f.mkdir();
@@ -73,19 +88,21 @@
     }
 
     private static File tempDir() {
-        File tmp = new File(System.getProperty( "java.io.tmpdir" ));
+        File tmp = new File( System.getProperty( "java.io.tmpdir" ) );
 
-        return new File(tmp, "__temp_test_drools_packages");
+        return new File( tmp,
+                         "__temp_test_drools_packages" );
     }
 
     public static boolean deleteDir(File dir) {
 
-        if (dir.isDirectory()) {
+        if ( dir.isDirectory() ) {
             String[] children = dir.list();
-            for (String child : children) {
-                File file = new File(dir, child);
+            for ( String child : children ) {
+                File file = new File( dir,
+                                      child );
                 boolean success = deleteDir( file );
-                if (!success) {                    
+                if ( !success ) {
                     // this is a hack, but some time you need to wait for a file release to release
                     // Windows was having intermittent issues with DirectoryScannerTest with the dir not being empty
                     System.gc();
@@ -95,7 +112,7 @@
                         throw new RuntimeException( "This should never happen" );
                     }
                     success = deleteDir( file );
-                    if ( !success) {
+                    if ( !success ) {
                         //ok now give up 
                         //throw new RuntimeException("Unable to delete !");
                         return false;
@@ -119,16 +136,14 @@
      *
      * @return a non-null test suite.
      */
-    public static Test suite()
-    {
-      return new TestSuite(RuleBaseAssemblerTest.class);
+    public static Test suite() {
+        return new TestSuite( RuleBaseAssemblerTest.class );
     }
 
     /**
      * Run the test case.
      */
-    public static void main(String args[])
-    {
-      RuleBaseAssemblerTest.suite();
+    public static void main(String args[]) {
+        RuleBaseAssemblerTest.suite();
     }
 }

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	2009-02-17 08:18:52 UTC (rev 25299)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/agent/URLScannerTest.java	2009-02-17 09:04:14 UTC (rev 25300)
@@ -12,6 +12,8 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.common.DroolsObjectInputStream;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
 import org.drools.rule.Package;
 
 public class URLScannerTest extends TestCase {
@@ -20,22 +22,48 @@
         File dir = RuleBaseAssemblerTest.getTempDirectory();
 
         String url = "http://localhost:8080/foo/bar.bar/packages/IMINYRURL/LATEST";
-        String fileName = URLEncoder.encode( url, "UTF-8" );
+        String fileName = URLEncoder.encode( url,
+                                             "UTF-8" );
 
         File f = new File( dir,
                            fileName );
 
         Package p = new Package( "x" );
 
-        RuleBaseAssemblerTest.writePackage( p, f );
+        RuleBaseAssemblerTest.writePackage( p,
+                                            f );
 
         DroolsObjectInputStream in = new DroolsObjectInputStream( new FileInputStream( f ) );
         Package p_ = (Package) in.readObject();
         in.close();
-        assertEquals( "x", p_.getName() );
+        assertEquals( "x",
+                      p_.getName() );
 
     }
 
+    public void testFileURLCacheWithKnowledgePackage() throws Exception {
+        File dir = RuleBaseAssemblerTest.getTempDirectory();
+
+        String url = "http://localhost:8080/foo/bar.bar/packages/IMINYRURL/LATEST";
+        String fileName = URLEncoder.encode( url,
+                                             "UTF-8" );
+
+        File f = new File( dir,
+                           fileName );
+
+        KnowledgePackage kpackage = new KnowledgePackageImp( new Package( "x" ) );
+
+        RuleBaseAssemblerTest.writePackage( kpackage,
+                                            f );
+
+        DroolsObjectInputStream in = new DroolsObjectInputStream( new FileInputStream( f ) );
+        KnowledgePackage p_ = (KnowledgePackage) in.readObject();
+        in.close();
+        assertEquals( "x",
+                      p_.getName() );
+
+    }
+
     //    public void testGetURL() throws Exception {
     //        String url = "http://localhost:8080/foo/bar.bar/packages/IMINYRURL/LATEST";
     //        URL u = new URL(url);
@@ -51,15 +79,20 @@
         URLScanner scan = new URLScanner();
 
         File dir = RuleBaseAssemblerTest.getTempDirectory();
-        File[] result = scan.getFiles( new URL[]{u1, u2}, dir );
+        File[] result = scan.getFiles( new URL[]{u1, u2},
+                                       dir );
 
-        assertEquals( 2, result.length );
-        assertEquals( dir.getPath(), result[0].getParent() );
+        assertEquals( 2,
+                      result.length );
+        assertEquals( dir.getPath(),
+                      result[0].getParent() );
 
         File f1 = result[0];
         File f2 = result[1];
-        assertEquals( "http%3A%2F%2Flocalhost%3A8080%2Ffoo%2Fbar.bar%2Fpackages%2FIMINYRURL%2FLATEST.pkg", f1.getName() );
-        assertEquals( "http%3A%2F%2Flocalhost%3A8080%2Ffoo%2Fbar.bar%2Fpackages%2FIMINYRURL%2FPROD.pkg", f2.getName() );
+        assertEquals( "http%3A%2F%2Flocalhost%3A8080%2Ffoo%2Fbar.bar%2Fpackages%2FIMINYRURL%2FLATEST.pkg",
+                      f1.getName() );
+        assertEquals( "http%3A%2F%2Flocalhost%3A8080%2Ffoo%2Fbar.bar%2Fpackages%2FIMINYRURL%2FPROD.pkg",
+                      f2.getName() );
 
     }
 
@@ -69,21 +102,29 @@
         File dir = RuleBaseAssemblerTest.getTempDirectory();
 
         Properties config = new Properties();
-        config.setProperty( RuleAgent.LOCAL_URL_CACHE, dir.getPath() );
-        config.setProperty( RuleAgent.URLS, "http://goo.ber http://wee.waa" );
+        config.setProperty( RuleAgent.LOCAL_URL_CACHE,
+                            dir.getPath() );
+        config.setProperty( RuleAgent.URLS,
+                            "http://goo.ber http://wee.waa" );
 
         scan.configure( config );
 
         assertNotNull( scan.lastUpdated );
-        assertEquals( 2, scan.urls.length );
-        assertEquals( "http://goo.ber", scan.urls[0].toExternalForm() );
-        assertEquals( "http://wee.waa", scan.urls[1].toExternalForm() );
+        assertEquals( 2,
+                      scan.urls.length );
+        assertEquals( "http://goo.ber",
+                      scan.urls[0].toExternalForm() );
+        assertEquals( "http://wee.waa",
+                      scan.urls[1].toExternalForm() );
         assertNotNull( scan.localCacheFileScanner );
 
-        assertEquals( 2, scan.localCacheFileScanner.files.length );
+        assertEquals( 2,
+                      scan.localCacheFileScanner.files.length );
 
-        assertEquals( "http%3A%2F%2Fgoo.ber.pkg", scan.localCacheFileScanner.files[0].getName() );
-        assertEquals( "http%3A%2F%2Fwee.waa.pkg", scan.localCacheFileScanner.files[1].getName() );
+        assertEquals( "http%3A%2F%2Fgoo.ber.pkg",
+                      scan.localCacheFileScanner.files[0].getName() );
+        assertEquals( "http%3A%2F%2Fwee.waa.pkg",
+                      scan.localCacheFileScanner.files[1].getName() );
 
     }
 
@@ -103,10 +144,10 @@
 
         int numfiles = dir.list().length;
 
-
         Properties config = new Properties();
         //config.setProperty( RuleAgent.LOCAL_URL_CACHE, dir.getPath() );
-        config.setProperty( RuleAgent.URLS, "http://goo2.ber http://wee2.waa" );
+        config.setProperty( RuleAgent.URLS,
+                            "http://goo2.ber http://wee2.waa" );
 
         scan.configure( config );
 
@@ -134,34 +175,38 @@
 
         RuleBase rb = RuleBaseFactory.newRuleBase();
         AgentEventListener list = getNilListener();
-        PackageProvider.applyChanges( rb, false, scan.loadPackageChanges().getChangedPackages(), list );
+        PackageProvider.applyChanges( rb,
+                                      false,
+                                      scan.loadPackageChanges().getChangedPackages(),
+                                      list );
 
+        assertEquals( 2,
+                      rb.getPackages().length );
 
-        assertEquals( 2, rb.getPackages().length );
+        assertExists( new String[]{"goo2.ber", "wee2.waa"},
+                      rb.getPackages() );
 
-        assertExists(new String[] {"goo2.ber", "wee2.waa"}, rb.getPackages());
-
-
-
-        assertEquals( numfiles, dir.list().length );
+        assertEquals( numfiles,
+                      dir.list().length );
     }
 
-
-
     private AgentEventListener getNilListener() {
         return new MockListener();
     }
 
-    private void assertExists(String[] names, Package[] packages) {
+    private void assertExists(String[] names,
+                              Package[] packages) {
         for ( int i = 0; i < packages.length; i++ ) {
             String name = packages[i].getName();
             int matches = 0;
             for ( int j = 0; j < names.length; j++ ) {
-                if (name.equals( names[j] )) {
+                if ( name.equals( names[j] ) ) {
                     matches++;
                 }
             }
-            assertEquals("Should only have one package named " + name, 1, matches);
+            assertEquals( "Should only have one package named " + name,
+                          1,
+                          matches );
         }
 
     }
@@ -172,8 +217,10 @@
         File dir = RuleBaseAssemblerTest.getTempDirectory();
 
         Properties config = new Properties();
-        config.setProperty( RuleAgent.LOCAL_URL_CACHE, dir.getPath() );
-        config.setProperty( RuleAgent.URLS, "http://goo.ber http://wee.waa" );
+        config.setProperty( RuleAgent.LOCAL_URL_CACHE,
+                            dir.getPath() );
+        config.setProperty( RuleAgent.URLS,
+                            "http://goo.ber http://wee.waa" );
 
         scan.configure( config );
 
@@ -200,13 +247,16 @@
         assertNotNull( scan.localCacheDir );
 
         RuleBase rb = RuleBaseFactory.newRuleBase();
-        PackageProvider.applyChanges( rb, false, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
+        PackageProvider.applyChanges( rb,
+                                      false,
+                                      scan.loadPackageChanges().getChangedPackages(),
+                                      getNilListener() );
 
+        assertEquals( 2,
+                      rb.getPackages().length );
+        assertTrue( "goo.ber".equals( rb.getPackages()[0].getName() ) || "goo.ber".equals( rb.getPackages()[1].getName() ) );
+        assertTrue( "wee.waa".equals( rb.getPackages()[0].getName() ) || "wee.waa".equals( rb.getPackages()[1].getName() ) );
 
-        assertEquals( 2, rb.getPackages().length );
-        assertTrue("goo.ber".equals(rb.getPackages()[0].getName()) || "goo.ber".equals(rb.getPackages()[1].getName()));
-        assertTrue("wee.waa".equals(rb.getPackages()[0].getName()) || "wee.waa".equals(rb.getPackages()[1].getName()));
-
         //assertEquals( 2, dir.list().length );
 
         //now check with failures:
@@ -215,7 +265,7 @@
             public LastUpdatedPing checkLastUpdated(URL url) throws IOException {
                 LastUpdatedPing ping = new LastUpdatedPing();
 
-                if (url.toExternalForm().equals( "http://wee.waa" )) {
+                if ( url.toExternalForm().equals( "http://wee.waa" ) ) {
                     ping.lastUpdated = -1;
                     ping.responseMessage = "XXX";
 
@@ -227,16 +277,21 @@
             }
 
             public Package fetchPackage(URL url) throws IOException {
-                throw new IOException("poo");
+                throw new IOException( "poo" );
             }
 
         };
 
         rb = RuleBaseFactory.newRuleBase();
-        assertEquals(0, rb.getPackages().length);
-        PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
+        assertEquals( 0,
+                      rb.getPackages().length );
+        PackageProvider.applyChanges( rb,
+                                      true,
+                                      scan.loadPackageChanges().getChangedPackages(),
+                                      getNilListener() );
 
-        assertEquals(2, rb.getPackages().length);
+        assertEquals( 2,
+                      rb.getPackages().length );
 
         final boolean[] fetchCalled = new boolean[1];
 
@@ -254,15 +309,18 @@
 
             public Package fetchPackage(URL url) throws IOException {
                 fetchCalled[0] = true;
-                throw new IOException("poo");
+                throw new IOException( "poo" );
             }
 
         };
 
         PackageChangeInfo changes = scan.loadPackageChanges();
-        assertEquals(0, changes.getChangedPackages().size());
-        assertEquals(true, fetchCalled[0]);
-        assertEquals(2, ((MockListener)scan.listener).exceptions.size());
+        assertEquals( 0,
+                      changes.getChangedPackages().size() );
+        assertEquals( true,
+                      fetchCalled[0] );
+        assertEquals( 2,
+                      ((MockListener) scan.listener).exceptions.size() );
 
     }
 
@@ -272,18 +330,24 @@
         scan.listener = new MockListener();
         File dir = RuleBaseAssemblerTest.getTempDirectory();
 
-        Package p1 = new Package("goo.ber");
-        Package p2 = new Package("wee.waa");
+        Package p1 = new Package( "goo.ber" );
+        Package p2 = new Package( "wee.waa" );
 
-        File f1 = URLScanner.getLocalCacheFileForURL( dir, new URL("http://goo.ber") );
-        File f2 = URLScanner.getLocalCacheFileForURL( dir, new URL("http://wee.waa") );
+        File f1 = URLScanner.getLocalCacheFileForURL( dir,
+                                                      new URL( "http://goo.ber" ) );
+        File f2 = URLScanner.getLocalCacheFileForURL( dir,
+                                                      new URL( "http://wee.waa" ) );
 
-        RuleBaseAssemblerTest.writePackage( p1, f1 );
-        RuleBaseAssemblerTest.writePackage( p2, f2 );
+        RuleBaseAssemblerTest.writePackage( p1,
+                                            f1 );
+        RuleBaseAssemblerTest.writePackage( p2,
+                                            f2 );
 
         Properties config = new Properties();
-        config.setProperty( RuleAgent.LOCAL_URL_CACHE, dir.getPath() );
-        config.setProperty( RuleAgent.URLS, "http://goo.ber http://wee.waa" );
+        config.setProperty( RuleAgent.LOCAL_URL_CACHE,
+                            dir.getPath() );
+        config.setProperty( RuleAgent.URLS,
+                            "http://goo.ber http://wee.waa" );
 
         scan.configure( config );
 
@@ -303,12 +367,13 @@
         assertNotNull( scan.localCacheDir );
 
         RuleBase rb = RuleBaseFactory.newRuleBase();
-        PackageProvider.applyChanges( rb, true, scan.loadPackageChanges().getChangedPackages(), getNilListener() );
-        assertEquals(2, rb.getPackages().length);
+        PackageProvider.applyChanges( rb,
+                                      true,
+                                      scan.loadPackageChanges().getChangedPackages(),
+                                      getNilListener() );
+        assertEquals( 2,
+                      rb.getPackages().length );
 
-
     }
 
-
-
 }




More information about the jboss-svn-commits mailing list