[jboss-svn-commits] JBL Code SVN: r15500 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server/util and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 2 01:04:19 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-10-02 01:04:16 -0400 (Tue, 02 Oct 2007)
New Revision: 15500

Added:
   labs/jbossrules/trunk/drools-jbrms/src/test/resources/org/drools/brms/server/util/sample_legacy_functions.drl
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileManagerUtils.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java
   labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/ClassicDRLImporterTest.java
Log:
JBRULES-1231

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileManagerUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileManagerUtils.java	2007-10-02 04:13:34 UTC (rev 15499)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/files/FileManagerUtils.java	2007-10-02 05:04:16 UTC (rev 15500)
@@ -1,13 +1,13 @@
 package org.drools.brms.server.files;
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -17,14 +17,10 @@
 
 
 
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.URLEncoder;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -36,14 +32,12 @@
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.drools.brms.client.common.AssetFormats;
 import org.drools.brms.client.common.HTMLFileManagerFields;
 import org.drools.brms.server.util.ClassicDRLImporter;
 import org.drools.brms.server.util.FormData;
-import org.drools.brms.server.util.ClassicDRLImporter.Rule;
+import org.drools.brms.server.util.ClassicDRLImporter.Asset;
 import org.drools.compiler.DroolsParserException;
 import org.drools.repository.AssetItem;
-import org.drools.repository.CategoryItem;
 import org.drools.repository.PackageItem;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryException;
@@ -92,7 +86,7 @@
         item.checkin( "Attached file: " + fileName );
     }
 
-    /** 
+    /**
      * The get returns files based on UUID of an asset.
      */
     @Restrict("#{identity.loggedIn}")
