[jboss-svn-commits] JBL Code SVN: r6799 - in labs/jbossrules/trunk/drools-ide: . META-INF src/main/java/org/drools/ide src/main/java/org/drools/ide/builder

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Oct 13 17:58:50 EDT 2006


Author: KrisVerlaenen
Date: 2006-10-13 17:58:46 -0400 (Fri, 13 Oct 2006)
New Revision: 6799

Modified:
   labs/jbossrules/trunk/drools-ide/.classpath
   labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
   labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/builder/DroolsBuilder.java
Log:
JBRULES-513: Auto compile of XLS found in rule projects
 - all *.xls files in a Drools Project are parsed and errors are shown as problem markers

Modified: labs/jbossrules/trunk/drools-ide/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-ide/.classpath	2006-10-13 21:33:59 UTC (rev 6798)
+++ labs/jbossrules/trunk/drools-ide/.classpath	2006-10-13 21:58:46 UTC (rev 6799)
@@ -4,6 +4,7 @@
 	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="lib" path="lib/jxl-2.4.2.jar"/>
 	<classpathentry kind="lib" path="lib/xstream-1.1.3.jar"/>
 	<classpathentry kind="lib" path="lib/commons-lang-2.1.jar"/>
 	<classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
@@ -11,5 +12,6 @@
 	<classpathentry kind="lib" path="lib/commons-jci-core-1.0-406301.jar"/>
 	<classpathentry kind="lib" path="lib/drools-compiler.jar"/>
 	<classpathentry kind="lib" path="lib/drools-core.jar"/>
+	<classpathentry kind="lib" path="lib/drools-decisiontables.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF	2006-10-13 21:33:59 UTC (rev 6798)
+++ labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF	2006-10-13 21:58:46 UTC (rev 6799)
@@ -55,4 +55,5 @@
  lib/drools-compiler.jar,
  lib/drools-core.jar,
  lib/drools-decisiontables.jar,
- lib/drools-jsr94.jar
+ lib/drools-jsr94.jar,
+ lib/jxl-2.4.2.jar

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java	2006-10-13 21:33:59 UTC (rev 6798)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DRLInfo.java	2006-10-13 21:58:46 UTC (rev 6799)
@@ -34,6 +34,7 @@
 		this.packageDescr = packageDescr;
 		this.parserErrors =
 			parserErrors == null ? EMPTY_LIST : Collections.unmodifiableList(parserErrors);
+		this.builderErrors = EMPTY_DROOLS_ERROR_ARRAY;
 	}
 
 	public DRLInfo(String pathName, PackageDescr packageDescr, List parserErrors, Package compiledPackage, DroolsError[] builderErrors) {

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java	2006-10-13 21:33:59 UTC (rev 6798)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/DroolsIDEPlugin.java	2006-10-13 21:58:46 UTC (rev 6799)
@@ -214,6 +214,14 @@
 		return generateParsedResource(editor.getContent(), resource, !useUnsavedContent, compile);
 	}
 	
