[jboss-svn-commits] JBL Code SVN: r13159 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse: builder and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 6 08:43:28 EDT 2007


Author: KrisVerlaenen
Date: 2007-07-06 08:43:28 -0400 (Fri, 06 Jul 2007)
New Revision: 13159

Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
Log:
JBRULES-894: Support for .package files in IDE 
 - files ending with .package are taken into account by builder
JBRULES-978: Support .brl files in builder
 - .brl files are checked by builder

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2007-07-06 11:46:14 UTC (rev 13158)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/DroolsEclipsePlugin.java	2007-07-06 12:43:28 UTC (rev 13159)
@@ -38,6 +38,7 @@
 import org.drools.lang.descr.PackageDescr;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -254,7 +255,15 @@
 		return generateParsedResource(content, resource, false, true);
 	}
 	
-	public void invalidateResource(IResource resource) {
+	public DRLInfo parseBRLResource(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) {
 			RuleInfo[] ruleInfos = cached.getRuleInfos();
@@ -327,7 +336,9 @@
 
                     // check whether a .package file exists and add it
                     if (resource.getParent() != null) {
-                    	IResource packageDef = resource.getParent().findMember(".package");
+                    	MyResourceVisitor visitor = new MyResourceVisitor();
+                		resource.getParent().accept(visitor, IResource.DEPTH_ONE, IResource.NONE);
+                    	IResource packageDef = visitor.getPackageDef();
                     	if (packageDef != null) {
                     		builder.addPackage(parseResource(packageDef, false).getPackageDescr());
                     	}
@@ -393,4 +404,16 @@
         return ruleBuilderFormColors;
     }
 
+    private class MyResourceVisitor implements IResourceVisitor {
+    	private IResource packageDef;
+		public boolean visit(IResource resource) throws CoreException {
+			if ("package".equals(resource.getFileExtension())) {
+				packageDef = resource;
+			}
+			return true;
+		}
+		public IResource getPackageDef() {
+			return packageDef;
+		}
+	}
 }

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java	2007-07-06 11:46:14 UTC (rev 13158)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/builder/DroolsBuilder.java	2007-07-06 12:43:28 UTC (rev 13159)
@@ -1,11 +1,18 @@
 package org.drools.eclipse.builder;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.antlr.runtime.RecognitionException;
+import org.drools.brms.client.modeldriven.brl.RuleModel;
+import org.drools.brms.server.util.BRDRLPersistence;
+import org.drools.brms.server.util.BRXMLPersistence;
 import org.drools.commons.jci.problems.CompilationProblem;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;
@@ -142,6 +149,17 @@
             	createMarker(res, t.getMessage(), -1);
             }
             return false;
+        } else if (res instanceof IFile && "brl".equals(res.getFileExtension())) {
+            removeProblemsFor(res);
+            try {
+            	DroolsBuildMarker[] markers = parseBRLFile((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;
@@ -199,6 +217,49 @@
         return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
     }
 
+    private DroolsBuildMarker[] parseBRLFile(IFile file) {
+    	List markers = new ArrayList();
+		try {
+			String brl = convertToString(file.getContents());
+			RuleModel model = BRXMLPersistence.getInstance().unmarshal(brl);
+			String drl = BRDRLPersistence.getInstance().marshal(model);
+			
+			// TODO pass this through DSL converter in case brl is based on dsl
+			
+	        DRLInfo drlInfo =
+            	DroolsEclipsePlugin.getDefault().parseBRLResource(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();
+            }
+            markers.add(new DroolsBuildMarker(message));
+        }
+        return (DroolsBuildMarker[]) markers.toArray(new DroolsBuildMarker[markers.size()]);
+    }
+    
+    private static String convertToString(final InputStream inputStream) throws IOException {
+    	Reader reader = new InputStreamReader(inputStream);
+    	final StringBuffer text = new StringBuffer();
+        final char[] buf = new char[1024];
+        int len = 0;
+        while ((len = reader.read(buf)) >= 0) {
+            text.append(buf, 0, len);
+        }
+        System.out.println(text.toString());
+        return text.toString();
+    }
+
     /**
      * This will create markers for parse errors.
      * Parse errors mean that antlr has picked up some major typos in the input source.




More information about the jboss-svn-commits mailing list