[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