+	public DRLInfo parseXLSResource(String content, IResource resource) throws DroolsParserException {
+		DRLInfo result = (DRLInfo) compiledRules.get(resource);
+		if (result != null) {
+			return result;
+		}
+		return generateParsedResource(content, resource, false, true);
+	}
+	
 	public void invalidateResource(IResource resource) {
 		DRLInfo cached = (DRLInfo) compiledRules.remove(resource);
 		if (cached != null) {

Modified: labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/builder/DroolsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/builder/DroolsBuilder.java	2006-10-13 21:33:59 UTC (rev 6798)
+++ labs/jbossrules/trunk/drools-ide/src/main/java/org/drools/ide/builder/DroolsBuilder.java	2006-10-13 21:58:46 UTC (rev 6799)
@@ -13,9 +13,10 @@
 import org.drools.compiler.FieldTemplateError;
 import org.drools.compiler.FunctionError;
 import org.drools.compiler.GlobalError;
-import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.compiler.ParserError;
 import org.drools.compiler.RuleError;
+import org.drools.decisiontable.InputType;
+import org.drools.decisiontable.SpreadsheetCompiler;
 import org.drools.ide.DRLInfo;
 import org.drools.ide.DroolsIDEPlugin;
 import org.drools.ide.preferences.IDroolsConstants;
@@ -119,7 +120,7 @@
         if (res instanceof IFile && "drl".equals(res.getFileExtension())) {
             removeProblemsFor(res);
             try {
-            	DroolsBuildMarker[] markers = parseFile((IFile) res, new String(Util.getResourceContentsAsCharArray((IFile) res)));
+            	DroolsBuildMarker[] markers = parseDRLFile((IFile) res, new String(Util.getResourceContentsAsCharArray((IFile) res)));
 		        for (int i = 0; i < markers.length; i++) {
 		        	createMarker(res, markers[i].getText(), markers[i].getLine());
 		        }
@@ -127,18 +128,23 @@
             	createMarker(res, t.getMessage(), -1);
             }
             return false;
+        } else if (res instanceof IFile && "xls".equals(res.getFileExtension())) {
+            removeProblemsFor(res);
+            try {
+            	DroolsBuildMarker[] markers = parseXLSFile((IFile) res);
+		        for (int i = 0; i < markers.length; i++) {
+		        	createMarker(res, markers[i].getText(), markers[i].getLine());
+		        }
+            } catch (Throwable t) {
+            	createMarker(res, t.getMessage(), -1);
+            }
+            return false;
         }
+
         return true;
     }
     
-    private static PackageBuilderConfiguration builder_configuration = new PackageBuilderConfiguration();
-    
-    public static void setupPackageBuilder(IJavaProject project) {
-    	String level = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
-    	builder_configuration.setJavaLanguageLevel(level);
-    }
-    
-    public static DroolsBuildMarker[] parseFile(IFile file, String content) {
+    private DroolsBuildMarker[] parseDRLFile(IFile file, String content) {
     	List markers = new ArrayList();
 		try {
             DRLInfo drlInfo =
@@ -146,9 +152,8 @@
             //parser errors
             markParseErrors(markers, drlInfo.getParserErrors());  
             markOtherErrors(markers, drlInfo.getBuilderErrors());
-            
         } catch (DroolsParserException e) {
-            //we have an error thrown from DrlParser
+            // we have an error thrown from DrlParser
             Throwable cause = e.getCause();
             if (cause instanceof RecognitionException ) {
                 RecognitionException recogErr = (RecognitionException) cause;
@@ -156,6 +161,33 @@
             }
         } catch (Exception t) {
         	String message = t.getMessage();
+            if (message == null || message.trim().equals("")) {
+                message = "Error: " + t.getClass().getName();
+            }
+            markers.add(new DroolsBuildMarker(message));
+        }
+        return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
+    }
+
+    private DroolsBuildMarker[] parseXLSFile(IFile file) {
+    	List markers = new ArrayList();
+		try {
+			SpreadsheetCompiler converter = new SpreadsheetCompiler();
+	        String drl = converter.compile(file.getContents(), InputType.XLS);
+	        DRLInfo drlInfo =
+            	DroolsIDEPlugin.getDefault().parseXLSResource(drl, file);
+            // parser errors
+            markParseErrors(markers, drlInfo.getParserErrors());  
+            markOtherErrors(markers, drlInfo.getBuilderErrors());
+        } catch (DroolsParserException e) {
+            // we have an error thrown from DrlParser
+            Throwable cause = e.getCause();
+            if (cause instanceof RecognitionException ) {
+                RecognitionException recogErr = (RecognitionException) cause;
+                markers.add(new DroolsBuildMarker(recogErr.getMessage(), recogErr.line)); //flick back the line number
+            }
+        } catch (Exception t) {
+        	String message = t.getMessage();
             if (message == null || message.trim().equals( "" )) {
                 message = "Error: " + t.getClass().getName();
             }
@@ -168,7 +200,7 @@
      * This will create markers for parse errors.
      * Parse errors mean that antlr has picked up some major typos in the input source.
      */
-    private static void markParseErrors(List markers, List parserErrors) {
+    private void markParseErrors(List markers, List parserErrors) {
         for ( Iterator iter = parserErrors.iterator(); iter.hasNext(); ) {
             ParserError err = (ParserError) iter.next();
             markers.add(new DroolsBuildMarker(err.getMessage(), err.getRow()));
@@ -178,7 +210,7 @@
     /**
      * This will create markers for build errors that happen AFTER parsing.
      */
-    private static void markOtherErrors(List markers,
+    private void markOtherErrors(List markers,
                                         DroolsError[] buildErrors) {
         // TODO are there warnings too?
         for (int i = 0; i < buildErrors.length; i++ ) {




More information about the jboss-svn-commits mailing list