[jboss-svn-commits] JBL Code SVN: r17317 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 19 01:22:28 EST 2007
Author: michael.neale at jboss.com
Date: 2007-12-19 01:22:28 -0500 (Wed, 19 Dec 2007)
New Revision: 17317
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFactUsage.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFieldUsage.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReport.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReportLine.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/AnalysisRunner.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/IO.java
labs/jbossrules/trunk/drools-jbrms/src/test/resources/AnalysisSample.drl
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
Log:
JBRULES-1393 Analysis improvements and integration
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFactUsage.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFactUsage.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFactUsage.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,10 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class AnalysisFactUsage implements IsSerializable {
+
+ public String name;
+ public AnalysisFieldUsage[] fields;
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFactUsage.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFieldUsage.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFieldUsage.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFieldUsage.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,10 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class AnalysisFieldUsage implements IsSerializable {
+
+ public String name;
+ public String[] rules;
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisFieldUsage.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReport.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReport.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReport.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,10 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class AnalysisReport implements IsSerializable {
+ public AnalysisReportLine[] errors;
+ public AnalysisReportLine[] warnings;
+ public AnalysisReportLine[] notes;
+ public AnalysisFactUsage[] factUsages;
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReport.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReportLine.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReportLine.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReportLine.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,23 @@
+package org.drools.brms.client.rpc;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * This is a single line of an analysis report.
+ */
+public class AnalysisReportLine implements IsSerializable {
+
+ public String description;
+ public String reason;
+ public String[] cause;
+
+ public AnalysisReportLine() {}
+ public AnalysisReportLine(String description, String reason, String[] cause) {
+ this.description = description;
+ this.reason = reason;
+ this.cause = cause;
+ }
+
+
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/AnalysisReportLine.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java 2007-12-19 06:21:30 UTC (rev 17316)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryService.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -332,4 +332,10 @@
* This should be pretty obvious what it does !
*/
public BulkTestRunResult runScenariosInPackage(String packageUUID) throws SerializableException;
+
+ /**
+ * Analyse the package and get a report for it.
+ */
+ public AnalysisReport analysePackage(String packageUUID) throws SerializableException;
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java 2007-12-19 06:21:30 UTC (rev 17316)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/rpc/RepositoryServiceAsync.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -74,7 +74,9 @@
public void rebuildSnapshots(AsyncCallback cb);
public void listRulesInPackage(java.lang.String p0, AsyncCallback cb);
public void runScenario(java.lang.String p0, org.drools.brms.client.modeldriven.testing.Scenario p1, AsyncCallback cb);
- public void runScenariosInPackage(String packageUUID, AsyncCallback cb);
+ public void runScenariosInPackage(java.lang.String p0, AsyncCallback cb);
+ public void analysePackage(java.lang.String p0, AsyncCallback cb);
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java 2007-12-19 06:21:30 UTC (rev 17316)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/ServiceImplementation.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -46,6 +46,7 @@
import org.drools.brms.client.common.AssetFormats;
import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
import org.drools.brms.client.modeldriven.testing.Scenario;
+import org.drools.brms.client.rpc.AnalysisReport;
import org.drools.brms.client.rpc.BuilderResult;
import org.drools.brms.client.rpc.BulkTestRunResult;
import org.drools.brms.client.rpc.DetailedSerializableException;
@@ -66,6 +67,7 @@
import org.drools.brms.server.contenthandler.ContentHandler;
import org.drools.brms.server.contenthandler.IRuleAsset;
import org.drools.brms.server.contenthandler.IValidating;
+import org.drools.brms.server.util.AnalysisRunner;
import org.drools.brms.server.util.BRMSSuggestionCompletionLoader;
import org.drools.brms.server.util.MetaDataMapper;
import org.drools.brms.server.util.TableDisplayHandler;
@@ -1216,9 +1218,23 @@
return h;
}
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public AnalysisReport analysePackage(String packageUUID)
+ throws SerializableException {
+ String drl = this.buildPackageSource(packageUUID);
+ AnalysisRunner runner = new AnalysisRunner();
+ try {
+ return runner.analyse(drl);
+ } catch (DroolsParserException e) {
+ log.error(e);
+ throw new DetailedSerializableException("Unable to parse the rules.", e.getMessage());
+ }
+ }
+
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/AnalysisRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/AnalysisRunner.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/AnalysisRunner.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,92 @@
+package org.drools.brms.server.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.analytics.Analyzer;
+import org.drools.analytics.components.AnalyticsClass;
+import org.drools.analytics.components.AnalyticsRule;
+import org.drools.analytics.components.Field;
+import org.drools.analytics.dao.AnalyticsData;
+import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.report.components.AnalyticsMessageBase;
+import org.drools.brms.client.rpc.AnalysisFactUsage;
+import org.drools.brms.client.rpc.AnalysisFieldUsage;
+import org.drools.brms.client.rpc.AnalysisReport;
+import org.drools.brms.client.rpc.AnalysisReportLine;
+import org.drools.brms.client.rpc.DetailedSerializableException;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.PackageDescr;
+
+import com.google.gwt.user.client.rpc.SerializableException;
+
+public class AnalysisRunner {
+
+ public AnalysisReport analyse(String drl) throws DroolsParserException, SerializableException {
+ DrlParser p = new DrlParser();
+ PackageDescr pkg = p.parse(drl);
+ if (p.hasErrors()) {
+ throw new DetailedSerializableException(
+ "Unable to analyse rules due to syntax errors in the rules.",
+ "Please correct syntax errors - build the package before trying the analysis again.");
+ }
+ Analyzer a = new Analyzer();
+ a.addPackageDescr(pkg);
+ a.fireAnalysis();
+ AnalyticsResult res = a.getResult();
+
+ AnalysisReport report = new AnalysisReport();
+ report.errors = doLines(res.getBySeverity(AnalyticsMessageBase.Severity.ERROR));
+ report.warnings = doLines(res.getBySeverity(AnalyticsMessageBase.Severity.WARNING));
+ report.notes = doLines(res.getBySeverity(AnalyticsMessageBase.Severity.NOTE));
+ report.factUsages = doFactUsage(res.getAnalyticsData());
+ return report;
+ }
+
+ private AnalysisFactUsage[] doFactUsage(AnalyticsData analyticsData) {
+ List<AnalysisFactUsage> factUsage = new ArrayList<AnalysisFactUsage>();
+ Collection<AnalyticsClass> classes = analyticsData.getAllClasses();
+ for (AnalyticsClass c : classes) {
+ AnalysisFactUsage fact = new AnalysisFactUsage();
+ fact.name = c.getName();
+ List<AnalysisFieldUsage> fieldUsage = new ArrayList<AnalysisFieldUsage>();
+ Set<Field> flds = c.getFields();
+ for (Field f : flds) {
+ AnalysisFieldUsage fu = new AnalysisFieldUsage();
+ fu.name = f.getName();
+ Collection<AnalyticsRule> cr = analyticsData.getRulesByFieldId(f.getId());
+ List<String> ruleNames = new ArrayList<String>();
+ for (AnalyticsRule analyticsRule : cr) {
+ ruleNames.add(analyticsRule.getRuleName());
+ }
+ fu.rules = ruleNames.toArray(new String[ruleNames.size()]);
+ fieldUsage.add(fu);
+ }
+ fact.fields = fieldUsage.toArray(new AnalysisFieldUsage[fieldUsage.size()]);
+ factUsage.add(fact);
+ }
+ return factUsage.toArray(new AnalysisFactUsage[factUsage.size()]);
+ }
+
+ private AnalysisReportLine[] doLines(
+ Collection<AnalyticsMessageBase> msgs) {
+ List<AnalysisReportLine> lines = new ArrayList<AnalysisReportLine>();
+ for (AnalyticsMessageBase m : msgs) {
+ AnalysisReportLine line = new AnalysisReportLine();
+ line.description = m.getMessage();
+ line.reason = m.getFaulty().toString();
+ Collection<?> causes = m.getCauses();
+ List<String> causeList = new ArrayList<String>();
+ for (Object c : causes) {
+ causeList.add(c.toString());
+ }
+ line.cause = causeList.toArray(new String[causeList.size()]);
+ lines.add(line);
+ }
+ return lines.toArray(new AnalysisReportLine[lines.size()]);
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/util/AnalysisRunner.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-19 06:21:30 UTC (rev 17316)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/ServiceImplementationTest.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -19,6 +19,8 @@
import com.google.gwt.user.client.rpc.IsSerializable;
import com.google.gwt.user.client.rpc.SerializableException;
import junit.framework.TestCase;
+
+import org.apache.commons.io.IOUtils;
import org.drools.Person;
import org.drools.RuleBase;
import org.drools.StatelessSession;
@@ -28,6 +30,7 @@
import org.drools.brms.client.modeldriven.testing.*;
import org.drools.brms.client.rpc.*;
import org.drools.brms.server.util.BRXMLPersistence;
+import org.drools.brms.server.util.IO;
import org.drools.brms.server.util.ScenarioXMLPersistence;
import org.drools.brms.server.util.TableDisplayHandler;
import org.drools.brms.server.util.TestEnvironmentSessionHelper;
@@ -37,7 +40,9 @@
import org.drools.util.BinaryRuleBaseLoader;
import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
import java.io.ObjectInputStream;
+import java.io.StringReader;
import java.util.*;
public class ServiceImplementationTest extends TestCase {
@@ -1645,6 +1650,26 @@
assertEquals(scenario2.getName(), s2.scenarioName);
}
+ public void testAnalysis() throws Exception {
+ ServiceImplementation impl = getService();
+ PackageItem pkg = impl.repository.createPackage("testAnalysis", "");
+ AssetItem asset = pkg.addAsset("SomeDRL", "");
+ asset.updateFormat(AssetFormats.DRL);
+
+ asset.updateContent(IO.read(this.getClass().getResourceAsStream("/AnalysisSample.drl")));
+ asset.checkin("");
+ System.err.println(asset.getContent());
+ AnalysisReport report = impl.analysePackage(pkg.getUUID());
+ assertNotNull(report);
+ assertEquals(0, report.errors.length);
+ assertEquals(10, report.warnings.length);
+ assertEquals(1, report.notes.length);
+
+ }
+
+
+
+
private ServiceImplementation getService() throws Exception {
ServiceImplementation impl = new ServiceImplementation();
Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/IO.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/IO.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/IO.java 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,27 @@
+package org.drools.brms.server.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class IO {
+
+
+ public static String read(InputStream st) {
+ try {
+ BufferedReader in = new BufferedReader(new InputStreamReader(st));
+ StringBuilder sb = new StringBuilder();
+ String str;
+ while ((str = in.readLine()) != null) {
+ sb.append(str);
+ sb.append('\n');
+ }
+ in.close();
+ return sb.toString();
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/util/IO.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/test/resources/AnalysisSample.drl
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/resources/AnalysisSample.drl (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/resources/AnalysisSample.drl 2007-12-19 06:22:28 UTC (rev 17317)
@@ -0,0 +1,26 @@
+
+import com.sample.DroolsTest.Message;
+
+
+rule "Redundant restrictions"
+ when
+ RedundancyPattern( a == 1, a == 1 )
+ then
+ // Something
+end
+
+rule "Redundant rule 1, rules"
+ when
+ RedundancyPattern( a == 1 )
+ RedundancyPattern2( a == 1 )
+ then
+ System.println("TEST");
+end
+
+rule "Redundant rule 2, rules"
+ when
+ RedundancyPattern( a == 1 )
+ RedundancyPattern2( a == 1 )
+ then
+ System.println("TEST");
+end
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/resources/AnalysisSample.drl
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list