@@ -134,7 +128,7 @@
 
     /**
      * Load up the approproate package version.
-     * @param packageName The name of the package. 
+     * @param packageName The name of the package.
      * @param packageVersion The version (if it is a snapshot).
      * @param isLatest true if the latest package binary will be used (ie NOT a snapshot).
      * @return The filename if its all good.
@@ -174,7 +168,7 @@
 
     /**
      * This will import DRL from a drl file into a more normalised structure.
-     * If the package does not exist, it will be created. 
+     * If the package does not exist, it will be created.
      * If it does, it will be "merged" in the sense that any new rules in the drl
      * will be created as new assets in the repo, everything else will stay as it was
      * in the repo.
@@ -195,20 +189,16 @@
         }
 
 
-        for ( Rule rule : imp.getRules() ) {
+        for ( Asset as : imp.getAssets() ) {
 
-            if ( existing && pkg.containsAsset( rule.name ) ) {
+            if ( existing && pkg.containsAsset( as.name ) ) {
                 //skip it
             } else {
 
-                AssetItem asset = pkg.addAsset( rule.name, "<imported>" );
+                AssetItem asset = pkg.addAsset( as.name, "<imported>" );
+                asset.updateFormat(as.format);
 
-                if ( imp.isDSLEnabled() ) {
-                    asset.updateFormat( AssetFormats.DSL_TEMPLATE_RULE );
-                } else {
-                    asset.updateFormat( AssetFormats.DRL );
-                }
-                asset.updateContent( rule.content );
+                asset.updateContent( as.content );
                 asset.updateExternalSource( "Imported from external DRL" );
             }
         }

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java	2007-10-02 04:13:34 UTC (rev 15499)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/ClassicDRLImporter.java	2007-10-02 05:04:16 UTC (rev 15500)
@@ -1,13 +1,13 @@
 package org.drools.brms.server.util;
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -24,7 +24,10 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import org.drools.brms.client.common.AssetFormats;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.lang.descr.FunctionDescr;
@@ -33,7 +36,7 @@
 /**
  * This class imports legacy DRL into a structure suitable for storing more
  * normalised in the repository.
- * 
+ *
  * @author Michael Neale
  */
 public class ClassicDRLImporter {
@@ -42,29 +45,29 @@
 
     private String       packageName;
 
-    private List<Rule>   rules = new ArrayList<Rule>();
+    private List<Asset>   assets = new ArrayList<Asset>();
 
     private StringBuffer header;
 
     private boolean      usesDSL;
 
+	private static Pattern functionPattern = Pattern.compile("function\\s+.*\\s+(.*)\\(.*\\).*");
 
 
-    
     public ClassicDRLImporter(InputStream in) throws IOException, DroolsParserException {
         String line = "";
         StringBuffer drl = new StringBuffer();
         BufferedReader reader = new BufferedReader(new InputStreamReader(in));
         while ( (line = reader.readLine())  != null) {
-            drl.append( "\n" + line);        
+            drl.append( "\n" + line);
         }
         this.source = drl.toString();
-        
+
         parse();
     }
-    
-    
 
+
+
     private void parse() throws DroolsParserException {
         StringTokenizer lines = new StringTokenizer( source,
                                                      "\r\n" );
@@ -78,10 +81,19 @@
             } else if ( line.startsWith( "rule" ) ) {
                 String ruleName = getRuleName( line );
                 StringBuffer currentRule = new StringBuffer();
-                laConsumeToEnd( lines, currentRule );
+                laConsumeToEnd( lines, currentRule, "end" );
                 addRule( ruleName, currentRule );
 
-            }  else if ( line.startsWith( "expander" ) ) {
+            }  else if (line.startsWith("function")) {
+            	String functionName = getFuncName( line );
+            	StringBuffer currentFunc = new StringBuffer();
+            	currentFunc.append(line + "\n");
+            	laConsumeToEnd( lines, currentFunc, "}");
+            	currentFunc.append("}\n");
+            	addFunction( functionName, currentFunc );
+
+            }else if ( line.startsWith( "expander" ) ) {
+
                 usesDSL = true;
             } else {
 
@@ -94,11 +106,25 @@
 
 
 
-    private void laConsumeToEnd(StringTokenizer lines, StringBuffer currentRule) {
+    private void addFunction(String functionName, StringBuffer currentFunc) {
+    	this.assets.add(new Asset(functionName, currentFunc.toString(), AssetFormats.FUNCTION));
+	}
+
+
+
+	private String getFuncName(String line) {
+    	Matcher m = functionPattern.matcher(line);
+    	m.matches();
+    	return m.group(1);
+	}
+
+
+
+	private void laConsumeToEnd(StringTokenizer lines, StringBuffer currentRule, String end) {
         String line;
         while ( true && lines.hasMoreTokens()) {
             line = lines.nextToken();
-            if ( line.trim().startsWith( "end" ) ) {
+            if ( line.trim().startsWith( end ) ) {
                 break;
             }
             currentRule.append( line );
@@ -107,8 +133,13 @@
     }
 
     private void addRule(String ruleName, StringBuffer currentRule) {
-        this.rules.add( new Rule( ruleName,
-                                  currentRule.toString() ) );
+    	if (this.isDSLEnabled()) {
+	        this.assets.add( new Asset( ruleName,
+                    currentRule.toString(), AssetFormats.DSL_TEMPLATE_RULE ));
+    	} else {
+	        this.assets.add( new Asset( ruleName,
+	                                  currentRule.toString(), AssetFormats.DRL ));
+    	}
     }
 
     private String getRuleName(String line) throws DroolsParserException {
@@ -123,11 +154,11 @@
 
     }
 
-    public List<Rule> getRules() {
-        return this.rules;
+    public List<Asset> getAssets() {
+        return this.assets;
     }
-    
 
+
     public String getPackageName() {
         return this.packageName;
     }
@@ -142,20 +173,22 @@
 
     /**
      * Holds a rule to import. The content does not include the "end".
-     * 
+     *
      * @author Michael Neale
      */
-    public static class Rule {
+    public static class Asset {
 
-        public Rule(
-                    String name, String content) {
+		public Asset(
+                    String name, String content, String format) {
             this.name = name;
             this.content = content;
+            this.format = format;
         }
 
+        public String format;
         public String name;
         public String content;
     }
-    
 
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/ClassicDRLImporterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/ClassicDRLImporterTest.java	2007-10-02 04:13:34 UTC (rev 15499)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/ClassicDRLImporterTest.java	2007-10-02 05:04:16 UTC (rev 15500)
@@ -1,13 +1,13 @@
 package org.drools.brms.server.util;
 /*
  * Copyright 2005 JBoss Inc
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,55 +19,92 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import org.drools.brms.client.common.AssetFormats;
+import org.drools.brms.server.util.ClassicDRLImporter.Asset;
+import org.drools.lang.DRLParser;
+
 import junit.framework.TestCase;
 
 public class ClassicDRLImporterTest extends TestCase {
 
-    
-    
+
+
     public void testStandardDRL() throws Exception {
-        
-        
+
+
+
+
         ClassicDRLImporter imp = new ClassicDRLImporter(getDrl("sample_legacy.drl"));
         assertEquals( "foo", imp.getPackageName() );
-        assertEquals(2, imp.getRules().size());
-        
-        assertEquals("blah", imp.getRules().get( 0 ).name);
-        assertEquals("cha", imp.getRules().get( 1 ).name);
-        
+        assertEquals(2, imp.getAssets().size());
+
+        assertEquals("blah", imp.getAssets().get( 0 ).name);
+        assertEquals("cha", imp.getAssets().get( 1 ).name);
+
         System.err.println(imp.getPackageHeader());
-        
+
         assertTrue(imp.getPackageHeader().indexOf( "import goo.wee" ) > -1);
         assertTrue(imp.getPackageHeader().indexOf( "package" ) == -1);
-        
+
         assertFalse(imp.isDSLEnabled());
-        
-        assertEqualsIgnoreWhitespace( "when Whee() then goo();", imp.getRules().get( 0 ).content);
-        assertEqualsIgnoreWhitespace( "when Sup() then ka();", imp.getRules().get( 1 ).content);
-        assertTrue(imp.getRules().get( 0 ).content.indexOf( " Whee()") > -1);
-        
+
+        assertEqualsIgnoreWhitespace( "when Whee() then goo();", imp.getAssets().get( 0 ).content);
+        assertEqualsIgnoreWhitespace( "when Sup() then ka();", imp.getAssets().get( 1 ).content);
+        assertTrue(imp.getAssets().get( 0 ).content.indexOf( " Whee()") > -1);
+
     }
-    
+
+    public void testWithFunction() throws Exception {
+//    	Pattern p = Pattern.compile("function\\s+.*\\s+(.*)\\(.*\\).*");
+//    	Matcher m = p.matcher("function void fooBar() {");
+//    	assertTrue(m.matches());
+//    	System.err.println(m.group());
+//    	assertEquals("fooBar", m.group(1));
+
+    	ClassicDRLImporter imp = new ClassicDRLImporter(getDrl("sample_legacy_functions.drl"));
+    	assertFalse(imp.isDSLEnabled());
+
+    	assertEquals(4, imp.getAssets().size());
+    	assertEquals(AssetFormats.FUNCTION, imp.getAssets().get(0).format);
+    	assertEquals(AssetFormats.FUNCTION, imp.getAssets().get(1).format);
+
+    	assertEquals("goo1", imp.getAssets().get(0).name);
+    	assertEqualsIgnoreWhitespace("function void goo1() { //do something ! { yeah } }", imp.getAssets().get(0).content);
+
+    	assertEquals("goo2", imp.getAssets().get(1).name);
+    	assertEqualsIgnoreWhitespace("function String goo2(String la) { //yeah man ! return \"whee\"; }", imp.getAssets().get(1).content);
+
+    	assertEquals(AssetFormats.DRL, imp.getAssets().get(2).format);
+    	assertEquals(AssetFormats.DRL, imp.getAssets().get(3).format);
+    	assertNotNull(imp.getAssets().get(3).content);
+
+    }
+
     public void testWithDSL() throws Exception {
-        
+
         ClassicDRLImporter imp = new ClassicDRLImporter(getDrl("sample_legacy_with_dsl.drl"));
 
         assertTrue(imp.isDSLEnabled());
-        assertEquals(2, imp.getRules().size());
+        assertEquals(2, imp.getAssets().size());
         assertEquals("foo", imp.getPackageName());
         assertEqualsIgnoreWhitespace( "import goo.wee global ka.cha", imp.getPackageHeader() );
-        
-        assertEqualsIgnoreWhitespace( "when ka chow then bam", imp.getRules().get( 0 ).content );
-        assertEqualsIgnoreWhitespace( "when ka chiga then ka chow", imp.getRules().get( 1 ).content );
-        
-        
+
+        assertEqualsIgnoreWhitespace( "when ka chow then bam", imp.getAssets().get( 0 ).content );
+        assertEqualsIgnoreWhitespace( "when ka chiga then ka chow", imp.getAssets().get( 1 ).content );
+
+
+        Asset as = imp.getAssets().get(0);
+        assertEquals(AssetFormats.DSL_TEMPLATE_RULE, as.format);
+
     }
 
     private InputStream getDrl(String file) throws IOException {
         return this.getClass().getResourceAsStream( file );
     }
-    
+
     private void assertEqualsIgnoreWhitespace(final String expected,
                                               final String actual) {
         final String cleanExpected = expected.replaceAll( "\\s+",
@@ -77,6 +114,6 @@
 
         assertEquals( cleanExpected,
                       cleanActual );
-    }    
-    
+    }
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-jbrms/src/test/resources/org/drools/brms/server/util/sample_legacy_functions.drl
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/resources/org/drools/brms/server/util/sample_legacy_functions.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/resources/org/drools/brms/server/util/sample_legacy_functions.drl	2007-10-02 05:04:16 UTC (rev 15500)
@@ -0,0 +1,28 @@
+package foo
+
+import goo.wee
+
+
+function void goo1() {
+	//do something ! { yeah }
+}
+
+function String goo2(String la) {
+	//yeah man !
+	return "whee";
+}
+
+rule "blah"
+ when
+   Whee()
+ then
+   goo();
+end
+
+
+rule "cha"
+  when
+   Sup()
+  then
+   ka();
+end
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/resources/org/drools/brms/server/util/sample_legacy_functions.drl
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list