[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