[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