You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(233) |
Sep
(199) |
Oct
(206) |
Nov
(185) |
Dec
(270) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(232) |
Feb
(426) |
Mar
(623) |
Apr
(592) |
May
(506) |
Jun
(389) |
Jul
(160) |
Aug
(3) |
Sep
(1) |
Oct
(1) |
Nov
(2) |
Dec
(5) |
2007 |
Jan
(1) |
Feb
(1) |
Mar
(2) |
Apr
(2) |
May
(4) |
Jun
(2) |
Jul
|
Aug
(3) |
Sep
(5) |
Oct
(9) |
Nov
(6) |
Dec
(6) |
2008 |
Jan
(3) |
Feb
|
Mar
(1) |
Apr
(3) |
May
(3) |
Jun
(5) |
Jul
(10) |
Aug
(2) |
Sep
(12) |
Oct
(10) |
Nov
(54) |
Dec
(49) |
2009 |
Jan
(19) |
Feb
(13) |
Mar
(20) |
Apr
(24) |
May
(44) |
Jun
(29) |
Jul
(32) |
Aug
(10) |
Sep
(7) |
Oct
(10) |
Nov
(4) |
Dec
(17) |
2010 |
Jan
(14) |
Feb
(5) |
Mar
(23) |
Apr
(50) |
May
(31) |
Jun
(9) |
Jul
(5) |
Aug
(4) |
Sep
(7) |
Oct
(5) |
Nov
(2) |
Dec
(3) |
2011 |
Jan
(12) |
Feb
(5) |
Mar
(5) |
Apr
(3) |
May
(4) |
Jun
(3) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2012 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(4) |
Aug
(1) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2015 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
Author: mic...@jb... Date: 2006-05-08 02:43:20 -0400 (Mon, 08 May 2006) New Revision: 4127 Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleBaseLoader.java labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/RuleBaseLoaderTest.java Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseFactory.java Log: Helper classes Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleBaseLoader.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleBaseLoader.java 2006-05-08 06:37:03 UTC (rev 4126) +++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleBaseLoader.java 2006-05-08 06:43:20 UTC (rev 4127) @@ -0,0 +1,73 @@ +package org.drools.compiler; + +import java.io.IOException; +import java.io.Reader; + +import org.drools.CheckedDroolsException; +import org.drools.RuleBase; +import org.drools.RuleBaseFactory; +import org.drools.rule.Package; + +/** + * A high level helper class for creating rulebases from source. + * For additional control, refer to the DrlParser and PackageBuilder classes. + * You can have much more detailed control with the lower level classes. + * + * @author Michael Neale + */ +public class RuleBaseLoader { + + private static RuleBaseLoader INSTANCE = new RuleBaseLoader(); + private static int engineType = RuleBase.RETEOO; + + private RuleBaseLoader() { + } + + /** Get an instance of the loader */ + public static RuleBaseLoader getInstance() { + return INSTANCE; + } + + /** + * Create a new RuleBase from the drl source. + * Uses the current default engine type. + */ + public RuleBase loadFromReader(Reader drl) throws CheckedDroolsException, IOException { + PackageBuilder builder = new PackageBuilder( ); + builder.addPackageFromDrl( drl ); + return makeRuleBase( builder ); + } + + /** + * Create a new RuleBase from the drl and dsl source. + * Uses the current default engine type. + */ + public RuleBase loadFromReader(Reader drl, Reader dsl) throws CheckedDroolsException, IOException { + PackageBuilder builder = new PackageBuilder( ); + builder.addPackageFromDrl( drl, dsl ); + return makeRuleBase( builder ); + } + + /** Replace the default engine type that will be used (default is RETEOO) */ + public void setDefaultEngineType(int type) { + engineType = type; + } + + private RuleBase makeRuleBase(PackageBuilder builder) throws CheckedDroolsException { + if (builder.hasErrors()) { + throw new CheckedDroolsException("There were errors in the rule source: " + builder.printErrors()); + } + Package binaryPackage = builder.getPackage(); + + RuleBase rb = RuleBaseFactory.newRuleBase(engineType); + try { + rb.addPackage( binaryPackage ); + } catch ( Exception e ) { + throw new CheckedDroolsException("Unable to add compiled package to rulebase. Nested error is: " + e.getMessage()); + } + return rb; + } + + + +} Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/RuleBaseLoader.java ___________________________________________________________________ Name: svn:eol-style + native Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/RuleBaseLoaderTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/RuleBaseLoaderTest.java 2006-05-08 06:37:03 UTC (rev 4126) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/RuleBaseLoaderTest.java 2006-05-08 06:43:20 UTC (rev 4127) @@ -0,0 +1,39 @@ +package org.drools.compiler; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +import org.drools.RuleBase; +import org.drools.integrationtests.IntegrationCases; +import org.drools.leaps.RuleBaseImpl; + +import junit.framework.TestCase; + +public class RuleBaseLoaderTest extends TestCase { + + public void testLoadRuleBase() throws Exception { + InputStream in = IntegrationCases.class.getResourceAsStream( "HelloWorld.drl" ); + RuleBase rb = RuleBaseLoader.getInstance().loadFromReader(new InputStreamReader(in)); + assertNotNull(rb); + } + + public void testLoadRuleBaseWithDSL() throws Exception { + InputStream in = IntegrationCases.class.getResourceAsStream( "rule_with_expander_dsl.drl" ); + InputStream inDSL = IntegrationCases.class.getResourceAsStream( "test_expander.dsl" ); + RuleBase rb = RuleBaseLoader.getInstance().loadFromReader(new InputStreamReader(in), new InputStreamReader(inDSL)); + assertNotNull(rb); + } + + public void testEngineType() throws Exception { + InputStream in = IntegrationCases.class.getResourceAsStream( "HelloWorld.drl" ); + RuleBaseLoader loader = RuleBaseLoader.getInstance(); + loader.setDefaultEngineType( RuleBase.LEAPS ); + RuleBase rb = loader.loadFromReader(new InputStreamReader(in)); + assertNotNull(rb); + assertTrue(rb instanceof RuleBaseImpl); + + } + + +} Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/RuleBaseLoaderTest.java ___________________________________________________________________ Name: svn:eol-style + native Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseFactory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseFactory.java 2006-05-08 06:37:03 UTC (rev 4126) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseFactory.java 2006-05-08 06:43:20 UTC (rev 4127) @@ -38,7 +38,7 @@ } /** Create a new RuleBase of the appropriate type */ - public RuleBase newRuleBase(int type) { + public static RuleBase newRuleBase(int type) { switch ( type ) { case RuleBase.RETEOO : return new org.drools.reteoo.RuleBaseImpl(); |
Author: aron.gombas Date: 2006-05-08 02:37:03 -0400 (Mon, 08 May 2006) New Revision: 4126 Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/cc_monitoring_de.properties labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/jira/jira_monitoring_de.properties labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sf_monitoring_de.properties labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svn_monitoring_de.properties labs/kosmos/trunk/web-portlet/WEB-INF/classes/kosmos-taglib_de.properties Modified: labs/kosmos/trunk/web-portlet/WEB-INF/portlet.xml Log: "de" resources added Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/cc_monitoring_de.properties =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/cc_monitoring_de.properties 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/cc/cc_monitoring_de.properties 2006-05-08 06:37:03 UTC (rev 4126) @@ -0,0 +1,38 @@ +# $Id$ + +portlet.title=CruiseControl \u00dcberwachung +portlet.help=Dieses Portlet \u00fcberwacht die kontinuierliche Erstellung verwaltet durch <a href="http://cruisecontrol.sourceforge.net">CruiseControl</a>.<br/>Bitte dessen Anleitung f\u00fcr Details zu Funktion und Einrichtung lesen. + +ccproject.name=Projekt +ccproject.lastBuildLabel=Erstellungsbeschriftung +ccproject.modifications=\u00c4nderungen +ccproject.status=Status +ccproject.successRate=Test Erfolgsrate +ccproject.testDetails=Test Details +ccproject.timestamp=Zeitmarke +ccproject.lastBuildAge=Alter der letzten Erstellung + +ccproject.buildTime=Erstelldauer +ccproject.testsSucceded=Tests Erfolgreich +ccproject.failures=Misserfolge +#Failures eher als Fehlschlaege, etc.? +ccproject.errors=Fehler +ccproject.tests=Alle Tests +ccproject.testsPerCategory=Test Erfolgsrate + +legend.title=Legende +legend.success=Erfolgreiche Erstellung und Tests. +legend.warning=Erfolgreiche Erstellung mit Tests misslungen od. fehlerhaft. +legend.error=Misslungene Erstellung. +legend.buildSuccess=Erfolgreiche Erstellung. +legend.buildError=Misslungene Erstellung. +legend.testSuccess=Erfolgreicher Test. +legend.testWarning=Misslungener Test. +legend.testError=Testfehler. + +lastupdate=Zuletzt aktualisiert + +action.refresh=Aktualisieren +action.back=Zur\u00fcck +action.show=Anzeigen +action.showAll=Alles anzeigen Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/jira/jira_monitoring_de.properties =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/jira/jira_monitoring_de.properties 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/jira/jira_monitoring_de.properties 2006-05-08 06:37:03 UTC (rev 4126) @@ -0,0 +1,43 @@ +# $Id$ + +portlet.title=JIRA \u00dcberwachung +portlet.help=Dieses Portlet \u00fcberwacht die Projekte in einer <a href="http://www.atlassian.com/software/jira">JIRA</a> Datenbank.<br/>Bitte dessen Anleitung f\u00fcr Details zu Funktion und Einrichtung lesen. + +jiraproject.name=Projekt +jiraproject.projectDetails=Projektdetails +jiraproject.key=Schl\u00fcssel +jiraproject.lead=Leiter +jiraproject.assignees=Zust\u00e4ndige +jiraproject.assigneeDetails=Zust\u00e4ndigkeitsdetails +jiraproject.issueDetails=Problemdetails + +jiraproject.description=Beschreibung +jiraproject.projectUrl=Projektseite +jiraproject.issuesByStatus=Probleme Nach Status + +jiraproject.openIssues=Offen +jiraproject.codingInProgressIssues=In Entwicklung +jiraproject.reopenedIssues=Wiederge\u00f6ffnet +jiraproject.resolvedIssues=Gel\u00f6st +jiraproject.closedIssues=Geschlossen + +jiraproject.openIssuesByPriority=Offene Probleme Nach Priorit\u00e4t +jiraproject.openIssuesByAssignee=Offene Probleme Nach Zust\u00e4ndigkeit + +jiraproject.blockerOpenIssues=Blockierend +jiraproject.criticalOpenIssues=Kritisch +jiraproject.majorOpenIssues=Gr\u00f6\u00dfer +jiraproject.minorOpenIssues=Geringf\u00fcgig +jiraproject.trivialOpenIssues=Trivial +jiraproject.optionalOpenIssues=Optional + +legend.title=Legende +legend.warning=Zu viele offene Probleme. + +lastupdate=Zuletzt aktualisiert + +action.refresh=Aktualisieren +action.back=Zur\u00fcck +action.show=Anzeigen +action.showAll=Alles anzeigen + Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sf_monitoring_de.properties =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sf_monitoring_de.properties 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/sf/sf_monitoring_de.properties 2006-05-08 06:37:03 UTC (rev 4126) @@ -0,0 +1,18 @@ +# $Id$ + +portlet.title=SourceForge \u00dcberwachung +portlet.help=Dieses Portlet \u00fcberwacht Projekte bei <a href="http://www.sourceforge.net">SourceForge</a>.<br/>Bitte dessen Anleitung f\u00fcr Details zu Funktion und Einrichtung lesen. + +sfRelease.packageName=Paket +sfRelease.version=Version +sfRelease.date=Datum +sfRelease.age=Alter + +legend.title=Legende +legend.new=Neue Version. +legend.old=Inaktives Projekt. + +lastupdate=Zuletzt Aktualisiert + +action.refresh=Aktualisieren +action.back=Zur\u00fcck Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svn_monitoring_de.properties =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svn_monitoring_de.properties 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/classes/hu/midori/kosmos/portlet/svn/svn_monitoring_de.properties 2006-05-08 06:37:03 UTC (rev 4126) @@ -0,0 +1,46 @@ +# $Id$ + +portlet.title=Subversion \u00dcberwachung +portlet.help=Dieses Portlet \u00fcberwacht Projekte verwaltet durch <a href="http://subversion.tigris.org/">Subversion</a> control.<br/>Bitte dessen Anleitung f\u00fcr Details zu Funktion und Einrichtung lesen. + +svnrepository.location=Ort des Repositories +svnrepository.repositoryDetails=Datails zum Repository +svnrepository.revision=Version +svnrepository.revisionDetails=Versionsdetails +svnrepository.committerDetails=Einsenderdetails +# Committer may be Urheber, too? +svnrepository.activityLast7Days=Aktivit\u00e4t der letzten 7 Tage +svnrepository.activityDetails=Aktivit\u00e4tsdetails +svnrepository.latestTouchDate=Zuletzt Ge\u00e4ndert +svnrepository.latestTouchAge=Zeit seit letzter \u00c4nderung + +svnrepository.dirs=Ordner +svnrepository.files=Dateien +svnrepository.totalRepositoryEntries=Alle Repository Eintr\u00e4ge +svnrepository.totalFileSize=Gr\u00f6\u00dfe Aller Dateien +svnrepository.repositoryEntryHistory=Historie der Repository Eintr\u00e4ge +svnrepository.filesByFileType=Dateien nach Typ + +svnrepository.mostActiveCommitters=Aktivste Einsender +svnrepository.mostActiveFiles=Aktivste Dateien + +svnrepository.commitsTotal=Alle Einsendungen +svnrepository.commitsToday=Einsendungen von Heute +svnrepository.commitsLast7Days=Einsendungen der letzten 7 Tage +svnrepository.commitsLast31Days=Einsendungen der letzten 31 Tage +svnrepository.committersTotal=Einsender +svnrepository.committersToday=Einsender von Heute +svnrepository.committersLast7Days=Einsender der letzten 7 Tage +svnrepository.committersLast31Days=Einsender der letzten 31 Tage +svnrepository.commitHistory=Einsendehistorie + +legend.title=Legende +legend.old=Inaktives Repository. + +lastupdate=Zuletzt aktualisiert + +action.refresh=Aktualisieren +action.back=Zur\u00fcck +action.show=Anzeigen +action.showAll=Alles anzeigen + Added: labs/kosmos/trunk/web-portlet/WEB-INF/classes/kosmos-taglib_de.properties =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/classes/kosmos-taglib_de.properties 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/classes/kosmos-taglib_de.properties 2006-05-08 06:37:03 UTC (rev 4126) @@ -0,0 +1,8 @@ +# $Id$ + +age.minutes=minuten +age.hours=stunden +age.days=tage +age.weeks=wochen +age.months=monate +age.years=jahre Modified: labs/kosmos/trunk/web-portlet/WEB-INF/portlet.xml =================================================================== --- labs/kosmos/trunk/web-portlet/WEB-INF/portlet.xml 2006-05-08 05:33:14 UTC (rev 4125) +++ labs/kosmos/trunk/web-portlet/WEB-INF/portlet.xml 2006-05-08 06:37:03 UTC (rev 4126) @@ -26,6 +26,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -61,6 +62,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -96,6 +98,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -132,6 +135,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -168,6 +172,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -201,6 +206,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -239,6 +245,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -272,6 +279,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -305,6 +313,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> @@ -340,6 +349,7 @@ <portlet-mode>HELP</portlet-mode> <portlet-mode>VIEW</portlet-mode> </supports> + <supported-locale>de</supported-locale> <supported-locale>en</supported-locale> <supported-locale>fr</supported-locale> <supported-locale>hu</supported-locale> |
From: <jbo...@li...> - 2006-05-08 05:33:19
|
Author: mic...@jb... Date: 2006-05-08 01:33:14 -0400 (Mon, 08 May 2006) New Revision: 4125 Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java Log: tweaks Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-05-08 04:27:59 UTC (rev 4124) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-05-08 05:33:14 UTC (rev 4125) @@ -99,6 +99,7 @@ } public void FIXME_testKeywordCollisions() throws Exception { + //MN: this really needs the multiphase parser for it to work properly RuleParser parser = parseResource( "eol_funny_business.drl" ); parser.compilation_unit(); |
From: <jbo...@li...> - 2006-05-08 04:28:05
|
Author: mic...@jb... Date: 2006-05-08 00:27:59 -0400 (Mon, 08 May 2006) New Revision: 4124 Modified: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-Event_Model.xml Log: tweaks Modified: labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-Event_Model.xml =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-Event_Model.xml 2006-05-08 03:59:54 UTC (rev 4123) +++ labs/jbossrules/trunk/documentation/manual/en/Chapter-Rule_Engine/Section-Event_Model.xml 2006-05-08 04:27:59 UTC (rev 4124) @@ -2,17 +2,12 @@ <section> <title>Event Model</title> - <para>uuuere</para> + <para>The event package provides means to be notified of rule engine events, including rules firing, objects being asserted etc. This + allows you to seperate out logging/auditing activities from the main part of your application (and the rules) - as events are a cross cutting concern.</para> - <section> - <title>Debug Event Listener</title> + <para> + Refer to the org.drools.event package in the drools-core module javadocs. This provides interfaces, and debug implementations of event classes that you can wire in to monitor the rule engine. + The Eclipse based Rule IDE also provides a audit logger, and graphical viewer, so that the rule engine can log events for later viewing, and auditing. + </para> - <para></para> - </section> - - <section> - <title>Audit Event Listener</title> - - <para></para> - </section> </section> \ No newline at end of file |
From: <jbo...@li...> - 2006-05-08 04:00:20
|
Author: mic...@jb... Date: 2006-05-07 23:59:54 -0400 (Sun, 07 May 2006) New Revision: 4123 Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/ labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/Section-Performance.xml labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.png labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.vsd Modified: labs/jbossrules/trunk/documentation/manual/en/master.xml Log: performance chapter Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/Section-Performance.xml =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/Section-Performance.xml 2006-05-08 03:19:28 UTC (rev 4122) +++ labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/Section-Performance.xml 2006-05-08 03:59:54 UTC (rev 4123) @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE section PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" +"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> +<section> + <title>Perforamnce considerations</title> + + <para>In any reasonably complex application, there are many things that may + effect performance. The usual advice applies of course (ie don't speculate, + measure, profile and plan). In terms of the rule engine, it does its best to + be as efficient as possibly, without too much thought needed, most people + should not need to read this chapter in detail.</para> + + <para>Note that for someone who is using a rule engine of the first time, + the most noticable "cost" will be the startup of the rule engine (which is + actually compiling the rules) - this problem is easily solved - simply cache + the RuleBase instances (or the rule packages) and only update rules as + needed (there are many ways to achieve this in your application which will + not be covered here).</para> + + <para>The remainder of this chapter is considerations on tuning the runtime + performance of rules (not compiling), which is where performance often + really counts.</para> + + <section> + <title>Beta Node Memory Indexing</title> + + <para>As explained in the chapter on the Rete Algorithm, BetaNodes are + nodes that have two inputs: the left input (for tuples) and the right + input (for single objects). Each beta node has two memories, one for each + input: the left memory and the right memory.</para> + + <para>So, when a single object arrives at the right input of the node, it + tries to match every tuple in the left memory according to the constraints + defined for the given BetaNode. Those elements that match are propagated + down through the network. The symmetrical behavior happens for when a + tuple arrives at the left input of the node. See diagram bellow: + <mediaobject> + <imageobject> + <imagedata fileref="beta_node.png" /> + </imageobject> + </mediaobject></para> + + <para>When the number of elements in each of the Beta Node Memories starts + to grow, the matching process starts to slow down, as each new element + that arrives needs to try to match all the elements in the opposite memory + for the given constraints. This process becomes a serious limitation for + real systems where thousands of facts are asserted into working memory and + where the Rete Network has several Beta Nodes.</para> + + <para>One way of minimizing the problem is to index each of the BetaNode + memories in a way that when a new element arrives, it does not need to + iterate over all elements of the opposite memory in order to find its + matches.</para> + + <para>So, for example, if we have a Rule like the following: + <programlisting>rule "find brothers" + when + p1: Person( $mother : mother ) + p2: Person( mother == $mother ) + then + // do something +end +</programlisting> If no indexing is used, each new Person object asserted into + working memory will try to match each other previously asserted Person + object to find those that have the same mother. So, if we have 1000 Person + objects already asserted into working memory, and we assert a new one, the + new one will try to match each of the 1000 previously asserted + objects.</para> + + <para>If we index BetaNode memories by the “mother” attribute, though, + when a new Person is asserted into memory, it will try to match only the + previously asserted objects that have the same mother attribute, in a very + efficient way using the previously built index. So, if the new object has + only one brother previously asserted into memory, it will match only one + object, avoiding the 999 tries that would fail.</para> + + <para>Drools implements BetaNode indexing exactly as described above in + order to boost performance. The BetaNode indexing is enabled by default + and users usually don’t need to worry about it. Although, for specific + situations where a user has a limited amount of memory or for some reason + does not want to incur in the indexing overhead, indexing can be disabled + for each of the memories, by setting the following system properties to + false: <programlisting>org.drools.reteoo.beta.index-left +org.drools.reteoo.beta.index-right + +For example: +..when you launch the application (or in the container as appropriate). +-Dorg.drools.reteoo.beta.index-right=false +-Dorg.drools.reteoo.beta.index-left=false +</programlisting></para> + </section> + + <section> + <title>Indexing Performance Tuning</title> + + <para>A good way to understand what happens when indexing is used is to + make an analogy to databases systems. As we all know, indexing is a great + mechanism for performance improvements on database queries, but also adds + an overhead to other operations like insert, updates and deletes. Also, + there is a memory consumption cost involved. A well planned set of indexes + is essential for most enterprise applications and the responsible for + defining them is usually the DBA. Once indexes are defined, when a query + is executed against that database, a query planner component is used by + database systems to estimate the best plan to run the query with the best + performance, sometimes using the index, sometimes not.</para> + + <para>Working memory has the same issues and same thoughts are valid here. + Drools implements an automatic indexing strategy to index beta node + memories. Just to have some data to understand the consequences of it, + lets use Manners 64 benchmark test results on a Pentium IV 3 Ghz HT + machine with 1.0 Gb memory. This is not really a detailed benchmark test, + but simply some rough numbers in order to make the scenario easier to + understand: <programlisting>Manners 64 without indexes: 135000 millisec to run +Manners 64 with BetaNode indexes: 10078 millisec to run on average</programlisting></para> + + <para>It is obvious by the previous run times that indexes overall + benefits pays off the overhead to keep them, at least in terms of + performance. We are not analyzing limited memory environments here.</para> + + <para>Although, every system has its own peculiarities and sometimes it is + possible to do some fine tuning on performance. For example, in our + Manners 64 example, if we disable the right memory indexing we would have + the following result: <programlisting>Manners 64 with BetaNode indexing only for left memory: 142000 millisec to run on average +</programlisting> The above is even worse than no using any indexing. This + happens clearly because for Manners 64, the left indexing overhead is + bigger than its benefit. So, if we do the contrary, leaving right indexing + enabled and disabling the left indexing, we get the following result: + <programlisting>Manners 64 with BetaNode indexing only for right memory: 8765 millisec to run on average +</programlisting> So, we have the best scenario now. For Manners 64, the best + would be to disable left indexing, leaving only right indexing + enabled.</para> + + <section> + <title>Re-arranging constraints</title> + <para>Another tip to tune performance when using indexing is always to + write your rules in a way that the most restrictive constraints are + declared before the less restrictive ones in your rule. For example, if + you have a rule with a column like this: <programlisting>Employee (department == $aDepartment, name == $aName) +</programlisting> Rewriting it as shown bellow will probably give you a better + performance, as “name” is probably a more restrictive constraint than + “department”: <programlisting>Employee (name == $aName, department == $aDepartment) +</programlisting> (Unless you work in an organisation where there are more + departments then employees, which could well be the case in a Government + organisation ;)</para> + </section> + <para>Some other improvements are being developed for Drools in this area + and will be documented as they become available in future versions.</para> + </section> +</section> \ No newline at end of file Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/Section-Performance.xml ___________________________________________________________________ Name: svn:eol-style + native Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.png =================================================================== (Binary files differ) Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.vsd =================================================================== (Binary files differ) Property changes on: labs/jbossrules/trunk/documentation/manual/en/Chapter-Performance_Tuning/beta_node.vsd ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: labs/jbossrules/trunk/documentation/manual/en/master.xml =================================================================== --- labs/jbossrules/trunk/documentation/manual/en/master.xml 2006-05-08 03:19:28 UTC (rev 4122) +++ labs/jbossrules/trunk/documentation/manual/en/master.xml 2006-05-08 03:59:54 UTC (rev 4123) @@ -135,6 +135,11 @@ </chapter> + <chapter> + <title>Performance tuning</title> + <xi:include href="Chapter-Performance_Tuning/Section-Performance.xml" /> + </chapter> + <chapter> <title>Examples</title> |
From: <jbo...@li...> - 2006-05-08 03:19:33
|
Author: mar...@jb... Date: 2006-05-07 23:19:28 -0400 (Sun, 07 May 2006) New Revision: 4122 Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule.drl labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule2.drl Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java Log: JBRULES-23 Logical Assertion unit tests -Added test for dynamic rule removal Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-08 03:15:30 UTC (rev 4121) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-08 03:19:28 UTC (rev 4122) @@ -70,7 +70,7 @@ protected abstract RuleBase getRuleBase() throws Exception; public void testGlobals() throws Exception { - + PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "globals_rule_test.drl" ) ) ); Package pkg = builder.getPackage(); @@ -92,11 +92,11 @@ assertEquals( new Integer( 5 ), list.get( 0 ) ); } - + public void testEmptyColumn() throws Exception { //pre build the package PackageBuilder builder = new PackageBuilder(); - builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyColumn.drl" ) ) ); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyColumn.drl" ) ) ); Package pkg = builder.getPackage(); //add the package to a rulebase @@ -116,9 +116,8 @@ workingMemory.fireAllRules(); assertEquals( new Integer( 5 ), - list.get( 0 ) ); + list.get( 0 ) ); } - public void testHelloWorld() throws Exception { @@ -209,8 +208,8 @@ list ); PersonInterface bill = new Person( "bill", - null, - 12 ); + null, + 12 ); bill.setAlive( true ); workingMemory.assertObject( bill ); workingMemory.fireAllRules(); @@ -218,9 +217,9 @@ assertEquals( bill, list.get( 0 ) ); } - + public void testBigDecimal() throws Exception { - + PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "big_decimal_and_comparable.drl" ) ) ); Package pkg = builder.getPackage(); @@ -234,16 +233,16 @@ list ); PersonInterface bill = new Person( "bill", - null, - 12 ); - bill.setBigDecimal( new BigDecimal("42") ); - workingMemory.assertObject( new BigDecimal("43") ); + null, + 12 ); + bill.setBigDecimal( new BigDecimal( "42" ) ); + workingMemory.assertObject( new BigDecimal( "43" ) ); workingMemory.assertObject( bill ); workingMemory.fireAllRules(); assertEquals( 1, list.size() ); - } + } public void testCell() throws Exception { Cell cell1 = new Cell( 9 ); @@ -383,12 +382,12 @@ list ); PersonInterface peter = new Person( "peter", - null, - 12 ); + null, + 12 ); workingMemory.assertObject( peter ); PersonInterface jane = new Person( "jane", - null, - 10 ); + null, + 10 ); workingMemory.assertObject( jane ); workingMemory.fireAllRules(); @@ -416,12 +415,12 @@ list ); PersonInterface peter = new Person( "peter", - null, - 12 ); + null, + 12 ); workingMemory.assertObject( peter ); PersonInterface jane = new Person( "jane", - null, - 10 ); + null, + 10 ); workingMemory.assertObject( jane ); workingMemory.fireAllRules(); @@ -493,8 +492,8 @@ FactHandle cheddarHandle = workingMemory.assertObject( cheddar ); PersonInterface paul = new Person( "paul", - "stilton", - 12 ); + "stilton", + 12 ); workingMemory.assertObject( paul ); workingMemory.fireAllRules(); @@ -519,11 +518,11 @@ WorkingMemory workingMemory = ruleBase.newWorkingMemory(); PersonInterface p1 = new Person( "michael", - "food", - 40 ); + "food", + 40 ); PersonInterface p2 = new Person( null, - "drink", - 30 ); + "drink", + 30 ); workingMemory.assertObject( p1 ); workingMemory.assertObject( p2 ); @@ -544,8 +543,8 @@ foo ); PersonInterface p1 = new Person( null, - "food", - 40 ); + "food", + 40 ); workingMemory.assertObject( p1 ); @@ -630,18 +629,20 @@ assertNotNull( ruleErr.getDescr() ); assertTrue( ruleErr.getLine() != -1 ); - assertEquals(3, builder.getErrors().length); - + assertEquals( 3, + builder.getErrors().length ); + //check that its getting it from the ruleDescr assertEquals( ruleErr.getLine(), ruleErr.getDescr().getLine() ); //check the absolute error line number (there are more). - assertEquals(11, ruleErr.getLine()); - + assertEquals( 11, + ruleErr.getLine() ); + //now check the RHS, not being too specific yet, as long as it has the rules line number, not zero RuleError rhs = (RuleError) builder.getErrors()[2]; - assertTrue(rhs.getLine() > 7); //not being too specific - may need to change this when we rework the error reporting - + assertTrue( rhs.getLine() > 7 ); //not being too specific - may need to change this when we rework the error reporting + } public void testErrorsParser() throws Exception { @@ -762,7 +763,7 @@ list ); PersonInterface person = new Person( "michael", - "cheese" ); + "cheese" ); person.setStatus( "start" ); workingMemory.assertObject( person ); workingMemory.fireAllRules(); @@ -909,7 +910,7 @@ list ); PersonInterface person = new Person( "Edson", - "cheese" ); + "cheese" ); workingMemory.assertObject( person ); workingMemory.fireAllRules(); @@ -1115,7 +1116,7 @@ RuleBase ruleBase = getRuleBase(); ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - + List list = new ArrayList(); workingMemory.setGlobal( "list", list ); @@ -1123,33 +1124,43 @@ Cheese brie = new Cheese( "brie", 12 ); workingMemory.assertObject( brie ); - + XorGroup xorGroup0 = workingMemory.getAgenda().getXorGroup( "xor-group-0" ); - assertEquals( 2, xorGroup0.size() ); - + assertEquals( 2, + xorGroup0.size() ); + XorGroup xorGroup3 = workingMemory.getAgenda().getXorGroup( "xor-group-3" ); - assertEquals( 1, xorGroup3.size() ); - + assertEquals( 1, + xorGroup3.size() ); + AgendaGroup agendaGroup3 = workingMemory.getAgenda().getAgendaGroup( "agenda-group-3" ); - assertEquals( 1, agendaGroup3.size() ); - + assertEquals( 1, + agendaGroup3.size() ); + AgendaGroup agendaGroupMain = workingMemory.getAgenda().getAgendaGroup( "MAIN" ); - assertEquals( 3, agendaGroupMain.size() ); - + assertEquals( 3, + agendaGroupMain.size() ); + workingMemory.clearAgendaGroup( "agenda-group-3" ); - assertEquals( 0, xorGroup3.size() ); - assertEquals( 0, agendaGroup3.size() ); - + assertEquals( 0, + xorGroup3.size() ); + assertEquals( 0, + agendaGroup3.size() ); + workingMemory.fireAllRules(); - - assertEquals( 0, xorGroup0.size() ); - - assertEquals( 2, list.size() ); - assertEquals( "rule0", list.get(0)); - assertEquals( "rule2", list.get(1)); - - } - + + assertEquals( 0, + xorGroup0.size() ); + + assertEquals( 2, + list.size() ); + assertEquals( "rule0", + list.get( 0 ) ); + assertEquals( "rule2", + list.get( 1 ) ); + + } + public void testDuration() throws Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration.drl" ) ) ); @@ -1324,7 +1335,7 @@ // type node in memory yet, but the rule engine is supposed // to handle that correctly PersonInterface bob = new Person( "bob", - "stilton" ); + "stilton" ); bob.setStatus( "Not evaluated" ); workingMemory.assertObject( bob ); @@ -1417,7 +1428,7 @@ list ); PersonInterface bob = new Person( "bob", - "stilton" ); + "stilton" ); bob.setStatus( "Not evaluated" ); workingMemory.assertObject( bob ); @@ -1476,10 +1487,10 @@ // Adding person with null name and likes attributes PersonInterface bob = new Person( null, - null ); + null ); bob.setStatus( "P1" ); PersonInterface pete = new Person( null, - null ); + null ); bob.setStatus( "P2" ); workingMemory.assertObject( bob ); workingMemory.assertObject( pete ); @@ -1531,7 +1542,7 @@ RuleBase ruleBase = getRuleBase(); ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - + List list = new ArrayList(); workingMemory.setGlobal( "list", list ); @@ -1541,12 +1552,12 @@ FactHandle brieHandle = workingMemory.assertObject( brie ); Cheese provolone = new Cheese( "provolone", - 12 ); + 12 ); FactHandle provoloneHandle = workingMemory.assertObject( provolone ); workingMemory.fireAllRules(); - - assertEquals( 3, + + assertEquals( 3, list.size() ); assertEquals( 3, @@ -1572,34 +1583,46 @@ ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - Cheese cheese1 = new Cheese("c", 1); - Cheese cheese2 = new Cheese(cheese1.getType(), 1); - List list; - + Cheese cheese1 = new Cheese( "c", + 1 ); + Cheese cheese2 = new Cheese( cheese1.getType(), + 1 ); + List list; + FactHandle h1 = workingMemory.assertObject( cheese1 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(cheese1.getType().getClass()); - assertEquals(1, list.size()); + list = workingMemory.getObjects( cheese1.getType().getClass() ); + assertEquals( 1, + list.size() ); //probably dangerous, as contains works with equals, not identity - assertEquals(cheese1.getType(), list.get(0)); + assertEquals( cheese1.getType(), + list.get( 0 ) ); //FactHandle ht = workingMemory.getFactHandle(c1.getType()); - + FactHandle h2 = workingMemory.assertObject( cheese2 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(cheese1.getType().getClass()); - assertEquals(1, list.size()); - assertEquals(cheese1.getType(), list.get(0)); + list = workingMemory.getObjects( cheese1.getType().getClass() ); + assertEquals( 1, + list.size() ); + assertEquals( cheese1.getType(), + list.get( 0 ) ); - workingMemory.retractObject(h1); + workingMemory.retractObject( h1 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(cheese1.getType().getClass()); - assertEquals("cheese-type " + cheese1.getType() + " was retracted, but should not. Backed by cheese2 => type.", 1, list.size()); - assertEquals("cheese-type " + cheese1.getType() + " was retracted, but should not. Backed by cheese2 => type.", cheese1.getType(), list.get(0)); - - workingMemory.retractObject(h2); + list = workingMemory.getObjects( cheese1.getType().getClass() ); + assertEquals( "cheese-type " + cheese1.getType() + " was retracted, but should not. Backed by cheese2 => type.", + 1, + list.size() ); + assertEquals( "cheese-type " + cheese1.getType() + " was retracted, but should not. Backed by cheese2 => type.", + cheese1.getType(), + list.get( 0 ) ); + + workingMemory.retractObject( h2 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(cheese1.getType().getClass()); - assertEquals("cheese-type " + cheese1.getType() + " was not retracted, but should have. Neither cheese1 => type nor cheese2 => type is true.", 0, list.size()); + list = workingMemory.getObjects( cheese1.getType().getClass() ); + assertEquals( "cheese-type " + cheese1.getType() + " was not retracted, but should have. Neither cheese1 => type nor cheese2 => type is true.", + 0, + list.size() ); } public void testLogicalAssertionsSelfreferencing() throws Exception { @@ -1612,30 +1635,37 @@ WorkingMemory workingMemory = ruleBase.newWorkingMemory(); List list; - - String b = new String("b"); - String a = new String("a"); - workingMemory.setGlobal( "b", b ); + String b = new String( "b" ); + String a = new String( "a" ); + workingMemory.setGlobal( "b", + b ); + FactHandle h1 = workingMemory.assertObject( a ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(a.getClass()); - assertEquals(2, list.size()); - assertTrue(list.contains(a)); - assertTrue(list.contains(b)); - - workingMemory.retractObject(h1); + list = workingMemory.getObjects( a.getClass() ); + assertEquals( 2, + list.size() ); + assertTrue( list.contains( a ) ); + assertTrue( list.contains( b ) ); + + workingMemory.retractObject( h1 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(a.getClass()); - assertEquals("b was retracted, but it should not have. Is backed by b => b being true.", 1, list.size()); - assertEquals("b was retracted, but it should not have. Is backed by b => b being true.", b, list.get(0)); - - h1 = workingMemory.getFactHandle(b); - workingMemory.retractObject(h1); + list = workingMemory.getObjects( a.getClass() ); + assertEquals( "b was retracted, but it should not have. Is backed by b => b being true.", + 1, + list.size() ); + assertEquals( "b was retracted, but it should not have. Is backed by b => b being true.", + b, + list.get( 0 ) ); + + h1 = workingMemory.getFactHandle( b ); + workingMemory.retractObject( h1 ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(a.getClass()); - assertEquals(0, list.size()); + list = workingMemory.getObjects( a.getClass() ); + assertEquals( 0, + list.size() ); } public void testLogicalAssertionsLoop() throws Exception { @@ -1648,16 +1678,22 @@ WorkingMemory workingMemory = ruleBase.newWorkingMemory(); List list; - + List l = new ArrayList(); - String a = new String("a"); - workingMemory.setGlobal( "a", a ); - workingMemory.setGlobal( "l", l ); + String a = new String( "a" ); + workingMemory.setGlobal( "a", + a ); + workingMemory.setGlobal( "l", + l ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(a.getClass()); - assertEquals("a still asserted.", 0, list.size()); - assertEquals("Rule has not fired (looped) expected number of times", 10, l.size()); + list = workingMemory.getObjects( a.getClass() ); + assertEquals( "a still asserted.", + 0, + list.size() ); + assertEquals( "Rule has not fired (looped) expected number of times", + 10, + l.size() ); } public void testLogicalAssertionsNoLoop() throws Exception { @@ -1670,16 +1706,22 @@ WorkingMemory workingMemory = ruleBase.newWorkingMemory(); List list; - + List l = new ArrayList(); - String a = new String("a"); - workingMemory.setGlobal( "a", a ); - workingMemory.setGlobal( "l", l ); + String a = new String( "a" ); + workingMemory.setGlobal( "a", + a ); + workingMemory.setGlobal( "l", + l ); workingMemory.fireAllRules(); - list = workingMemory.getObjects(a.getClass()); - assertEquals("a still in WM", 0, list.size()); - assertEquals("Rule should not loop", 1, l.size()); + list = workingMemory.getObjects( a.getClass() ); + assertEquals( "a still in WM", + 0, + list.size() ); + assertEquals( "Rule should not loop", + 1, + l.size() ); } public void testLogicalAssertions2() throws Exception { @@ -1690,30 +1732,41 @@ RuleBase ruleBase = getRuleBase(); ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - + List events = new ArrayList(); - - workingMemory.setGlobal( "events", events ); - - Sensor sensor = new Sensor(80, 80); + + workingMemory.setGlobal( "events", + events ); + + Sensor sensor = new Sensor( 80, + 80 ); FactHandle handle = workingMemory.assertObject( sensor ); // everything should be normal workingMemory.fireAllRules(); - + List list = workingMemory.getObjects(); - - assertEquals("Only sensor is there", 1, list.size()); - assertEquals("Only one event", 1, events.size()); - + + assertEquals( "Only sensor is there", + 1, + list.size() ); + assertEquals( "Only one event", + 1, + events.size() ); + // problems should be detected sensor.setPressure( 200 ); sensor.setTemperature( 200 ); - workingMemory.modifyObject( handle, sensor ); - + workingMemory.modifyObject( handle, + sensor ); + workingMemory.fireAllRules(); - assertEquals("Only sensor is there", 1, list.size()); - assertEquals("Exactly six events", 6, events.size()); + assertEquals( "Only sensor is there", + 1, + list.size() ); + assertEquals( "Exactly six events", + 6, + events.size() ); } public void testLogicalAssertionsNot() throws Exception { @@ -1726,33 +1779,49 @@ WorkingMemory workingMemory = ruleBase.newWorkingMemory(); List list; - - String a = new String("a"); - Integer i = new Integer(1); - workingMemory.setGlobal( "i", i ); + String a = new String( "a" ); + Integer i = new Integer( 1 ); + workingMemory.setGlobal( "i", + i ); + workingMemory.fireAllRules(); list = workingMemory.getObjects(); - assertEquals("i was not asserted by not a => i.", 1, list.size()); - assertEquals("i was not asserted by not a => i.", i, list.get(0)); + assertEquals( "i was not asserted by not a => i.", + 1, + list.size() ); + assertEquals( "i was not asserted by not a => i.", + i, + list.get( 0 ) ); - FactHandle h = workingMemory.assertObject(a); + FactHandle h = workingMemory.assertObject( a ); //no need to fire rules, assertion alone removes justification for i, so it should be retracted. //workingMemory.fireAllRules(); list = workingMemory.getObjects(); - assertEquals("a was not asserted or i not retracted.", 1, list.size()); - assertEquals("a was asserted.", a, list.get(0)); - assertFalse("i was not rectracted.", list.contains(i)); + assertEquals( "a was not asserted or i not retracted.", + 1, + list.size() ); + assertEquals( "a was asserted.", + a, + list.get( 0 ) ); + assertFalse( "i was not rectracted.", + list.contains( i ) ); //no rules should fire, but nevertheless... //workingMemory.fireAllRules(); - assertEquals("agenda should be empty.", 0, workingMemory.getAgenda().agendaSize()); - - workingMemory.retractObject(h); + assertEquals( "agenda should be empty.", + 0, + workingMemory.getAgenda().agendaSize() ); + + workingMemory.retractObject( h ); workingMemory.fireAllRules(); list = workingMemory.getObjects(); - assertEquals("i was not asserted by not a => i.", 1, list.size()); - assertEquals("i was not asserted by not a => i.", i, list.get(0)); + assertEquals( "i was not asserted by not a => i.", + 1, + list.size() ); + assertEquals( "i was not asserted by not a => i.", + i, + list.get( 0 ) ); } public void testLogicalAssertionsNotPingPong() throws Exception { @@ -1766,23 +1835,146 @@ //workingMemory.addEventListener(new DebugAgendaEventListener()); //workingMemory.addEventListener(new DebugWorkingMemoryEventListener()); - + List list; - + List l = new ArrayList(); - - String s = new String("s"); - Integer i = new Integer(1); - workingMemory.setGlobal( "i", i ); - workingMemory.setGlobal( "s", s ); - workingMemory.setGlobal( "l", l ); - + + String s = new String( "s" ); + Integer i = new Integer( 1 ); + workingMemory.setGlobal( "i", + i ); + workingMemory.setGlobal( "s", + s ); + workingMemory.setGlobal( "l", + l ); + workingMemory.fireAllRules(); //not sure about desired state of working memory. - assertEquals("Rules have not fired (looped) expected number of times", 10, l.size()); + assertEquals( "Rules have not fired (looped) expected number of times", + 10, + l.size() ); } - + + public void xxxtestLogicalAssertionsDynamicRule() throws Exception { + PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_LogicalAssertionsDynamicRule.drl" ) ) ); + Package pkg = builder.getPackage(); + + org.drools.reteoo.RuleBaseImpl reteooRuleBase = null; + org.drools.leaps.RuleBaseImpl leapsRuleBase = null; + RuleBase ruleBase = getRuleBase(); + if ( ruleBase instanceof org.drools.reteoo.RuleBaseImpl ) { + reteooRuleBase = (org.drools.reteoo.RuleBaseImpl) ruleBase; + } else if ( ruleBase instanceof org.drools.leaps.RuleBaseImpl ) { + leapsRuleBase = (org.drools.leaps.RuleBaseImpl) ruleBase; + } + ruleBase.addPackage( pkg ); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + // workingMemory.addEventListener(new org.drools.event.DebugAgendaEventListener()); + // workingMemory.addEventListener(new org.drools.event.DebugWorkingMemoryEventListener()); + + Cheese c1 = new Cheese( "a", + 1 ); + Cheese c2 = new Cheese( "b", + 2 ); + Cheese c3 = new Cheese( "c", + 3 ); + List list; + + workingMemory.assertObject( c1 ); + FactHandle h = workingMemory.assertObject( c2 ); + workingMemory.assertObject( c3 ); + workingMemory.fireAllRules(); + list = workingMemory.getObjects( c1.getType().getClass() ); + assertEquals( 2, + list.size() ); + assertFalse( list.contains( c1.getType() ) ); + assertTrue( list.contains( c2.getType() ) ); + assertTrue( list.contains( c3.getType() ) ); + + Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_LogicalAssertionsDynamicRule2.drl" ) ); + builder = new PackageBuilder(); + builder.addPackageFromDrl( reader ); + Package pkg2 = builder.getPackage(); + ruleBase.addPackage( pkg2 ); + + workingMemory.fireAllRules(); + + list = workingMemory.getObjects( c1.getType().getClass() ); + assertEquals( 3, + list.size() ); + assertTrue( list.contains( c1.getType() ) ); + assertTrue( list.contains( c2.getType() ) ); + assertTrue( list.contains( c3.getType() ) ); + + assertEquals( "org.drools.test", + ruleBase.getPackages()[0].getName() ); + assertEquals( "org.drools.test2", + ruleBase.getPackages()[1].getName() ); + assertEquals( "rule1", + ruleBase.getPackages()[0].getRules()[0].getName() ); + assertEquals( "rule2", + ruleBase.getPackages()[1].getRules()[0].getName() ); + + if ( reteooRuleBase != null ) { + reteooRuleBase.removeRule( ruleBase.getPackages()[0].getName(), + ruleBase.getPackages()[0].getRules()[0].getName() ); + } else if ( leapsRuleBase != null ) { + leapsRuleBase.removeRule( ruleBase.getPackages()[0].getName(), + ruleBase.getPackages()[0].getRules()[0].getName() ); + } + + assertEquals( 0, + ruleBase.getPackages()[0].getRules().length ); + assertEquals( 1, + ruleBase.getPackages()[1].getRules().length ); + assertEquals( "org.drools.test2", + ruleBase.getPackages()[1].getName() ); + assertEquals( "rule2", + ruleBase.getPackages()[1].getRules()[0].getName() ); + + list = workingMemory.getObjects( c1.getType().getClass() ); + assertEquals( "remove of rule should retract objects logically asserted based on the rule", + 2, + list.size() ); + assertTrue( "remove of rule should retract objects logically asserted based on the rule", + list.contains( c1.getType() ) ); + assertTrue( "remove of rule should retract objects logically asserted based on the rule", + list.contains( c2.getType() ) ); + assertFalse( "remove of rule should retract objects logically asserted based on the rule", + list.contains( c3.getType() ) ); + + c2.setPrice( 1 ); + workingMemory.modifyObject( h, + c2 ); + list = workingMemory.getObjects( c1.getType().getClass() ); + assertEquals( "remove of rule should remove one justification for c2 -> type", + 1, + list.size() ); + assertFalse( "remove of rule should remove one justification for c2 -> type", + list.contains( c2.getType() ) ); + assertTrue( "remove of rule should remove one justification for c2 -> type", + list.contains( c1.getType() ) ); + + if ( reteooRuleBase != null ) { + reteooRuleBase.removeRule( ruleBase.getPackages()[1].getName(), + ruleBase.getPackages()[1].getRules()[0].getName() ); + } else if ( leapsRuleBase != null ) { + leapsRuleBase.removeRule( ruleBase.getPackages()[1].getName(), + ruleBase.getPackages()[1].getRules()[0].getName() ); + } + assertEquals( 0, + ruleBase.getPackages()[0].getRules().length ); + assertEquals( 0, + ruleBase.getPackages()[1].getRules().length ); + list = workingMemory.getObjects( c1.getType().getClass() ); + assertEquals( 0, + list.size() ); + } + public void testEmptyRule() throws Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyRule.drl" ) ) ); @@ -1791,16 +1983,17 @@ RuleBase ruleBase = getRuleBase(); ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - + List list = new ArrayList(); - workingMemory.setGlobal( "list", list ); - + workingMemory.setGlobal( "list", + list ); + workingMemory.fireAllRules(); - - assertTrue( list.contains("fired1") ); - assertTrue( list.contains("fired2") ); + + assertTrue( list.contains( "fired1" ) ); + assertTrue( list.contains( "fired2" ) ); } - + public void testjustEval() throws Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NoColumns.drl" ) ) ); @@ -1809,16 +2002,17 @@ RuleBase ruleBase = getRuleBase(); ruleBase.addPackage( pkg ); WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - + List list = new ArrayList(); - workingMemory.setGlobal( "list", list ); - + workingMemory.setGlobal( "list", + list ); + workingMemory.fireAllRules(); - - assertTrue( list.contains("fired1") ); - assertTrue( list.contains("fired3") ); - } - + + assertTrue( list.contains( "fired1" ) ); + assertTrue( list.contains( "fired3" ) ); + } + private Object serializeIn(byte[] bytes) throws IOException, ClassNotFoundException { ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) ); Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule.drl =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule.drl 2006-05-08 03:15:30 UTC (rev 4121) +++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule.drl 2006-05-08 03:19:28 UTC (rev 4122) @@ -0,0 +1,10 @@ +package org.drools.test; + +import org.drools.Cheese; + +rule "rule1" + when + Cheese( type : type, price : price -> (price.intValue() > 1)) + then + assertLogical( type ); +end Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule2.drl =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule2.drl 2006-05-08 03:15:30 UTC (rev 4121) +++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertionsDynamicRule2.drl 2006-05-08 03:19:28 UTC (rev 4122) @@ -0,0 +1,10 @@ +package org.drools.test2; + +import org.drools.Cheese; + +rule "rule2" + when + Cheese( type : type, price : price -> (price.intValue() < 3)) + then + assertLogical( type ); +end \ No newline at end of file |
From: <jbo...@li...> - 2006-05-08 03:15:37
|
Author: mar...@jb... Date: 2006-05-07 23:15:30 -0400 (Sun, 07 May 2006) New Revision: 4121 Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java Log: -TerminalNode should be stateless so moved cached xor group to TerminalNode Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-08 02:55:31 UTC (rev 4120) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-08 03:15:30 UTC (rev 4121) @@ -53,8 +53,8 @@ /** The rule to invoke upon match. */ private final Rule rule; private final TupleSource tupleSource; - private XorGroup xorGroup; + // ------------------------------------------------------------ // Constructors // ------------------------------------------------------------ @@ -133,11 +133,12 @@ this.rule ); if ( this.rule.getXorGroup() != null ) { + final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this ); // Lazy cache xorGroup - if ( this.xorGroup == null ) { - this.xorGroup = workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ); + if ( memory.getXorGroup() == null ) { + memory.setXorGroup( workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ) ); } - this.xorGroup.addActivation( item ); + memory.getXorGroup().addActivation( item ); } agenda.scheduleItem( item ); @@ -184,10 +185,10 @@ if ( this.rule.getXorGroup() != null ) { // Lazy cache xorGroup - if ( this.xorGroup == null ) { - this.xorGroup = workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ); + if ( memory.getXorGroup() == null ) { + memory.setXorGroup( workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ) ); } - this.xorGroup.addActivation( item ); + memory.getXorGroup().addActivation( item ); } // Makes sure the Lifo is added to the AgendaGroup priority queue @@ -325,6 +326,8 @@ class TerminalNodeMemory { private AgendaGroupImpl agendaGroup; + + private XorGroup xorGroup; public AgendaGroupImpl getAgendaGroup() { return this.agendaGroup; @@ -333,5 +336,15 @@ public void setAgendaGroup(final AgendaGroupImpl agendaGroup) { this.agendaGroup = agendaGroup; } + + public XorGroup getXorGroup() { + return this.xorGroup; + } + + public void setXorGroup(XorGroup xorGroup) { + this.xorGroup = xorGroup; + } + + } } |
From: <jbo...@li...> - 2006-05-08 02:55:35
|
Author: mar...@jb... Date: 2006-05-07 22:55:31 -0400 (Sun, 07 May 2006) New Revision: 4120 Modified: labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Hobby.java labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Sex.java Log: -Correct hashcode to hashCode Modified: labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Hobby.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Hobby.java 2006-05-08 02:51:22 UTC (rev 4119) +++ labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Hobby.java 2006-05-08 02:55:31 UTC (rev 4120) @@ -75,7 +75,7 @@ return (this == object); } - public final int hashcode() { + public final int hashCode() { return this.hobbyIndex; } Modified: labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Sex.java =================================================================== --- labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Sex.java 2006-05-08 02:51:22 UTC (rev 4119) +++ labs/jbossrules/trunk/drools-examples/src/main/java/org/drools/benchmark/manners/Sex.java 2006-05-08 02:55:31 UTC (rev 4120) @@ -53,7 +53,7 @@ return this == object; } - public final int hashcode() { + public final int hashCode() { return this.sex; } |
Author: mar...@jb... Date: 2006-05-07 22:51:22 -0400 (Sun, 07 May 2006) New Revision: 4119 Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/CompiledInvoker.java Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java Log: JBRULES-251 Node sharing for compiled Expressions -Predicates, ReturnValue and EvalCondition now all work with node sharing Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/CompiledInvoker.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/CompiledInvoker.java 2006-05-08 02:51:10 UTC (rev 4118) +++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/CompiledInvoker.java 2006-05-08 02:51:22 UTC (rev 4119) @@ -0,0 +1,9 @@ +package org.drools.semantics.java; + +import java.util.List; + +import org.drools.spi.Invoker; + +public interface CompiledInvoker extends Invoker { + public List getMethodBytecode(); +} Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-05-08 02:51:10 UTC (rev 4118) +++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-05-08 02:51:22 UTC (rev 4119) @@ -158,6 +158,7 @@ pkg.getPackageCompilationData().getClassLoader() ); // make an automatic import for the current package this.typeResolver.addImport( pkg.getName() + ".*" ); + this.typeResolver.addImport( "java.lang.*" ); this.ruleDescr = ruleDescr; @@ -577,8 +578,10 @@ st.setAttribute( "methodName", classMethodName ); + + String returnValueText = functionFixer.fix( returnValueDescr.getText() ); st.setAttribute( "text", - functionFixer.fix( returnValueDescr.getText() ) ); + returnValueText ); this.methods.add( st.toString() ); @@ -597,8 +600,8 @@ declarations, returnValueDescr.getText() ); - st.setAttribute( "text", - returnValueDescr.getText() ); + st.setAttribute( "hashCode", + returnValueText.hashCode() ); String invokerClassName = pkg.getName() + "." + ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker"; this.invokers.put( invokerClassName, @@ -668,8 +671,10 @@ st.setAttribute( "methodName", classMethodName ); + + String predicateText = functionFixer.fix( predicateDescr.getText() ); st.setAttribute( "text", - functionFixer.fix( predicateDescr.getText() ) ); + predicateText ); this.methods.add( st.toString() ); @@ -694,8 +699,8 @@ declarations, predicateDescr.getText() ); - st.setAttribute( "text", - predicateDescr.getText() ); + st.setAttribute( "hashCode", + predicateText.hashCode() ); String invokerClassName = pkg.getName() + "." + ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker"; this.invokers.put( invokerClassName, @@ -729,8 +734,10 @@ st.setAttribute( "methodName", classMethodName ); + + String evalText = functionFixer.fix( evalDescr.getText() ); st.setAttribute( "text", - functionFixer.fix( evalDescr.getText() ) ); + evalText ); this.methods.add( st.toString() ); @@ -749,8 +756,8 @@ declarations, evalDescr.getText() ); - st.setAttribute( "text", - evalDescr.getText() ); + st.setAttribute( "hashCode", + evalText.hashCode() ); String invokerClassName = pkg.getName() + "." + ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker"; this.invokers.put( invokerClassName, Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg 2006-05-08 02:51:10 UTC (rev 4118) +++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg 2006-05-08 02:51:22 UTC (rev 4119) @@ -1,9 +1,62 @@ group javaInvokeable; -returnValueInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, globals, globalTypes, text) ::= << +getMethodBytecode(package, ruleClassName, methodName) ::= << + public java.util.List getMethodBytecode() { + org.drools.util.asm.MethodComparator.Tracer visit = new org.drools.util.asm.MethodComparator.Tracer("<methodName>"); + + + java.io.InputStream is = <ruleClassName>.class.getClassLoader().getResourceAsStream( "<package>.<ruleClassName>".replace( '.', '/' ) + ".class" ); + + java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); + byte[] data = new byte[1024]; + int byteCount; + try { + while ( (byteCount = is.read( data, + 0, + 1024 )) > -1 ) + { + bos.write(data, 0, byteCount); + } + } catch ( java.io.IOException e ) { + throw new org.drools.RuntimeDroolsException("Unable getResourceAsStream for Class '<ruleClassName>' "); + } + + org.drools.asm.ClassReader classReader = new org.drools.asm.ClassReader( bos.toByteArray() ); + classReader.accept( visit, true ); + org.drools.asm.util.TraceMethodVisitor trace = visit.getTrace(); + return trace.getText(); + } +>> + + +equals() ::= << + public boolean equals(Object object) { + if (object == null ) { + return false; + } else if ( object == this ){ + return true; + } + + if ( ! (object instanceof org.drools.semantics.java.CompiledInvoker) ) { + return false; + } + + org.drools.semantics.java.CompiledInvoker other = ( org.drools.semantics.java.CompiledInvoker ) object; + + return org.drools.util.asm.MethodComparator.compareBytecode( getMethodBytecode(), other.getMethodBytecode() ); + } +>> + +hashCode(hashCode) ::= << + public int hashCode() { + return <hashCode>; + } +>> + +returnValueInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, globals, globalTypes, hashCode) ::= << package <package>; -public class <invokerClassName> implements org.drools.spi.ReturnValueExpression +public class <invokerClassName> implements org.drools.spi.ReturnValueExpression, org.drools.semantics.java.CompiledInvoker { public Object evaluate(org.drools.spi.Tuple tuple, org.drools.rule.Declaration[] declarations, @@ -15,15 +68,21 @@ return <ruleClassName>.<methodName>( <declarations:{ declr | <declr.identifier>}; separator=",\n"><if(globals)>,<endif> <globals:{ identifier | <identifier>}; separator=",\n"> ); - } + } + + <hashCode(hashCode=hashCode)> + + <getMethodBytecode(package=package, ruleClassName=ruleClassName, methodName=methodName)> + + <equals()> } >> predicateInvoker(package, invokerClassName, ruleClassName, methodName, declaration, declarationType, - declarations, declarationTypes, globals, globalTypes, text) ::= << + declarations, declarationTypes, globals, globalTypes, hashCode) ::= << package <package>; -public class <invokerClassName> implements org.drools.spi.PredicateExpression +public class <invokerClassName> implements org.drools.spi.PredicateExpression, org.drools.semantics.java.CompiledInvoker { public boolean evaluate(org.drools.spi.Tuple tuple, org.drools.FactHandle factHandle, @@ -39,14 +98,24 @@ <declarations:{ declr | <declr.identifier>}; separator=",\n"><if(globals)>,<endif> <globals:{ identifier | <identifier>}; separator=",\n"> ); } + + <hashCode(hashCode=hashCode)> + + <getMethodBytecode(package=package, ruleClassName=ruleClassName, methodName=methodName)> + + <equals()> } >> -evalInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, globals, globalTypes, text) ::= << +evalInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, globals, globalTypes, hashCode) ::= << package <package>; -public class <invokerClassName> implements org.drools.spi.EvalExpression +import org.drools.asm.ClassReader; +import org.drools.asm.util.TraceMethodVisitor; +import org.drools.util.asm.MethodComparator.Tracer; + +public class <invokerClassName> implements org.drools.spi.EvalExpression, org.drools.semantics.java.CompiledInvoker { public boolean evaluate(org.drools.spi.Tuple tuple, org.drools.rule.Declaration[] declarations, @@ -59,6 +128,12 @@ <declarations:{ declr | <declr.identifier>}; separator=",\n"><if(globals)>,<endif> <globals:{ identifier | <identifier>}; separator=",\n"> ); } + + <hashCode(hashCode=hashCode)> + + <getMethodBytecode(package=package, ruleClassName=ruleClassName, methodName=methodName)> + + <equals()> } >> Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-05-08 02:51:10 UTC (rev 4118) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-05-08 02:51:22 UTC (rev 4119) @@ -56,17 +56,22 @@ import org.drools.rule.And; import org.drools.rule.Column; import org.drools.rule.Declaration; +import org.drools.rule.EvalCondition; import org.drools.rule.Exists; import org.drools.rule.LiteralConstraint; import org.drools.rule.Not; import org.drools.rule.Or; import org.drools.rule.Package; +import org.drools.rule.PredicateConstraint; +import org.drools.rule.ReturnValueConstraint; import org.drools.rule.Rule; +import org.drools.semantics.java.CompiledInvoker; import org.drools.spi.Activation; import org.drools.spi.KnowledgeHelper; import org.drools.spi.PropagationContext; import org.drools.spi.Tuple; import org.drools.util.LinkedList; +import org.drools.util.asm.MethodComparator; public class PackageBuilderTest extends DroolsTestCase { @@ -334,7 +339,34 @@ assertLength( 0, builder.getErrors() ); } + + public void testReturnValueMethodCompare() { + PackageBuilder builder1 = new PackageBuilder(); + PackageDescr packageDescr1 = new PackageDescr( "package1" ); + createReturnValueRule( packageDescr1, "new Integer(x.intValue() + y.intValue() )" ); + builder1.addPackage( packageDescr1 ); + Column column1 = (Column) builder1.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + ReturnValueConstraint returnValue1 = (ReturnValueConstraint) column1.getConstraints().get( 2 ); + + PackageBuilder builder2 = new PackageBuilder(); + PackageDescr packageDescr2 = new PackageDescr( "package2" ); + createReturnValueRule( packageDescr2, "new Integer(x.intValue() + y.intValue() )" ); + builder2.addPackage( packageDescr2 ); + Column column2 = (Column) builder2.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + ReturnValueConstraint returnValue2 = (ReturnValueConstraint) column2.getConstraints().get( 2 ); + PackageBuilder builder3 = new PackageBuilder(); + PackageDescr packageDescr3 = new PackageDescr( "package3" ); + createReturnValueRule( packageDescr3, "new Integer(x.intValue() - y.intValue() )" ); + builder3.addPackage( packageDescr3 ); + Column column3 = (Column) builder3.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + ReturnValueConstraint returnValue3 = (ReturnValueConstraint) column3.getConstraints().get( 2 ); + + assertEquals( returnValue1, returnValue2); + assertFalse( returnValue1.equals( returnValue3 ) ); + assertFalse( returnValue2.equals( returnValue3 ) ); + } + public void testPredicate() throws Exception { PackageBuilder builder = new PackageBuilder(); @@ -368,7 +400,34 @@ assertLength( 0, builder.getErrors() ); } + + public void testPredicateMethodCompare() { + PackageBuilder builder1 = new PackageBuilder(); + PackageDescr packageDescr1 = new PackageDescr( "package1" ); + createPredicateRule( packageDescr1, "x==y" ); + builder1.addPackage( packageDescr1 ); + Column column1 = (Column) builder1.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + PredicateConstraint predicate1 = (PredicateConstraint) column1.getConstraints().get( 2 ); + + PackageBuilder builder2 = new PackageBuilder(); + PackageDescr packageDescr2 = new PackageDescr( "package2" ); + createPredicateRule( packageDescr2, "x==y" ); + builder2.addPackage( packageDescr2 ); + Column column2 = (Column) builder2.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + PredicateConstraint predicate2 = (PredicateConstraint) column2.getConstraints().get( 2 ); + PackageBuilder builder3 = new PackageBuilder(); + PackageDescr packageDescr3 = new PackageDescr( "package3" ); + createPredicateRule( packageDescr3, "x!=y" ); + builder3.addPackage( packageDescr3 ); + Column column3 = (Column) builder3.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + PredicateConstraint predicate3 = (PredicateConstraint) column3.getConstraints().get( 2 ); + + assertEquals( predicate1, predicate2); + assertFalse( predicate1.equals( predicate3 ) ); + assertFalse( predicate2.equals( predicate3 ) ); + } + public void testEval() throws Exception { PackageBuilder builder = new PackageBuilder(); @@ -398,12 +457,42 @@ ruleDescr.setConsequence( "modify(stilton);" ); - builder.addPackage( packageDescr ); + builder.addPackage( packageDescr ); assertLength( 0, builder.getErrors() ); + + Package pkg = builder.getPackage(); + Rule rule = pkg.getRule( "rule-1" ); + EvalCondition eval = (EvalCondition) rule.getLhs().getChildren().get( 1 ); + CompiledInvoker invoker = (CompiledInvoker ) eval.getEvalExpression(); + List list = invoker.getMethodBytecode(); } + + public void testEvalMethodCompare() { + PackageBuilder builder1 = new PackageBuilder(); + PackageDescr packageDescr1 = new PackageDescr( "package1" ); + createEvalRule( packageDescr1, "1==1" ); + builder1.addPackage( packageDescr1 ); + EvalCondition eval1 = (EvalCondition) builder1.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + + PackageBuilder builder2 = new PackageBuilder(); + PackageDescr packageDescr2 = new PackageDescr( "package2" ); + createEvalRule( packageDescr2, "1==1" ); + builder2.addPackage( packageDescr2 ); + EvalCondition eval2 = (EvalCondition) builder2.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + PackageBuilder builder3 = new PackageBuilder(); + PackageDescr packageDescr3 = new PackageDescr( "package3" ); + createEvalRule( packageDescr3, "1==3" ); + builder3.addPackage( packageDescr3 ); + EvalCondition eval3 = (EvalCondition) builder3.getPackage().getRules()[0].getLhs().getChildren().get( 0 ); + + assertEquals( eval1, eval2); + assertFalse( eval1.equals( eval3 ) ); + assertFalse( eval2.equals( eval3 ) ); + } + public void testOr() throws Exception { PackageBuilder builder = new PackageBuilder(); Rule rule = createRule( new OrDescr(), @@ -625,8 +714,79 @@ assertLength( 0, builder.getErrors() ); + } + + private void createReturnValueRule(PackageDescr packageDescr, String expression) { + RuleDescr ruleDescr = new RuleDescr( "rule-1" ); + packageDescr.addRule( ruleDescr ); + + AndDescr lhs = new AndDescr(); + ruleDescr.setLhs( lhs ); + + ColumnDescr column = new ColumnDescr( Cheese.class.getName(), + "stilton" ); + lhs.addDescr( column ); + + FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price", + "x" ); + column.addDescr( fieldBindingDescr ); + fieldBindingDescr = new FieldBindingDescr( "price", + "y" ); + column.addDescr( fieldBindingDescr ); + + packageDescr.addGlobal( "map", + "java.util.Map" ); + + ReturnValueDescr returnValue = new ReturnValueDescr( "price", + "==", + expression ); + column.addDescr( returnValue ); + + ruleDescr.setConsequence( "modify(stilton);" ); + } + + private void createPredicateRule(PackageDescr packageDescr, String expression) { + RuleDescr ruleDescr = new RuleDescr( "rule-1" ); + packageDescr.addRule( ruleDescr ); + + AndDescr lhs = new AndDescr(); + ruleDescr.setLhs( lhs ); + + ColumnDescr column = new ColumnDescr( Cheese.class.getName(), + "stilton" ); + lhs.addDescr( column ); + + FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price", + "x" ); + column.addDescr( fieldBindingDescr ); + + packageDescr.addGlobal( "map", + "java.util.Map" ); + + PredicateDescr predicate = new PredicateDescr( "price", + "y", + expression ); + column.addDescr( predicate ); + + ruleDescr.setConsequence( "modify(stilton);" ); } + + private void createEvalRule(PackageDescr packageDescr, String expression) { + RuleDescr ruleDescr = new RuleDescr( "rule-1" ); + packageDescr.addRule( ruleDescr ); + AndDescr lhs = new AndDescr(); + ruleDescr.setLhs( lhs ); + + packageDescr.addGlobal( "map", + "java.util.Map" ); + + EvalDescr evalDescr = new EvalDescr( expression ); + lhs.addDescr( evalDescr ); + + ruleDescr.setConsequence( "" ); + } + private void createLiteralRule(LiteralDescr literalDescr) { PackageBuilder builder = new PackageBuilder(); |
From: <jbo...@li...> - 2006-05-08 02:51:22
|
Author: mar...@jb... Date: 2006-05-07 22:51:10 -0400 (Sun, 07 May 2006) New Revision: 4118 Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeBinder.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BaseNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/MethodComparator.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java Log: JBRULES-251 Node sharing for compiled Expressions -Predicates, ReturnValue and EvalCondition now all work with node sharing Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -145,7 +145,7 @@ return true; } - if ( object == null || !(object instanceof ClassObjectType) ) { + if ( object == null || object.getClass() != ClassObjectType.class ) { return false; } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupImpl.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupImpl.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -116,7 +116,7 @@ return false; } - public int hashcode() { + public int hashCode() { return this.name.hashCode(); } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -181,11 +181,11 @@ } /** - * Return the hashcode of the - * <code>TupleKey<code> as the hashcode of the AgendaItem + * Return the hashCode of the + * <code>TupleKey<code> as the hashCode of the AgendaItem * @return */ - public int hashcode() { + public int hashCode() { return this.tuple.hashCode(); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeBinder.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeBinder.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BetaNodeBinder.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -33,9 +33,11 @@ public final static BetaNodeBinder simpleBinder = new BetaNodeBinder(); private final FieldConstraint[] constraints; + + private static final FieldConstraint[] EMPTY_CONSTRAINTS = new FieldConstraint[0]; public BetaNodeBinder() { - this.constraints = null; + this.constraints = BetaNodeBinder.EMPTY_CONSTRAINTS; } public BetaNodeBinder(FieldConstraint constraint) { @@ -102,9 +104,13 @@ BetaNodeBinder other = (BetaNodeBinder) object; + if ( this.constraints == other.constraints ) { + return true; + } + if ( this.constraints.length != other.constraints.length ) { return false; - } + } for ( int i = 0; i < this.constraints.length; i++ ) { if ( !this.constraints[i].equals( other.constraints[i] ) ) { Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -212,11 +212,11 @@ } /** - * Return the hashcode of the - * <code>TupleKey<code> as the hashcode of the AgendaItem + * Return the hashode of the + * <code>TupleKey<code> as the hashCode of the AgendaItem * @return */ - public int hashcode() { + public int hashCode() { return this.tuple.hashCode(); } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BaseNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BaseNode.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BaseNode.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -135,7 +135,7 @@ } /** - * The hashcode return is simply the unique id of the node. It is expected that base classes will also implement equals(Object object). + * The hashCode return is simply the unique id of the node. It is expected that base classes will also implement equals(Object object). */ public int hashCode() { return this.id; Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -219,7 +219,7 @@ return true; } - if ( object == null || getClass() != object.getClass() ) { + if ( object == null || object.getClass() != EvalConditionNode.class ) { return false; } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactImpl.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactImpl.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -30,6 +30,8 @@ implements InitialFact { private static final InitialFact INSTANCE = new InitialFactImpl(); + + private final int hashCode = "InitialFactImpl".hashCode(); public static InitialFact getInstance() { return InitialFactImpl.INSTANCE; @@ -37,4 +39,20 @@ private InitialFactImpl() { } + + public int hashCode() { + return this.hashCode; + } + + public boolean equals(Object object) { + if ( this == object ) { + return true; + } + + if ( object == null || object.getClass() != InitialFactImpl.class ) { + return false; + } + + return true; + } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -22,6 +22,7 @@ import org.drools.common.BetaNodeBinder; import org.drools.common.PropagationContextImpl; +import org.drools.rule.EvalCondition; import org.drools.spi.PropagationContext; import org.drools.util.LinkedList; import org.drools.util.LinkedListNode; @@ -280,4 +281,25 @@ public Object createMemory() { return new HashMap(); } + + public int hashCode() { + return this.objectSource.hashCode(); + } + + public boolean equals(Object object) { + if ( object == this ){ + return true; + } + + if ( object == null || object.getClass() != LeftInputAdapterNode.class ) { + return false; + } + + LeftInputAdapterNode other = ( LeftInputAdapterNode ) object; + if ( this.binder == null ) { + return this.objectSource.equals( other.objectSource ) && other.binder == null; + } else { + return this.objectSource.equals( other.objectSource ) && this.binder.equals( other.binder ); + } + } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -246,22 +246,26 @@ return "[ObjectTypeNode objectType=" + this.objectType + "]"; } + /** + * Uses he hashCode() of the underlying ObjectType implementation. + */ + public int hashCode() { + return this.objectType.hashCode(); + } + public boolean equals(Object object) { if ( this == object ) { return true; } - if ( object == null || getClass() != object.getClass() ) { + if ( object == null || object.getClass() != ObjectTypeNode.class ) { return false; } - return this.objectType.equals( this.objectType ); + ObjectTypeNode other = (ObjectTypeNode) object; + + return this.objectType.equals( other.objectType ); } - /** - * Uses he hashcode() of the underlying ObjectType implementation. - */ - public int hashCode() { - return this.objectType.hashCode(); - } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -40,7 +40,7 @@ * <p> * Each <code>ReteTuple</code> also reference a <code>TupleKey</code> which is special array of FactHandles * representing the <code>Column</code>s in a <code>Rule</code>. The <code>TupleKey</code> also provide the - * hashcode implementation for <code>ReteTuple</code>. + * hashCode implementation for <code>ReteTuple</code>. * * @see Tuple * @see TupleMatch Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -305,6 +305,23 @@ public Object createMemory() { return new TerminalNodeMemory(); } + + public int hashCode() { + return this.rule.hashCode(); + } + + public boolean equals(Object object) { + if ( object == this ){ + return true; + } + + if ( object == null || object.getClass() != TerminalNode.class ) { + return false; + } + + TerminalNode other = ( TerminalNode ) object; + return this.rule.equals( other.rule ); + } class TerminalNodeMemory { private AgendaGroupImpl agendaGroup; Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -75,23 +75,21 @@ return eval; } -// public int hashcode() { -// return this.expression.hashCode(); -// } -// -// public boolean equals(Object object) { -// if (object == null ) { -// return false; -// } else if ( object == this ){ -// return true; -// } -// -// if ( ! (object instanceof EvalExpression) ) { -// return false; -// } -// -// EvalCondition other = ( EvalCondition ) object; -// -// return this.expression.equals( other.expression ); -// } + public int hashCode() { + return this.expression.hashCode(); + } + + public boolean equals(Object object) { + if ( object == this ){ + return true; + } + + if ( object == null || object.getClass() != EvalCondition.class ) { + return false; + } + + EvalCondition other = ( EvalCondition ) object; + + return this.expression.equals( other.expression ); + } }; \ No newline at end of file Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -289,7 +289,7 @@ if ( object instanceof PredicateConstraint ) { this.packageCompilationData.remove( ((PredicateConstraint) object).getPredicateExpression().getClass().getName() ); } else if ( object instanceof ReturnValueConstraint ) { - this.packageCompilationData.remove( ((ReturnValueConstraint) object).getReturnValueExpression().getClass().getName() ); + this.packageCompilationData.remove( ((ReturnValueConstraint) object).getExpression().getClass().getName() ); } } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -322,9 +322,9 @@ } public InputStream getResourceAsStream(String name) { - byte[] bytes = read( name ); + byte[] bytes = (byte[]) PackageCompilationData.this.store.get( name ); if ( bytes != null ) { - return null; + return new ByteArrayInputStream( bytes ); } else { return super.getResourceAsStream( name ); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -92,4 +92,23 @@ } + public int hashCode() { + return this.expression.hashCode(); + } + + public boolean equals(Object object) { + if (object == null ) { + return false; + } else if ( object == this ){ + return true; + } + + if ( ! (object instanceof PredicateConstraint) ) { + return false; + } + + PredicateConstraint other = ( PredicateConstraint ) object; + + return this.expression.equals( other.expression ); + } }; \ No newline at end of file Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -32,7 +32,7 @@ private final FieldExtractor fieldExtractor; - private ReturnValueExpression returnValueExpression; + private ReturnValueExpression expression; private final Declaration[] requiredDeclarations; @@ -55,7 +55,7 @@ Evaluator evaluator) { this.fieldExtractor = fieldExtractor; - this.returnValueExpression = returnValueExpression; + this.expression = returnValueExpression; if ( declarations != null ) { this.requiredDeclarations = declarations; @@ -71,11 +71,11 @@ } public void setReturnValueExpression(ReturnValueExpression expression) { - this.returnValueExpression = expression; + this.expression = expression; } - public ReturnValueExpression getReturnValueExpression() { - return this.returnValueExpression; + public ReturnValueExpression getExpression() { + return this.expression; } public boolean isAllowed(InternalFactHandle handle, @@ -83,11 +83,31 @@ WorkingMemory workingMemory) { try { return evaluator.evaluate( this.fieldExtractor.getValue( handle.getObject() ), - this.returnValueExpression.evaluate( tuple, + this.expression.evaluate( tuple, this.requiredDeclarations, workingMemory ) ); } catch ( Exception e ) { throw new RuntimeDroolsException( e ); } } + + public int hashCode() { + return this.expression.hashCode(); + } + + public boolean equals(Object object) { + if (object == null ) { + return false; + } else if ( object == this ){ + return true; + } + + if ( ! (object instanceof ReturnValueConstraint) ) { + return false; + } + + ReturnValueConstraint other = ( ReturnValueConstraint ) object; + + return this.expression.equals( other.expression ); + } } \ No newline at end of file Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -421,13 +421,13 @@ return true; } - if ( object == null || !(object instanceof Rule) ) { + if ( object == null || object.getClass() != Rule.class ) { return false; } Rule other = (Rule) object; - return (this.name.equals( other.name ) && this.agendaGroup.equals( other.agendaGroup ) && this.salience == other.salience && this.noLoop == other.noLoop); + return (this.name.equals( other.name ) && this.agendaGroup.equals( other.agendaGroup ) && this.xorGroup.equals( other.xorGroup )&& this.salience == other.salience && this.noLoop == other.noLoop); } public int hashCode() { Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/MethodComparator.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/MethodComparator.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/asm/MethodComparator.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -46,10 +46,22 @@ } /** + * This will return a series of bytecode instructions which can be used to compare one method with another. + * debug info like local var declarations and line numbers are ignored, so the focus is on the content. + */ + public static List getMethodBytecode(String methodName, byte[] bytes) { + Tracer visit = new Tracer(methodName); + ClassReader classReader = new ClassReader( bytes ); + classReader.accept( visit, true ); + TraceMethodVisitor trace = visit.getTrace(); + return trace.getText(); + } + + /** * Compares 2 bytecode listings. * Returns true if they are identical. */ - public boolean compareBytecode(List b1, List b2) { + public static boolean compareBytecode(List b1, List b2) { if (b1.size() != b2.size()) return false; for (int i = 0; i < b1.size(); i++) { @@ -63,7 +75,7 @@ return true; } - static class Tracer implements ClassVisitor { + public static class Tracer implements ClassVisitor { private TraceMethodVisitor trace; private String methodName; Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -75,7 +75,7 @@ return (this == object); } - public final int hashcode() { + public final int hashCode() { return this.hobbyIndex; } Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-05-08 02:01:27 UTC (rev 4117) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-05-08 02:51:10 UTC (rev 4118) @@ -53,7 +53,7 @@ return this == object; } - public final int hashcode() { + public final int hashCode() { return this.sex; } |
Author: unibrew Date: 2006-05-07 22:01:27 -0400 (Sun, 07 May 2006) New Revision: 4117 Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/maven.xml labs/jbosslabs/trunk/portal-extensions/counters-ejb3/project.xml labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersEntity.java labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersMDB.java labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersServiceBean.java labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/web/WEB-INF/persistence.xml labs/jbosslabs/trunk/portal-extensions/forge-common/project.xml labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/CountersService.java labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersDB.java labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersWatcher.java Log: [JBLAB-665] EJBs are now properly deploying and DownloadCounters slowly are becoming something working :) Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/maven.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/maven.xml 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/maven.xml 2006-05-08 02:01:27 UTC (rev 4117) @@ -11,7 +11,7 @@ </goal> <goal name="build"> - <ant:copy todir="target/classes"> + <ant:copy todir="target/classes/META-INF"> <ant:fileset dir="src/web/WEB-INF"> <ant:filename name="persistence.xml" /> </ant:fileset> Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/project.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/project.xml 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/project.xml 2006-05-08 02:01:27 UTC (rev 4117) @@ -33,6 +33,12 @@ <version>3.0RC6</version> <jar>jboss-ejb3x.jar</jar> </dependency> + <dependency> + <groupId>jboss</groupId> + <artifactId>jboss-j2ee</artifactId> + <version></version> + <jar>jboss-j2ee.jar</jar> + </dependency> </dependencies> </project> Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersEntity.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersEntity.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersEntity.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -83,7 +83,7 @@ this.order = order; } - @Column(name = "order") + @Column(name = "sortorder") public String getOrder() { return order; Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersMDB.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersMDB.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersMDB.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -1,5 +1,5 @@ - /* +/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a @@ -22,29 +22,65 @@ */ package org.jboss.forge.counters; -/* + import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; + import javax.jms.Message; +import javax.jms.TextMessage; +import javax.naming.InitialContext; +import javax.naming.NamingException; - /** +import org.jboss.forge.common.projects.CountersService; +import org.jboss.logging.Logger; + + +/** * * @author Ryszard Kozmik * - */ /* + */ @MessageDriven(activateConfig = -{ - @ActivationConfigProperty(propertyName="destinationType", - propertyValue="javax.jms.Queue"), - @ActivationConfigProperty(propertyName="destination", - propertyValue="queue/mdb") -})*/ + { @ActivationConfigProperty(propertyName = "destinationType", + propertyValue = "javax.jms.Queue") + , @ActivationConfigProperty(propertyName = "destination", + propertyValue = "queue/jblab_counters") + } +) public class CountersMDB { -/* - public void onMessage (Message msg) { - + + private static Logger logger; + + public CountersMDB() + { + if (logger == null) + { + // Initializing logger. + logger = Logger.getLogger(this.getClass()); + } } -*/ + + public void onMessage(Message msg) + { + try + { + TextMessage txtMsg = (TextMessage) msg; + InitialContext ctx = new InitialContext(); + CountersService countersService = + (CountersService) ctx.lookup(CountersService.class.getName()); + countersService.incrementCounter(txtMsg.getText()); + System.out.println("HELLO!!: "+txtMsg.getText()); + } + catch (NamingException e) + { + logger.error("CountersService was not found while incrementing counter."); + } + catch (Exception e) + { + logger.error("Problem while processing message in MDB.", e); + } + } + } Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersServiceBean.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersServiceBean.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/java/org/jboss/forge/counters/CountersServiceBean.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -73,4 +73,13 @@ { List<CountersEntity> countersRows = em.createQuery("from CountersEntity e").getResultList(); } + + public void incrementCounter (String path) + { + System.out.println("CountersService: "+path); + CountersEntity ce = em.find(CountersEntity.class,path); + ce.setCounterValue(ce.getCounterValue()+1); + em.persist(ce); + } + } Modified: labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/web/WEB-INF/persistence.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/web/WEB-INF/persistence.xml 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/counters-ejb3/src/web/WEB-INF/persistence.xml 2006-05-08 02:01:27 UTC (rev 4117) @@ -2,6 +2,8 @@ <name>counters</name> <jta-data-source>java:/JBossDS</jta-data-source> <properties> + <property name="hibernate.connection.datasource" value="JBossDS" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </entity-manager> Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/project.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-common/project.xml 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/forge-common/project.xml 2006-05-08 02:01:27 UTC (rev 4117) @@ -92,6 +92,12 @@ <version>1.0</version> <jar>activation.jar</jar> </dependency> + <dependency> + <groupId>jboss</groupId> + <artifactId>jboss-j2ee</artifactId> + <version></version> + <jar>jboss-j2ee.jar</jar> + </dependency> </dependencies> <build> Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/CountersService.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/CountersService.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/CountersService.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -43,4 +43,6 @@ public void updateCounters(Map<String,Counter> downloadCounters); + public void incrementCounter (String path); + } Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersDB.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersDB.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersDB.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -1,4 +1,4 @@ - /* +/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a @@ -26,7 +26,14 @@ import javax.naming.InitialContext; -import org.jboss.logging.Logger; +import javax.jms.JMSException; +import javax.jms.Queue; +import javax.jms.QueueConnectionFactory; +import javax.jms.QueueSession; +import javax.jms.TextMessage; + +import javax.naming.NamingException; + import org.jboss.shotoku.ContentManager; @@ -42,58 +49,107 @@ protected InitialContext ctx; - public DownloadCountersDB (String portalName, ContentManager cm) + public DownloadCountersDB(String portalName, ContentManager cm) { + super(); + System.out.println("HALO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1"); this.setContentManager(cm); - try + try { ctx = new InitialContext(); - CountersService countersService = (CountersService)ctx.lookup(CountersService.class.getName()); - downloadCounters=countersService.getCountersMap(); - + CountersService countersService = + (CountersService) ctx.lookup(CountersService.class.getName()); + downloadCounters = countersService.getCountersMap(); + + for (String path : downloadCounters.keySet()) + { + System.out.println("Path: "+path+" Value: "+downloadCounters.get(path)); + } + // Getting Map containing pairs of ProjectId and shotoku Node // which refers to projects' download counter descriptor. - Map <String,org.jboss.shotoku.Node> descriptors = getDownloadDescriptors(portalName); - + Map<String, org.jboss.shotoku.Node> descriptors = + getDownloadDescriptors(portalName); + // Synchronizing tracked links in downloadConters with links from - // projects download counter descriptors. + // projects download counter descriptors. synchronizeCounters(descriptors); - - } catch (Exception e) + + for (String path : downloadCounters.keySet()) + { + System.out.println("Path: "+path+" Value: "+downloadCounters.get(path)); + } + + } + catch (Exception e) { - getLogger().error ("Failed to initialize downloadCounters.",e); + getLogger().error("Failed to initialize downloadCounters.", e); } - + } - + /** * This method is overriding the method from DownloadCountersDescriptor and * because of that name is missleading. It just executes proper method on * CountersService to persist all counters in database. * @param portalName */ - public void synchronizeWithFile(String portalName) { - try { - CountersService countersService = (CountersService)ctx.lookup(CountersService.class.getName()); + public void synchronizeWithFile(String portalName) + { + try + { + CountersService countersService = + (CountersService) ctx.lookup(CountersService.class.getName()); countersService.updateCounters(downloadCounters); - } catch (Exception e) + } + catch (Exception e) { - getLogger().error("Failed to persist downloadCounters",e); + getLogger().error("Failed to persist downloadCounters", e); } } - + /** * Method simply just increments the counter value for * given in parameter <link>. - * + * * @param link * Counter value for this <code>link</code> will be incremented. */ - synchronized public void increment (final String link) { - if (downloadCounters!=null && downloadCounters.get(link)!=null) { - // Status change to inform about counters modification. - downloadCounters.get(link).increment(); + public synchronized void increment(final String link) + { + if (downloadCounters != null && downloadCounters.get(link) != null) + { + // Status change to inform about counters modification. + downloadCounters.get(link).increment(); + System.out.println("DownloadCounters: "+link); + try + { + CountersService countersService = + (CountersService) ctx.lookup(CountersService.class.getName()); + countersService.incrementCounter(link); + + QueueSession sess = null; + Queue queue = null; + queue = (Queue) ctx.lookup("queue/jblab_counters"); + QueueConnectionFactory factory = + (QueueConnectionFactory) ctx.lookup("ConnectionFactory"); + sess =factory.createQueueConnection().createQueueSession(false, + QueueSession.AUTO_ACKNOWLEDGE); + if (sess != null) + { + TextMessage msg = sess.createTextMessage(link); + sess.createSender(queue).send(msg); + } } + catch (NamingException e) + { + getLogger().error("CountersService was not found while incrementing counter.",e); + } + catch (JMSException e) + { + getLogger().error("Problem while using JMS to send increment command to MDB.",e); + } + } } } Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersWatcher.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersWatcher.java 2006-05-08 01:42:58 UTC (rev 4116) +++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadCountersWatcher.java 2006-05-08 02:01:27 UTC (rev 4117) @@ -53,6 +53,7 @@ */ public DownloadCountersWatcher (ContentManager contentManager) { this.contentManager = contentManager; + //System.out.println("WATCHER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } @@ -68,7 +69,10 @@ * @return DownloadCountersDescriptor object. */ private Object getDescriptor (String portalName) { - DownloadCountersDescriptor descriptor = + + //System.out.println("GETDESCRIPTOR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + + DownloadCountersDescriptor descriptor = new DownloadCountersDescriptor(portalName, contentManager); rw = new ResourceWatcher(contentManager); // Registering ResourceWatcher to watch for main download counters xml file change. @@ -89,7 +93,8 @@ * If the object is changed the method returns new object if not returns null. */ public Object nodeUpdate(String portalName, Object currentValue) { - if (currentValue==null || rw.checkResources() + //System.out.println("NODE UPDATE!!!!!!!!!!!!!!"); + if (currentValue==null || rw.checkResources() || !checkForNewResources((DownloadCountersDescriptor)currentValue,portalName)) { return getDescriptor(portalName); } else if (((DownloadCountersDescriptor)currentValue).hasChanged()){ |
From: <jbo...@li...> - 2006-05-08 01:43:08
|
Author: mic...@jb... Date: 2006-05-07 21:42:58 -0400 (Sun, 07 May 2006) New Revision: 4116 Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin-sample.drl labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin.dsl Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java Log: added test for latin chars Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-05-07 23:47:05 UTC (rev 4115) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-05-08 01:42:58 UTC (rev 4116) @@ -19,6 +19,7 @@ import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Reader; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -32,6 +33,7 @@ import org.antlr.runtime.Lexer; import org.antlr.runtime.RecognitionException; import org.antlr.runtime.TokenStream; +import org.drools.compiler.DrlParser; import org.drools.lang.descr.AndDescr; import org.drools.lang.descr.AttributeDescr; import org.drools.lang.descr.BoundVariableDescr; @@ -96,7 +98,7 @@ assertFalse( parser.hasErrors() ); } - public void FIXME_testNewLinesFunnyBusiness() throws Exception { + public void FIXME_testKeywordCollisions() throws Exception { RuleParser parser = parseResource( "eol_funny_business.drl" ); parser.compilation_unit(); @@ -108,6 +110,18 @@ } + public void FIXME_testLatinChars() throws Exception { + DrlParser parser = new DrlParser(); + Reader drl = new InputStreamReader(this.getClass().getResourceAsStream( "latin-sample.drl" )); + Reader dsl = new InputStreamReader(this.getClass().getResourceAsStream( "latin.dsl" )); + + PackageDescr pkg = parser.parse( drl, dsl ); + assertFalse(parser.hasErrors()); + assertEquals("br.com.auster.drools.sample", pkg.getName()); + assertEquals(1, pkg.getRules().size()); + + } + public void testAlmostEmptyRule() throws Exception { RuleDescr rule = parseResource( "almost_empty_rule.drl" ).rule(); Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin-sample.drl =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin-sample.drl 2006-05-07 23:47:05 UTC (rev 4115) +++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin-sample.drl 2006-05-08 01:42:58 UTC (rev 4116) @@ -0,0 +1,13 @@ +package br.com.auster.drools.sample; + +import br.com.auster.drools.sample.SampleObject; + +expander latin.dsl; // so I had to change the filename to this + +rule "Latin Sample" + when + Objeto gual a 1 + then + Mostre Objeto +end + \ No newline at end of file Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin-sample.drl ___________________________________________________________________ Name: svn:eol-style + native Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin.dsl =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin.dsl 2006-05-07 23:47:05 UTC (rev 4115) +++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin.dsl 2006-05-08 01:42:58 UTC (rev 4116) @@ -0,0 +1,3 @@ +#place your comments here - this is just a description for your own purposes. +[then]Mostre {$object}=System.out.println({$object}); +[when]{$object} gual a {$value}={$object}: SampleObject(value == {$value}); Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/latin.dsl ___________________________________________________________________ Name: svn:eol-style + native |
From: <jbo...@li...> - 2006-05-07 23:47:24
|
Author: tirelli Date: 2006-05-07 19:47:05 -0400 (Sun, 07 May 2006) New Revision: 4115 Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaLeftMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultLeftMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaLeftMemoryTestClass.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaRightMemoryTestClass.java Log: Reversing index order creation Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaLeftMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaLeftMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaLeftMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import org.drools.WorkingMemory; import org.drools.common.InternalFactHandle; import org.drools.reteoo.ReteTuple; @@ -136,4 +138,19 @@ * @return */ public boolean isPossibleMatch(MultiLinkedListNodeWrapper tuple); + + /** + * Sets the inner beta left memory in case of a multi-indexed memory + * + * @param innerMemory + */ + public void setInnerMemory(BetaLeftMemory innerMemory) throws OperationNotSupportedException; + + /** + * Returns the inner beta left memory in case of a multi-indexed memory + * + * @return the inner beta left memory or null in case it is not a multi-indexed memory + */ + public BetaLeftMemory getInnerMemory() throws OperationNotSupportedException; + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -16,6 +16,8 @@ package org.drools.reteoo.beta; +import javax.naming.OperationNotSupportedException; + import org.drools.common.BetaNodeBinder; import org.drools.rule.BoundVariableConstraint; import org.drools.spi.Evaluator; @@ -31,6 +33,9 @@ */ public class BetaMemoryFactory { private static final String INDEX_DISABLED = "false"; + + public static final String INDEX_LEFT_BETA_MEMORY = "org.drools.reteoo.beta.index-left"; + public static final String INDEX_RIGHT_BETA_MEMORY = "org.drools.reteoo.beta.index-right"; protected BetaMemoryFactory() { } @@ -46,17 +51,18 @@ */ public static BetaLeftMemory newLeftMemory(BetaNodeBinder binder) { BetaLeftMemory memory = null; + BetaLeftMemory innerMostMemory = null; FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null; - if ( (constraints != null) && (!INDEX_DISABLED.equalsIgnoreCase( System.getProperty( "org.drools.beta-indexing" ) )) ) { + if ( (constraints != null) && (!INDEX_DISABLED.equalsIgnoreCase( System.getProperty( INDEX_LEFT_BETA_MEMORY ) )) ) { for ( int i = 0; i < constraints.length; i++ ) { if ( constraints[i] instanceof BoundVariableConstraint ) { BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i]; + BetaLeftMemory innerMemory = null; switch ( bvc.getEvaluator().getType() ) { case Evaluator.BOOLEAN_TYPE : - memory = new BooleanConstrainedLeftMemory( bvc.getFieldExtractor(), + innerMemory = new BooleanConstrainedLeftMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); break; case Evaluator.OBJECT_TYPE : case Evaluator.SHORT_TYPE : @@ -65,18 +71,29 @@ case Evaluator.FLOAT_TYPE : case Evaluator.BYTE_TYPE : if ( bvc.getEvaluator().getOperator() == Evaluator.EQUAL ) { - memory = new ObjectEqualConstrLeftMemory( bvc.getFieldExtractor(), + innerMemory = new ObjectEqualConstrLeftMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); } else if ( bvc.getEvaluator().getOperator() == Evaluator.NOT_EQUAL ) { - memory = new ObjectNotEqualConstrLeftMemory( bvc.getFieldExtractor(), + innerMemory = new ObjectNotEqualConstrLeftMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); } break; } + if( innerMemory != null ) { + if (innerMostMemory != null) { + try { + innerMostMemory.setInnerMemory( innerMemory ); + innerMostMemory = innerMemory; + } catch ( OperationNotSupportedException e ) { + throw new RuntimeException("BUG: Exception was not supposed to be raised", e); + } + } else { + memory = innerMemory; + innerMostMemory = memory; + } + } } } } @@ -97,17 +114,18 @@ */ public static BetaRightMemory newRightMemory(BetaNodeBinder binder) { BetaRightMemory memory = null; + BetaRightMemory innerMostMemory = null; FieldConstraint[] constraints = (binder != null) ? binder.getConstraints() : null; - if ( (constraints != null) && (!INDEX_DISABLED.equalsIgnoreCase( System.getProperty( "org.drools.beta-indexing" ) )) ) { + if ( (constraints != null) && (!INDEX_DISABLED.equalsIgnoreCase( System.getProperty( INDEX_RIGHT_BETA_MEMORY ) )) ) { for ( int i = 0; i < constraints.length; i++ ) { if ( constraints[i] instanceof BoundVariableConstraint ) { BoundVariableConstraint bvc = (BoundVariableConstraint) constraints[i]; + BetaRightMemory innerMemory = null; switch ( bvc.getEvaluator().getType() ) { case Evaluator.BOOLEAN_TYPE : - memory = new BooleanConstrainedRightMemory( bvc.getFieldExtractor(), + innerMemory = new BooleanConstrainedRightMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); break; case Evaluator.OBJECT_TYPE : case Evaluator.SHORT_TYPE : @@ -116,18 +134,29 @@ case Evaluator.FLOAT_TYPE : case Evaluator.BYTE_TYPE : if ( bvc.getEvaluator().getOperator() == Evaluator.EQUAL ) { - memory = new ObjectEqualConstrRightMemory( bvc.getFieldExtractor(), + innerMemory = new ObjectEqualConstrRightMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); } else if ( bvc.getEvaluator().getOperator() == Evaluator.NOT_EQUAL ) { - memory = new ObjectNotEqualConstrRightMemory( bvc.getFieldExtractor(), + innerMemory = new ObjectNotEqualConstrRightMemory( bvc.getFieldExtractor(), bvc.getRequiredDeclarations()[0], - bvc.getEvaluator(), - memory ); + bvc.getEvaluator()); } break; } + if( innerMemory != null ) { + if (innerMostMemory != null) { + try { + innerMostMemory.setInnerMemory( innerMemory ); + innerMostMemory = innerMemory; + } catch ( OperationNotSupportedException e ) { + throw new RuntimeException("BUG: Exception was not supposed to be raised", e); + } + } else { + memory = innerMemory; + innerMostMemory = memory; + } + } } } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaRightMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import org.drools.WorkingMemory; import org.drools.reteoo.ObjectMatches; import org.drools.reteoo.ReteTuple; @@ -133,4 +135,18 @@ */ public boolean isPossibleMatch(MultiLinkedListNodeWrapper matches); + /** + * Sets the inner beta right memory in case of a multi-indexed memory + * + * @param innerMemory + */ + public void setInnerMemory(BetaRightMemory innerMemory) throws OperationNotSupportedException; + + /** + * Returns the inner beta right memory in case of a multi-indexed memory + * + * @return the inner beta right memory or null in case it is not a multi-indexed memory + */ + public BetaRightMemory getInnerMemory() throws OperationNotSupportedException; + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -41,7 +41,7 @@ implements BetaLeftMemory { - private BetaLeftMemory childMemory = null; + private BetaLeftMemory innerMemory = null; private MultiLinkedList trueList = null; private MultiLinkedList falseList = null; @@ -69,7 +69,7 @@ this.declaration = declaration; this.column = declaration.getColumn(); this.evaluator = evaluator; - this.childMemory = childMemory; + this.innerMemory = childMemory; this.trueList = new MultiLinkedList(); this.falseList = new MultiLinkedList(); } @@ -87,9 +87,9 @@ } else { falseList.add( tuple ); } - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { tuple.setChild( new MultiLinkedListNodeWrapper( tuple ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, ((MultiLinkedListNodeWrapper) tuple.getChild()) ); } } @@ -101,8 +101,8 @@ */ public final void remove(WorkingMemory workingMemory, ReteTuple tuple) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) tuple.getChild() ); } tuple.getLinkedList().remove( tuple ); @@ -121,9 +121,9 @@ } else { falseList.add( tuple ); } - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { tuple.setChild( new MultiLinkedListNodeWrapper( tuple.getNode() ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, ((MultiLinkedListNodeWrapper) tuple.getChild()) ); } } @@ -135,8 +135,8 @@ */ public final void remove(WorkingMemory workingMemory, MultiLinkedListNodeWrapper tuple) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) tuple.getChild() ); } tuple.getLinkedList().remove( tuple ); @@ -169,7 +169,7 @@ boolean hasnext = false; if ( next == null ) { while ( candidate != null ) { - if ( (childMemory == null) || (childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { + if ( (innerMemory == null) || (innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { hasnext = true; next = candidate; candidate = (MultiLinkedListNode) candidate.getNext(); @@ -287,8 +287,8 @@ } else { this.selectedList = falseList; } - if ( this.childMemory != null ) { - this.childMemory.selectPossibleMatches( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.selectPossibleMatches( workingMemory, handle ); } } @@ -300,8 +300,8 @@ */ public final boolean isPossibleMatch(MultiLinkedListNodeWrapper tuple) { boolean isPossible = ((this.selectedList != null) && (tuple.getLinkedList() == this.selectedList)); - if ( (isPossible) && (this.childMemory != null) ) { - isPossible = this.childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) tuple.getChild() ); + if ( (isPossible) && (this.innerMemory != null) ) { + isPossible = this.innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) tuple.getChild() ); } return isPossible; } @@ -310,4 +310,18 @@ return this.trueList.size() + this.falseList.size(); } + /** + * @inheritDoc + */ + public BetaLeftMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaLeftMemory innerMemory) { + this.innerMemory = innerMemory; + } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -43,7 +43,7 @@ implements BetaRightMemory { - private BetaRightMemory childMemory = null; + private BetaRightMemory innerMemory = null; private MultiLinkedList trueList = null; private MultiLinkedList falseList = null; @@ -71,7 +71,7 @@ this.declaration = declaration; this.column = declaration.getColumn(); this.evaluator = evaluator; - this.childMemory = childMemory; + this.innerMemory = childMemory; this.trueList = new MultiLinkedList(); this.falseList = new MultiLinkedList(); } @@ -87,9 +87,9 @@ matches.getFactHandle() ); list.add( matches ); - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { matches.setChild( new MultiLinkedListNodeWrapper( matches ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild() ); } @@ -103,8 +103,8 @@ */ public final void remove(WorkingMemory workingMemory, ObjectMatches matches) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild() ); } matches.getLinkedList().remove( matches ); @@ -123,9 +123,9 @@ matches.getFactHandle() ); list.add( wrapper ); - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { wrapper.setChild( new MultiLinkedListNodeWrapper( matches ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) wrapper.getChild() ); } } @@ -138,8 +138,8 @@ */ public final void remove(WorkingMemory workingMemory, MultiLinkedListNodeWrapper wrapper) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) wrapper.getChild() ); } wrapper.getLinkedList().remove( wrapper ); @@ -163,7 +163,7 @@ boolean hasnext = false; if ( next == null ) { while ( candidate != null ) { - if ( (childMemory == null) || (childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { + if ( (innerMemory == null) || (innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { hasnext = true; next = candidate; candidate = (ObjectMatches) candidate.getNext(); @@ -218,8 +218,8 @@ select = (evaluator.getOperator()) == Evaluator.EQUAL ? select : !select; this.selectedList = (select == true) ? trueList : falseList; - if ( this.childMemory != null ) { - this.childMemory.selectPossibleMatches( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.selectPossibleMatches( workingMemory, tuple ); } } @@ -234,8 +234,8 @@ boolean ret = false; if ( this.selectedList != null ) { ret = matches.getLinkedList() == this.selectedList; - if ( ret && (this.childMemory != null) ) { - ret = this.childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) matches.getChild() ); + if ( ret && (this.innerMemory != null) ) { + ret = this.innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) matches.getChild() ); } } return ret; @@ -288,4 +288,19 @@ return set.iterator(); } + /** + * @inheritDoc + */ + public BetaRightMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaRightMemory innerMemory) { + this.innerMemory = innerMemory; + } + + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultLeftMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultLeftMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultLeftMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import org.drools.WorkingMemory; import org.drools.common.InternalFactHandle; import org.drools.reteoo.ReteTuple; @@ -121,5 +123,18 @@ return this.memory.size(); } + /** + * @inheritDoc + */ + public BetaLeftMemory getInnerMemory() throws OperationNotSupportedException { + throw new OperationNotSupportedException("Default left memory does not support inner memory"); + } + /** + * @inheritDoc + */ + public void setInnerMemory(BetaLeftMemory innerMemory) throws OperationNotSupportedException { + throw new OperationNotSupportedException("Default left memory does not support inner memory"); + } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/DefaultRightMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import org.drools.WorkingMemory; import org.drools.reteoo.ObjectMatches; import org.drools.reteoo.ReteTuple; @@ -145,4 +147,18 @@ return memory.iterator(); } + /** + * @inheritDoc + */ + public BetaRightMemory getInnerMemory() throws OperationNotSupportedException { + throw new OperationNotSupportedException("Default right memory does not support inner memory"); + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaRightMemory innerMemory) throws OperationNotSupportedException { + throw new OperationNotSupportedException("Default right memory does not support inner memory"); + } + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -47,7 +47,7 @@ implements BetaLeftMemory { - private BetaLeftMemory childMemory = null; + private BetaLeftMemory innerMemory = null; private Map memoryMap = null; private int size = 0; @@ -73,7 +73,7 @@ this.extractor = extractor; this.declaration = declaration; this.column = declaration.getColumn(); - this.childMemory = childMemory; + this.innerMemory = childMemory; this.memoryMap = new HashMap(); } @@ -88,9 +88,9 @@ tuple ); list.add( tuple ); this.size++; - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { tuple.setChild( new MultiLinkedListNodeWrapper( tuple ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, ((MultiLinkedListNodeWrapper) tuple.getChild()) ); } } @@ -102,8 +102,8 @@ */ public final void remove(WorkingMemory workingMemory, ReteTuple tuple) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) tuple.getChild() ); } LinkedList list = tuple.getLinkedList(); @@ -128,9 +128,9 @@ list.add( tuple ); this.size++; - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { tuple.setChild( new MultiLinkedListNodeWrapper( tuple.getNode() ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, ((MultiLinkedListNodeWrapper) tuple.getChild()) ); } } @@ -142,8 +142,8 @@ */ public final void remove(WorkingMemory workingMemory, MultiLinkedListNodeWrapper tuple) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) tuple.getChild() ); } @@ -186,7 +186,7 @@ boolean hasnext = false; if ( next == null ) { while ( candidate != null ) { - if ( (childMemory == null) || (childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { + if ( (innerMemory == null) || (innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { hasnext = true; next = candidate; candidate = (MultiLinkedListNode) candidate.getNext(); @@ -260,8 +260,8 @@ Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 ); this.selectedList = (MultiLinkedList) this.memoryMap.get( hash ); - if ( this.childMemory != null ) { - this.childMemory.selectPossibleMatches( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.selectPossibleMatches( workingMemory, handle ); } } @@ -354,4 +354,17 @@ } } + /** + * @inheritDoc + */ + public BetaLeftMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaLeftMemory innerMemory) { + this.innerMemory = innerMemory; + } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -47,7 +47,7 @@ implements BetaRightMemory { - private BetaRightMemory childMemory = null; + private BetaRightMemory innerMemory = null; private Map memoryMap = null; private int memorySize = 0; @@ -74,7 +74,7 @@ this.extractor = extractor; this.declaration = declaration; this.column = declaration.getColumn(); - this.childMemory = childMemory; + this.innerMemory = childMemory; this.memoryMap = new HashMap(); } @@ -91,9 +91,9 @@ list.add( matches ); this.memorySize++; - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { matches.setChild( new MultiLinkedListNodeWrapper( matches ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild() ); } } @@ -106,8 +106,8 @@ */ public final void remove(WorkingMemory workingMemory, ObjectMatches matches) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild() ); } KeyMultiLinkedList list = (KeyMultiLinkedList) matches.getLinkedList(); @@ -133,9 +133,9 @@ list.add( wrapper ); this.memorySize++; - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { wrapper.setChild( new MultiLinkedListNodeWrapper( matches ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) wrapper.getChild() ); } } @@ -148,8 +148,8 @@ */ public final void remove(WorkingMemory workingMemory, MultiLinkedListNodeWrapper matches) { - if ( this.childMemory != null ) { - this.childMemory.remove( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild() ); } KeyMultiLinkedList list = (KeyMultiLinkedList) matches.getLinkedList(); @@ -180,7 +180,7 @@ boolean hasnext = false; if ( next == null ) { while ( candidate != null ) { - if ( (childMemory == null) || (childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { + if ( (innerMemory == null) || (innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild() )) ) { hasnext = true; next = candidate; candidate = (ObjectMatches) candidate.getNext(); @@ -236,8 +236,8 @@ Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 ); this.selectedList = (MultiLinkedList) this.memoryMap.get( hash ); - if ( this.childMemory != null ) { - this.childMemory.selectPossibleMatches( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.selectPossibleMatches( workingMemory, tuple ); } } @@ -246,8 +246,8 @@ boolean ret = false; if ( this.selectedList != null ) { ret = wrapper.getLinkedList() == this.selectedList; - if ( ret && (this.childMemory != null) ) { - ret = this.childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) wrapper.getChild() ); + if ( ret && (this.innerMemory != null) ) { + ret = this.innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) wrapper.getChild() ); } } return ret; @@ -324,6 +324,20 @@ return set.iterator(); } + /** + * @inheritDoc + */ + public BetaRightMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaRightMemory innerMemory) { + this.innerMemory = innerMemory; + } + private static class KeyMultiLinkedList extends MultiLinkedList { private final Object key; @@ -335,4 +349,6 @@ return this.key; } } + + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -340,6 +340,20 @@ return ret; } + /** + * @inheritDoc + */ + public BetaLeftMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaLeftMemory innerMemory) { + this.innerMemory = innerMemory; + } + private static class KeyMultiLinkedList extends MultiLinkedList { private final Object key; Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -43,7 +43,7 @@ implements BetaRightMemory { - private BetaRightMemory childMemory = null; + private BetaRightMemory innerMemory = null; private Map memoryMap = null; private MultiLinkedList memoryMasterList = null; @@ -69,7 +69,7 @@ this.extractor = extractor; this.declaration = declaration; this.column = declaration.getColumn(); - this.childMemory = childMemory; + this.innerMemory = childMemory; this.memoryMap = new HashMap(); this.memoryMasterList = new MultiLinkedList(); } @@ -94,10 +94,10 @@ matches.getFactHandle() ); list.add( wrapper ); - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { // Adding to inner indexes wrapper.setChild( new MultiLinkedListNodeWrapper( matches ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) wrapper.getChild() ); } } @@ -110,9 +110,9 @@ */ public final void remove(WorkingMemory workingMemory, ObjectMatches matches) { - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { // removing from inner indexes - this.childMemory.remove( workingMemory, + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild().getChild() ); matches.getChild().setChild( null ); } @@ -152,10 +152,10 @@ om.getFactHandle() ); list.add( wrapper ); - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { // Adding to inner indexes wrapper.setChild( new MultiLinkedListNodeWrapper( om ) ); - this.childMemory.add( workingMemory, + this.innerMemory.add( workingMemory, (MultiLinkedListNodeWrapper) wrapper.getChild() ); } } @@ -168,9 +168,9 @@ */ public final void remove(WorkingMemory workingMemory, MultiLinkedListNodeWrapper matches) { - if ( this.childMemory != null ) { + if ( this.innerMemory != null ) { // removing from inner indexes - this.childMemory.remove( workingMemory, + this.innerMemory.remove( workingMemory, (MultiLinkedListNodeWrapper) matches.getChild().getChild() ); matches.getChild().setChild( null ); } @@ -208,7 +208,7 @@ if ( next == null ) { while ( candidate != null ) { if ( candidate.getChild().getLinkedList() != noMatchList ) { - if ( (childMemory == null) || (childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild().getChild() )) ) { + if ( (innerMemory == null) || (innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) candidate.getChild().getChild() )) ) { hasnext = true; next = candidate; candidate = (ObjectMatches) candidate.getNext(); @@ -263,8 +263,8 @@ Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 ); this.noMatchList = (MultiLinkedList) this.memoryMap.get( hash ); - if ( this.childMemory != null ) { - this.childMemory.selectPossibleMatches( workingMemory, + if ( this.innerMemory != null ) { + this.innerMemory.selectPossibleMatches( workingMemory, tuple ); } } @@ -279,8 +279,8 @@ if ( (matches != null) && (matches.getChild() != null) && (matches.getChild().getLinkedList() != null) ) { ret = (matches.getChild().getLinkedList() != noMatchList); - if ( ret && (this.childMemory != null) ) { - ret = this.childMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) matches.getChild().getChild() ); + if ( ret && (this.innerMemory != null) ) { + ret = this.innerMemory.isPossibleMatch( (MultiLinkedListNodeWrapper) matches.getChild().getChild() ); } } return ret; @@ -347,6 +347,20 @@ return this.memoryMasterList.iterator(); } + /** + * @inheritDoc + */ + public BetaRightMemory getInnerMemory() { + return innerMemory; + } + + /** + * @inheritDoc + */ + public void setInnerMemory(BetaRightMemory innerMemory) { + this.innerMemory = innerMemory; + } + private static class KeyMultiLinkedList extends MultiLinkedList { private final Object key; Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaLeftMemoryTestClass.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaLeftMemoryTestClass.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaLeftMemoryTestClass.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import junit.framework.Assert; import junit.framework.TestCase; @@ -428,6 +430,13 @@ public int getCounter() { return this.callCounter; } + + public BetaLeftMemory getInnerMemory() throws OperationNotSupportedException { + return null; + } + + public void setInnerMemory(BetaLeftMemory innerMemory) throws OperationNotSupportedException { + } }; } Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaRightMemoryTestClass.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaRightMemoryTestClass.java 2006-05-07 20:39:41 UTC (rev 4114) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BaseBetaRightMemoryTestClass.java 2006-05-07 23:47:05 UTC (rev 4115) @@ -18,6 +18,8 @@ import java.util.Iterator; +import javax.naming.OperationNotSupportedException; + import junit.framework.Assert; import junit.framework.TestCase; @@ -424,5 +426,12 @@ public int getCounter() { return this.callCounter; } + + public BetaRightMemory getInnerMemory() throws OperationNotSupportedException { + return null; + } + + public void setInnerMemory(BetaRightMemory innerMemory) throws OperationNotSupportedException { + } } } |
From: <jbo...@li...> - 2006-05-07 20:39:45
|
Author: mfrandsen Date: 2006-05-07 16:39:41 -0400 (Sun, 07 May 2006) New Revision: 4114 Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetProviderImpl.java Log: createRuleExecutionSet works now with drools2.5 code and XmlPackageReader as DefaultHandler Modified: labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetProviderImpl.java =================================================================== --- labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetProviderImpl.java 2006-05-06 23:25:33 UTC (rev 4113) +++ labs/jbossrules/trunk/drools-jsr94/src/main/java/org/drools/jsr94/rules/admin/RuleExecutionSetProviderImpl.java 2006-05-07 20:39:41 UTC (rev 4114) @@ -2,13 +2,13 @@ /* * Copyright 2005 JBoss Inc - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,23 +22,30 @@ import java.io.Reader; import java.io.Serializable; import java.io.StringReader; +import java.io.StringWriter; import java.net.URL; import java.util.Map; import javax.rules.admin.RuleExecutionSet; import javax.rules.admin.RuleExecutionSetCreateException; import javax.rules.admin.RuleExecutionSetProvider; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import org.drools.compiler.DrlParser; -import org.drools.compiler.DroolsParserException; +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; import org.drools.compiler.PackageBuilder; import org.drools.lang.descr.PackageDescr; import org.drools.rule.Package; +import org.drools.xml.XmlPackageReader; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.sax.SAXResult; /** * The Drools implementation of the <code>RuleExecutionSetProvider</code> @@ -73,46 +80,40 @@ */ public RuleExecutionSet createRuleExecutionSet(Element ruleExecutionSetElement, Map properties) throws RuleExecutionSetCreateException { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder; + try + { +// Prepare the DOM source + Source source = new DOMSource( ruleExecutionSetElement ); - try { - /* - * This should unpack rules from a xml-file, which has the following structure: - * <rule-execution-set> - <name>RuleExecutionSet2</name> - <description>Stateful RuleExecutionSet for the TCK for Drools</description> - <code> - <!-- enter rules code for Drools 3 here --> - </code> - </rule-execution-set> - */ - docBuilder = factory.newDocumentBuilder(); - Document doc1 = docBuilder.newDocument(); - doc1.appendChild( ruleExecutionSetElement ); - Reader reader = new StringReader( ruleExecutionSetElement.getChildNodes().item( 2 ).getNodeValue() ); + XmlPackageReader xmlPackageReader = new XmlPackageReader( ); + // Prepare the result + SAXResult result = new SAXResult( xmlPackageReader ); - DrlParser parser = new DrlParser(); - PackageDescr packageDescr; - packageDescr = parser.parse( reader ); + // Create a transformer + Transformer xformer = + TransformerFactory.newInstance( ).newTransformer( ); - // pre build the package - PackageBuilder builder = new PackageBuilder(); - builder.addPackage( packageDescr ); - Package pkg = builder.getPackage(); + // Traverse the DOM tree + xformer.transform( source, result ); - LocalRuleExecutionSetProviderImpl localRuleExecutionSetProvider = new LocalRuleExecutionSetProviderImpl(); - return localRuleExecutionSetProvider.createRuleExecutionSet( pkg, - properties ); + PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); - } catch ( ParserConfigurationException e ) { - throw new RuleExecutionSetCreateException( "could not create RuleExecutionSet: " + e ); - } catch ( IOException e ) { - throw new RuleExecutionSetCreateException( "could not create RuleExecutionSet: " + e ); - } catch ( DroolsParserException e ) { - throw new RuleExecutionSetCreateException( "could not create RuleExecutionSet: " + e ); - } + // pre build the package + PackageBuilder builder = new PackageBuilder(); + builder.addPackage( packageDescr ); + Package pkg = builder.getPackage(); + LocalRuleExecutionSetProviderImpl localRuleExecutionSetProvider = new LocalRuleExecutionSetProviderImpl(); + return localRuleExecutionSetProvider.createRuleExecutionSet( pkg, + properties ); + } + catch ( TransformerException e ) + { + throw new RuleExecutionSetCreateException( + "could not create RuleExecutionSet: " + e ); + } + + } /** |
From: <jbo...@li...> - 2006-05-06 23:25:37
|
Author: mar...@jb... Date: 2006-05-06 19:25:33 -0400 (Sat, 06 May 2006) New Revision: 4113 Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java Log: -XorGroup does not work in leaps, overriding method so the build works. Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-06 21:34:40 UTC (rev 4112) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java 2006-05-06 23:25:33 UTC (rev 4113) @@ -126,4 +126,8 @@ public void testLogicalAssertions2() throws Exception { // Not working in leaps } + + public void testXorGroups() throws Exception { + // Not Working in leaps + } } |
From: <jbo...@li...> - 2006-05-06 21:34:42
|
Author: jfr...@jb... Date: 2006-05-06 17:34:40 -0400 (Sat, 06 May 2006) New Revision: 4112 Modified: labs/jbossweb/trunk/src/share/native/build/buildphp.sh Log: Also build on Solaris. Modified: labs/jbossweb/trunk/src/share/native/build/buildphp.sh =================================================================== --- labs/jbossweb/trunk/src/share/native/build/buildphp.sh 2006-05-06 21:05:25 UTC (rev 4111) +++ labs/jbossweb/trunk/src/share/native/build/buildphp.sh 2006-05-06 21:34:40 UTC (rev 4112) @@ -12,9 +12,59 @@ PHPVER=5.1.4 URL=http://de.php.net/distributions/php-${PHPVER}.tar.gz +# +# depending on machine remove or add php extensions. +case `uname -n` in + dev12) + # -with-libxml-dir=/usr/local but 2.6.11 needed. + ADDCONF="--disable-libxml \ + --disable-simplexml \ + --disable-soap \ + --with-libexpat-dir=/usr/local \ + --disable-xmlreader \ + --with-xmlrpc=no \ + --disable-xmlwriter \ + --with-xsl=no \ + --with-curl=no \ + --disable-dom \ + --with-jpeg-dir=/usr/sfw \ + --with-png-dir=/usr/sfw \ + --with-freetype-dir=/usr/sfw \ + --with-t1lib=no \ + --with-imap=no \ + --with-mcrypt=no \ + --with-mhash=no \ + --with-mysql=no \ + --with-mysqli=no \ + --with-pdo-mysql=no \ + --with-pgsql=no \ + --with-pdo-pgsql=no \ + --with-pspell=no \ + --with-readline=no \ + --with-tidy=no \ + " + ;; + *) + ADDCONF="\ + --with-jpeg-dir \ + --with-png-dir \ + --with-freetype-dir \ + --with-t1lib \ + " + ;; +esac +# # get and extract php -wget $URL -tar zxf php-${PHPVER}.tar.gz +if [ ! -f php-${PHPVER}.tar.gz ] +then + wget $URL +fi +if [ ! -d php-${PHPVER} ] +then + gzip -dc php-${PHPVER}.tar.gz | tar xvf - +fi +echo "Adding to default configuration:: ${ADDCONF}" + (cd php-${PHPVER} ./configure --prefix=$HOME/PHP \ --with-tsrm-pthreads --enable-shared \ @@ -23,13 +73,9 @@ --with-imap-ssl \ --enable-all=shared \ --enable-gd-native-ttf \ - --with-jpeg-dir \ - --with-png-dir \ --with-zlib-dir \ --with-xpm-dir \ --with-ttf \ - --with-freetype-dir \ - --with-t1lib \ --with-fbsql=no \ --with-fdftk=no \ --with-gmp=no \ @@ -53,11 +99,32 @@ \ --with-msql=no \ \ + ${ADDCONF} \ + \ --enable-maintainer-zts +) +if [ $? -ne 0 ] +then + echo "Configure failed" + exit 1 +fi +(cd php-${PHPVER} make +) +if [ $? -ne 0 ] +then + echo "Make failed" + exit 1 +fi +(cd php-${PHPVER} make install ) -rm php-${PHPVER}.tar.gz +if [ $? -ne 0 ] +then + echo "Make install failed" + exit 1 +fi +#rm php-${PHPVER}.tar.gz # Now build the native part of the php5servlet #-DZTS is the php Thread Safe Resource Manager @@ -71,5 +138,5 @@ -I $HOME/PHP/include/php \ -DZTS -DPTHREADS \ php5servlet.c - gcc -shared -o libphp5servlet.so php5servlet.o -L $HOME/PHP/lib -lphp5 + ld -G -o libphp5servlet.so php5servlet.o -L $HOME/PHP/lib -lphp5 ) |
From: <jbo...@li...> - 2006-05-06 21:16:54
|
Author: wrzep Date: 2006-05-06 17:05:25 -0400 (Sat, 06 May 2006) New Revision: 4111 Modified: labs/jbosslabs/trunk/portal-extensions/binaries/maven-repo-addons/kosmos/jars/kosmos-server.jar labs/jbosslabs/trunk/portal-extensions/forge-kosmos/conf/server/kosmos-services-servlet.xml labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/LabsCachedDataStore.java labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/ShotokuCachedDataStore.java labs/jbosslabs/trunk/portal-extensions/forge-kosmos/to-copy/kosmos-server.war labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/Tags.java Log: JBLAB-599 JBLAB-643 Pawel Modified: labs/jbosslabs/trunk/portal-extensions/binaries/maven-repo-addons/kosmos/jars/kosmos-server.jar =================================================================== (Binary files differ) Modified: labs/jbosslabs/trunk/portal-extensions/forge-kosmos/conf/server/kosmos-services-servlet.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-kosmos/conf/server/kosmos-services-servlet.xml 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-kosmos/conf/server/kosmos-services-servlet.xml 2006-05-06 21:05:25 UTC (rev 4111) @@ -4,42 +4,116 @@ <beans> <!-- CC service --> <bean id="ccService" class="hu.midori.kosmos.server.cc.CcServiceImpl"> - <property name="store" ref="labsCachedDataStore"/> + <property name="store" ref="labsCachedDataStore"/> </bean> + + <bean id="ccServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> + <property name="targetName" value="ccService"/> + <property name="interceptorNames"> + <list> + <value>serviceCachePointCutAdvisor</value> + </list> + </property> + </bean> + <bean name="/cc-service" class="org.springframework.remoting.caucho.HessianServiceExporter"> - <property name="service" ref="ccService"/> - <property name="serviceInterface" value="hu.midori.kosmos.protocol.CcService"/> + <property name="service" ref="ccServiceProxy"/> + <property name="serviceInterface" value="hu.midori.kosmos.protocol.CcService"/> </bean> <!-- JIRA service --> - <bean id="jiraService" class="hu.midori.kosmos.server.jira.JiraServiceImpl"> - <property name="store" ref="labsCachedDataStore"/> + <bean id="jiraService" class="hu.midori.kosmos.server.jira.JiraWebCrawlingServiceImpl"> + <property name="store" ref="labsCachedDataStore"/> </bean> - <bean name="/jira-service" class="org.springframework.remoting.caucho.HessianServiceExporter"> - <property name="service" ref="jiraService"/> - <property name="serviceInterface" value="hu.midori.kosmos.protocol.JiraService"/> + + <bean id="jiraServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> + <property name="targetName" value="jiraService"/> + <property name="interceptorNames"> + <list> + <value>serviceCachePointCutAdvisor</value> + </list> + </property> </bean> - <!-- SF service --> - <bean id="sfService" class="hu.midori.kosmos.server.sf.SfServiceImpl"> - <property name="store" ref="labsCachedDataStore"/> + <bean name="/jira-service" class="org.springframework.remoting.caucho.HessianServiceExporter"> + <property name="service" ref="jiraServiceProxy"/> + <property name="serviceInterface" value="hu.midori.kosmos.protocol.JiraService"/> </bean> - <bean name="/sf-service" class="org.springframework.remoting.caucho.HessianServiceExporter"> - <property name="service" ref="sfService"/> - <property name="serviceInterface" value="hu.midori.kosmos.protocol.SfService"/> - </bean> <!-- SVN service --> <bean id="svnService" class="hu.midori.kosmos.server.svn.SvnServiceImpl"> - <property name="store" ref="labsCachedDataStore"/> + <property name="store" ref="labsCachedDataStore"/> </bean> + + <bean id="svnServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> + <property name="targetName" value="svnService"/> + <property name="interceptorNames"> + <list> + <value>serviceCachePointCutAdvisor</value> + </list> + </property> + </bean> + <bean name="/svn-service" class="org.springframework.remoting.caucho.HessianServiceExporter"> - <property name="service" ref="svnService"/> - <property name="serviceInterface" value="hu.midori.kosmos.protocol.SvnService"/> + <property name="service" ref="svnServiceProxy"/> + <property name="serviceInterface" value="hu.midori.kosmos.protocol.SvnService"/> </bean> - + + <!-- Service result POJO cache --> + <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> + <property name="configLocation" value="classpath:ehcache.xml"/> + </bean> + + <bean id="serviceResultCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> + <property name="cacheManager" ref="cacheManager"/> + <property name="cacheName" value="hu.midori.kosmos.server.cache"/> + </bean> + + <!-- Service result cache interceptor --> + <bean id="serviceCacheInterceptor" class="hu.midori.kosmos.server.MethodResultCacheInterceptor"> + <property name="cache" ref="serviceResultCache" /> + </bean> + + <bean id="serviceCachePointCutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> + <property name="advice"> + <ref local="serviceCacheInterceptor"/> + </property> + <property name="patterns"> + <list> + <value>hu.midori.kosmos.protocol.CcService.getProjects</value> + <value>hu.midori.kosmos.protocol.JiraService.getProjects</value> + <value>hu.midori.kosmos.protocol.SfService.getFileReleases</value> + <value>hu.midori.kosmos.protocol.SvnService.getRepositories</value> + </list> + </property> + </bean> + + <!-- Service result update scheduler --> + <bean name="serviceResultUpdaterJob" class="org.springframework.scheduling.quartz.JobDetailBean"> + <property name="jobClass" value="hu.midori.kosmos.server.ServiceResultUpdaterJob"/> + <property name="jobDataAsMap"> + <map> + <entry key="cache" value-ref="serviceResultCache"/> + </map> + </property> + </bean> + + <bean id="serviceResultUpdateTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> + <property name="jobDetail" ref="serviceResultUpdaterJob"/> + <property name="startDelay" value="7200000"/><!-- start and repeat in every 2 hours --> + <property name="repeatInterval" value="7200000"/> + </bean> + + <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> + <property name="triggers"> + <list> + <ref bean="serviceResultUpdateTrigger"/> + </list> + </property> + </bean> + <!-- Labs cached data store --> <bean id="labsCachedDataStore" class="org.jboss.kosmos.LabsCachedDataStore"> </bean> - -</beans> \ No newline at end of file + +</beans> Modified: labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/LabsCachedDataStore.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/LabsCachedDataStore.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/LabsCachedDataStore.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -31,14 +31,14 @@ import org.jboss.forge.common.TempFileDescriptor; import org.jboss.shotoku.tools.Tools; -import hu.midori.kosmos.server.CachedDataStore; +import hu.midori.kosmos.server.store.StaticContentStore; /** * * @author Tomasz Szyma??ski (tom...@jb...) * @author <a href="mailto:aro...@mi...">Aron Gombas</a> */ -public class LabsCachedDataStore implements CachedDataStore { +public class LabsCachedDataStore implements StaticContentStore { public String storeFile(String fileName, InputStream in) throws Exception { Modified: labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/ShotokuCachedDataStore.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/ShotokuCachedDataStore.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-kosmos/src/java/org/jboss/kosmos/ShotokuCachedDataStore.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -31,14 +31,14 @@ import org.jboss.shotoku.Node; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; -import hu.midori.kosmos.server.CachedDataStore; +import hu.midori.kosmos.server.store.StaticContentStore; /** * * @author Adam Warski (ad...@as...) * @author <a href="mailto:aro...@mi...">Aron Gombas</a> */ -public class ShotokuCachedDataStore implements CachedDataStore { +public class ShotokuCachedDataStore implements StaticContentStore { private String fileAccessUrl; private String prefix; Modified: labs/jbosslabs/trunk/portal-extensions/forge-kosmos/to-copy/kosmos-server.war =================================================================== (Binary files differ) Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -23,8 +23,6 @@ package org.jboss.forge.status.plugins.cc; import java.util.List; -import java.util.Map; - import java.net.MalformedURLException; import org.jboss.forge.status.plugins.KosmosStatusPlugin; Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -38,12 +38,17 @@ @Override protected int getPluginSpecyficValue(Object repository) { SvnRepository repo = (SvnRepository) repository; + + System.out.println("revision " + repo.getRevision() + + " / " + Long.valueOf(repo.getRevision()).intValue()); + return Long.valueOf(repo.getRevision()).intValue(); //TODO possible out of range } @Override protected int getPluginSpecyficDefaultValue() { + System.out.println("default value"); return 0; } Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -91,7 +91,7 @@ if ((repositories != null) && (repositories.size() > 0)) { repository = repositories.get(0); } - + return repository; } Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/Tags.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/Tags.java 2006-05-06 15:51:26 UTC (rev 4110) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/tools/Tags.java 2006-05-06 21:05:25 UTC (rev 4111) @@ -68,11 +68,11 @@ /* project.xml files tags */ public static final String JIRA_SERVICE_PROPERTY = "jira-service"; - public static final String JIRA_ADRESS_TAG = "jira-adress"; + public static final String JIRA_ADRESS_TAG = "jira-address"; public static final String SVN_SERVICE_PROPERTY = "svn-service"; public static final String CC_SERVICE_PROPERTY = "cc-service"; - public static final String CC_ADRESS_TAG = "cc-adress"; + public static final String CC_ADRESS_TAG = "cc-address"; public static final String SVN_REPO_ADRESS_TAG = "svn-repo"; public static final String SVN_USERNAME_TAG = "svn-username"; |
Author: mar...@jb... Date: 2006-05-06 11:51:26 -0400 (Sat, 06 May 2006) New Revision: 4110 Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_XorGroups.drl Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java Log: JBRULES-259 Implement Xor Group -includes unit and integration tests JBRULES-258 Clear Agenda Group Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-05-06 15:51:12 UTC (rev 4109) +++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java 2006-05-06 15:51:26 UTC (rev 4110) @@ -199,6 +199,8 @@ } } else if ( name.equals( "agenda-group" ) ) { rule.setAgendaGroup( attributeDescr.getValue() ); + } else if ( name.equals( "xor-group" ) ) { + rule.setXorGroup( attributeDescr.getValue() ); } else if ( name.equals( "duration" ) ) { rule.setDuration( Long.parseLong( attributeDescr.getValue() ) ); rule.setAgendaGroup( "" ); Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-05-06 15:51:12 UTC (rev 4109) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2006-05-06 15:51:26 UTC (rev 4110) @@ -36,6 +36,7 @@ import org.drools.WorkingMemory; import org.drools.common.InternalFactHandle; import org.drools.common.LogicalDependency; +import org.drools.common.XorGroupNode; import org.drools.compiler.PackageBuilder; import org.drools.lang.descr.AndDescr; import org.drools.lang.descr.ColumnDescr; @@ -728,6 +729,16 @@ public void setActivated(boolean activated) { } + + public XorGroupNode getXorGroupNode() { + // TODO Auto-generated method stub + return null; + } + + public void setXorGroupNode(XorGroupNode xorGroupNode) { + // TODO Auto-generated method stub + + } } class MockTuple Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-06 15:51:12 UTC (rev 4109) +++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-05-06 15:51:26 UTC (rev 4110) @@ -57,6 +57,8 @@ import org.drools.lang.descr.PackageDescr; import org.drools.rule.Package; import org.drools.rule.Rule; +import org.drools.spi.AgendaGroup; +import org.drools.spi.XorGroup; /** * This contains the test cases for each engines implementation to execute. @@ -1105,6 +1107,49 @@ list.get( 7 ) ); } + public void testXorGroups() throws Exception { + PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_XorGroups.drl" ) ) ); + Package pkg = builder.getPackage(); + + RuleBase ruleBase = getRuleBase(); + ruleBase.addPackage( pkg ); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + List list = new ArrayList(); + workingMemory.setGlobal( "list", + list ); + + Cheese brie = new Cheese( "brie", + 12 ); + workingMemory.assertObject( brie ); + + XorGroup xorGroup0 = workingMemory.getAgenda().getXorGroup( "xor-group-0" ); + assertEquals( 2, xorGroup0.size() ); + + XorGroup xorGroup3 = workingMemory.getAgenda().getXorGroup( "xor-group-3" ); + assertEquals( 1, xorGroup3.size() ); + + AgendaGroup agendaGroup3 = workingMemory.getAgenda().getAgendaGroup( "agenda-group-3" ); + assertEquals( 1, agendaGroup3.size() ); + + AgendaGroup agendaGroupMain = workingMemory.getAgenda().getAgendaGroup( "MAIN" ); + assertEquals( 3, agendaGroupMain.size() ); + + workingMemory.clearAgendaGroup( "agenda-group-3" ); + assertEquals( 0, xorGroup3.size() ); + assertEquals( 0, agendaGroup3.size() ); + + workingMemory.fireAllRules(); + + assertEquals( 0, xorGroup0.size() ); + + assertEquals( 2, list.size() ); + assertEquals( "rule0", list.get(0)); + assertEquals( "rule2", list.get(1)); + + } + public void testDuration() throws Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration.drl" ) ) ); Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_XorGroups.drl =================================================================== --- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_XorGroups.drl 2006-05-06 15:51:12 UTC (rev 4109) +++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_XorGroups.drl 2006-05-06 15:51:26 UTC (rev 4110) @@ -0,0 +1,38 @@ +package org.drools.test; + +import org.drools.Cheese; + +global java.util.List list; + +rule "rule0" + salience 10 + xor-group "xor-group-0" + when + Cheese( ) + then + list.add( "rule0" ); +end + +rule "rule1" + xor-group "xor-group-0" + when + Cheese( ) + then + list.add( "rule1" ); +end + +rule "rul2" + when + Cheese( ) + then + list.add( "rule2" ); +end + +rule "rule3" + agenda-group "agenda-group-3" + xor-group "xor-group-3" + when + Cheese( ) + then + list.add( "rule3" ); +end |
From: <jbo...@li...> - 2006-05-06 15:51:25
|
Author: mar...@jb... Date: 2006-05-06 11:51:12 -0400 (Sat, 06 May 2006) New Revision: 4109 Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/XorGroup.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListObjectWrapper.java Removed: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SynchronizedWorkingMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/Agenda.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/WorkingMemoryImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java Log: JBRULES-259 Implement Xor Group -includes unit and integration tests JBRULES-258 Clear Agenda Group Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SynchronizedWorkingMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SynchronizedWorkingMemory.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/SynchronizedWorkingMemory.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -68,6 +68,10 @@ this.workingMemory.clearAgenda(); } + public synchronized void clearAgendaGroup(String group) { + this.workingMemory.clearAgendaGroup(group); + } + public synchronized boolean containsObject(FactHandle handle) { return this.workingMemory.containsObject( handle ); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -278,6 +278,11 @@ * */ void clearAgenda(); + + /** + * Clear the Agenda Group + */ + public void clearAgendaGroup(String group); /** * Forces the workingMemory to be derefenced from Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -105,6 +105,10 @@ public void clearAgenda() { this.workingMemory.clearAgenda(); } + + public void clearAgendaGroup(String group) { + this.workingMemory.clearAgendaGroup( group ); + } public Object get(Declaration declaration) { return declaration.getValue( this.tuple.get( declaration ).getObject() ); Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/Agenda.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/Agenda.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/Agenda.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -31,7 +31,10 @@ import org.drools.spi.AgendaGroup; import org.drools.spi.ConsequenceException; import org.drools.spi.KnowledgeHelper; +import org.drools.spi.XorGroup; import org.drools.util.LinkedListNode; +import org.drools.util.LinkedListObjectWrapper; +import org.drools.util.Queueable; /** * Rule-firing Agenda. @@ -65,6 +68,8 @@ /** Items time-delayed. */ private final Map agendaGroups; + + private final Map xorGroups; private final LinkedList focusStack; @@ -87,6 +92,7 @@ public Agenda(WorkingMemory workingMemory) { this.workingMemory = workingMemory; this.agendaGroups = new HashMap(); + this.xorGroups = new HashMap(); this.focusStack = new LinkedList(); // MAIN should always be the first AgendaGroup and can never be removed @@ -104,26 +110,6 @@ } /** - * Clears all Activations from the Agenda - * - */ - public void clearAgenda() { - EventSupport eventsupport = (EventSupport) this.workingMemory; - // Cancel all items and fire a Cancelled event for each Activation - for ( Iterator agendaGroupIterator = this.agendaGroups.values().iterator(); agendaGroupIterator.hasNext(); ) { - AgendaGroupImpl group = (AgendaGroupImpl) agendaGroupIterator.next(); - group.clear(); - } - - if ( this.scheduledActivations != null && !this.scheduledActivations.isEmpty() ) { - for ( ScheduledAgendaItem item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst(); item != null; item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst() ) { - item.remove(); - eventsupport.getAgendaEventSupport().fireActivationCancelled( item ); - } - } - } - - /** * Schedule an agenda item for delayed firing. * * @param item @@ -222,6 +208,15 @@ return (AgendaGroup[]) this.focusStack.toArray( new AgendaGroup[this.focusStack.size()] ); } + public XorGroup getXorGroup(String name) { + XorGroupImpl xorGroup = (XorGroupImpl) this.xorGroups.get( name ); + if (xorGroup == null) { + xorGroup = new XorGroupImpl( name ); + this.xorGroups.put( name, xorGroup ); + } + return xorGroup; + } + /** * Iterates all the <code>AgendGroup<code>s in the focus stack returning the total number of <code>Activation</code>s * @return @@ -268,6 +263,102 @@ } /** + * Clears all Activations from the Agenda + * + */ + public void clearAgenda() { + // Cancel all items and fire a Cancelled event for each Activation + for ( Iterator agendaGroupIterator = this.agendaGroups.values().iterator(); agendaGroupIterator.hasNext(); ) { + AgendaGroupImpl group = (AgendaGroupImpl) agendaGroupIterator.next(); + clearAgendaGroup( group ); + } + + EventSupport eventsupport = (EventSupport) this.workingMemory; + if ( this.scheduledActivations != null && !this.scheduledActivations.isEmpty() ) { + for ( ScheduledAgendaItem item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst(); item != null; item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst() ) { + item.remove(); + eventsupport.getAgendaEventSupport().fireActivationCancelled( item ); + } + } + } + + /** + * Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the + * the Xor Group. + * + * @param agendaGroup + */ + public void clearAgendaGroup(String name) { + AgendaGroupImpl agendaGroup = (AgendaGroupImpl) this.agendaGroups.get( name ); + if ( agendaGroup != null ) { + clearAgendaGroup( agendaGroup ); + } + } + + /** + * Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the + * the Xor Group. + * + * @param agendaGroup + */ + public void clearAgendaGroup(AgendaGroupImpl agendaGroup) { + EventSupport eventsupport = (EventSupport) this.workingMemory; + + Queueable[] queueable = agendaGroup.getQueueable(); + for(int i = 0, length = queueable.length; i < length; i++) { + AgendaItem item = (AgendaItem) queueable[i]; + if ( item == null ) { + continue; + } + + // this must be set false before removal from the XorGroup. Otherwise the XorGroup will also try to cancel the Actvation + item.setActivated( false ); + + if ( item.getXorGroupNode() != null ) { + item.getXorGroupNode().getXorGroup().removeActivation( item ); + } + + eventsupport.getAgendaEventSupport().fireActivationCancelled( item ); + } + agendaGroup.clear(); + } + + + /** + * Clears all Activations from an Xor Group. Any Activations that are also in an Agenda Group are removed + * from the Agenda Group. + * + * @param xorGroup + */ + public void clearXorGroup(String name) { + XorGroup xorGroup = (XorGroup) this.xorGroups.get( name ); + if ( xorGroup != null ) { + clearXorGroup( xorGroup ); + } + } + + /** + * Clears all Activations from an Xor Group. Any Activations that are also in an Agenda Group are removed + * from the Agenda Group. + * + * @param xorGroup + */ + public void clearXorGroup(XorGroup xorGroup) { + EventSupport eventsupport = (EventSupport) this.workingMemory; + for ( Iterator it = xorGroup.iterator(); it.hasNext(); ) { + Activation activation = ( Activation)( (XorGroupNode) it.next() ).getActivation(); + activation.setXorGroupNode( null ); + + if ( activation.isActivated() ) { + activation.setActivated( false ); + activation.remove(); + eventsupport.getAgendaEventSupport().fireActivationCancelled( activation ); + } + } + xorGroup.clear(); + } + + /** * Fire the next scheduled <code>Agenda</code> item. * * @throws ConsequenceException @@ -281,12 +372,12 @@ return false; } - Activation item = group.getNext(); + AgendaItem item = (AgendaItem) group.getNext(); if ( item == null ) { return false; } - if ( filter == null || filter.accept( item ) ) { + if ( filter == null || filter.accept( item ) ) { fireActivation( item ); } @@ -302,10 +393,17 @@ * @throws ConsequenceException * If an error occurs while attempting to fire the consequence. */ - public synchronized void fireActivation(Activation activation) throws ConsequenceException { + public synchronized void fireActivation(Activation activation) throws ConsequenceException { EventSupport eventsupport = (EventSupport) this.workingMemory; - eventsupport.getAgendaEventSupport().fireBeforeActivationFired( activation ); + eventsupport.getAgendaEventSupport().fireBeforeActivationFired( activation ); + + if ( activation.getXorGroupNode() != null ) { + XorGroup xorGroup = activation.getXorGroupNode().getXorGroup(); + xorGroup.removeActivation( activation ); + clearXorGroup(xorGroup); + } + activation.setActivated( false ); try { KnowledgeHelper knowledgeHelper = new org.drools.base.DefaultKnowledgeHelper( activation, @@ -319,5 +417,5 @@ eventsupport.getAgendaEventSupport().fireAfterActivationFired( activation ); } - + } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -19,11 +19,13 @@ import java.io.Serializable; import org.drools.FactHandle; +import org.drools.WorkingMemory; import org.drools.rule.Rule; import org.drools.spi.Activation; import org.drools.spi.PropagationContext; import org.drools.spi.Tuple; import org.drools.util.LinkedList; +import org.drools.util.LinkedListObjectWrapper; import org.drools.util.Queue; import org.drools.util.Queueable; @@ -63,6 +65,8 @@ private boolean activated; + private XorGroupNode xorGroupNode; + // ------------------------------------------------------------ // Constructors // ------------------------------------------------------------ @@ -199,4 +203,12 @@ public void remove() { dequeue(); } + + public XorGroupNode getXorGroupNode() { + return this.xorGroupNode; + } + + public void setXorGroupNode(XorGroupNode xorNode) { + this.xorGroupNode = xorNode; + } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -24,8 +24,10 @@ import org.drools.spi.Activation; import org.drools.spi.PropagationContext; import org.drools.spi.Tuple; +import org.drools.spi.XorGroup; import org.drools.util.LinkedList; import org.drools.util.LinkedListNode; +import org.drools.util.LinkedListObjectWrapper; /** * Item entry in the <code>Agenda</code>. @@ -60,6 +62,8 @@ private LinkedList justified; private boolean activated; + + private XorGroupNode xorGroupNode; // ------------------------------------------------------------ // Constructors @@ -128,7 +132,7 @@ * Handle the firing of an alarm. */ public void run() { - this.agenda.fireActivation( this ); + this.agenda.fireActivation( this ); this.agenda.getWorkingMemory().fireAllRules(); } @@ -179,7 +183,15 @@ public void setActivated(boolean activated) { this.activated = activated; } + + public XorGroupNode getXorGroupNode() { + return this.xorGroupNode; + } + public void setXorGroupNode(XorGroupNode xorGroupNode) { + this.xorGroupNode = xorGroupNode; + } + /* * (non-Javadoc) * Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupImpl.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupImpl.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -0,0 +1,52 @@ +package org.drools.common; + +import java.util.Iterator; + +import org.drools.spi.Activation; +import org.drools.spi.XorGroup; +import org.drools.util.LinkedList; +import org.drools.util.LinkedListObjectWrapper; + +public class XorGroupImpl implements XorGroup { + private String name; + + private final LinkedList list; + + public XorGroupImpl(String name) { + this.name = name; + this.list = new LinkedList(); + } + + public String getName() { + return this.name; + } + + public void addActivation(Activation activation) { + XorGroupNode node = new XorGroupNode(activation, this); + activation.setXorGroupNode( node ); + this.list.add( node ); + } + + public void removeActivation(Activation activation) { + XorGroupNode node = activation.getXorGroupNode( ); + this.list.remove( node ); + activation.setXorGroupNode( null ); + } + + public Iterator iterator() { + return this.list.iterator(); + } + + public boolean isEmpty() { + return this.list.isEmpty(); + } + + public int size() { + return this.list.size(); + } + + public void clear() { + this.list.clear(); + } + +} Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupNode.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/XorGroupNode.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -0,0 +1,30 @@ +package org.drools.common; + +import org.drools.spi.Activation; +import org.drools.spi.XorGroup; +import org.drools.util.AbstractBaseLinkedListNode; + +public class XorGroupNode extends AbstractBaseLinkedListNode { + + private Activation activation; + + private XorGroup xorGroup; + + public XorGroupNode(Activation activation, + XorGroup xorGroup) { + super(); + this.activation = activation; + this.xorGroup = xorGroup; + } + + public Activation getActivation() { + return this.activation; + } + + public XorGroup getXorGroup() { + return this.xorGroup; + } + + + +} Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/WorkingMemoryImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/WorkingMemoryImpl.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/WorkingMemoryImpl.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -119,6 +119,10 @@ public void clearAgenda() { this.agenda.clearAgenda(); } + + public void clearAgendaGroup(String group) { + this.agenda.clearAgendaGroup( group ); + } /** * Returns the fact Object for the given <code>FactHandle</code>. It Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -25,7 +25,7 @@ import org.drools.spi.PropagationContext; import org.drools.util.LinkedList; import org.drools.util.LinkedListNode; -import org.drools.util.LinkedListNodeWrapper; +import org.drools.util.LinkedListObjectWrapper; /** * All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Column @@ -148,7 +148,7 @@ ReteTuple tuple = new ReteTuple( handle ); - list.add( new LinkedListNodeWrapper( tuple ) ); + list.add( new LinkedListObjectWrapper( tuple ) ); if ( !getTupleSinks().isEmpty() ) { // We do this one seperately so we avoid another tuple replication @@ -158,7 +158,7 @@ for ( int i = 1; i < size; i++ ) { tuple = new ReteTuple( tuple ); - list.add( new LinkedListNodeWrapper( tuple ) ); + list.add( new LinkedListObjectWrapper( tuple ) ); ((TupleSink) getTupleSinks().get( i )).assertTuple( tuple, context, workingMemory ); @@ -190,7 +190,7 @@ if ( list != null ) { int i = 0; for ( LinkedListNode node = list.removeFirst(); node != null; node = list.removeFirst() ) { - ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } @@ -211,7 +211,7 @@ // already existed, so propagate as a modify int i = 0; for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) { - ((TupleSink) getTupleSinks().get( i++ )).modifyTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + ((TupleSink) getTupleSinks().get( i++ )).modifyTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } @@ -228,7 +228,7 @@ if ( list != null ) { int i = 0; for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) { - ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } @@ -251,7 +251,7 @@ for ( Iterator it = memory.values().iterator(); it.hasNext(); ) { LinkedList list = (LinkedList) it.next(); for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) { - sink.assertTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + sink.assertTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -30,6 +30,8 @@ import org.drools.spi.AgendaGroup; import org.drools.spi.Duration; import org.drools.spi.PropagationContext; +import org.drools.spi.XorGroup; +import org.drools.util.LinkedListObjectWrapper; import org.drools.util.Queueable; /** @@ -49,8 +51,9 @@ // ------------------------------------------------------------ /** The rule to invoke upon match. */ - private Rule rule; + private final Rule rule; private final TupleSource tupleSource; + private XorGroup xorGroup; // ------------------------------------------------------------ // Constructors @@ -64,9 +67,9 @@ * @param rule * The rule. */ - TerminalNode(int id, - TupleSource source, - Rule rule) { + TerminalNode(final int id, + final TupleSource source, + final Rule rule) { super( id ); this.rule = rule; this.tupleSource = source; @@ -89,6 +92,16 @@ // org.drools.impl.TupleSink // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + public void assertTuple(final ReteTuple tuple, + final PropagationContext context, + final WorkingMemoryImpl workingMemory) { + assertTuple( tuple, + context, + workingMemory, + true ); + + } + /** * Assert a new <code>Tuple</code>. * @@ -99,24 +112,34 @@ * @throws AssertionException * If an error occurs while asserting. */ - public void assertTuple(ReteTuple tuple, - PropagationContext context, - WorkingMemoryImpl workingMemory) { + public void assertTuple(final ReteTuple tuple, + final PropagationContext context, + final WorkingMemoryImpl workingMemory, + final boolean fireActivationCreated) { // if the current Rule is no-loop and the origin rule is the same then // return - if ( rule.getNoLoop() && rule.equals( context.getRuleOrigin() ) ) { + if ( this.rule.getNoLoop() && this.rule.equals( context.getRuleOrigin() ) ) { return; } - Agenda agenda = workingMemory.getAgenda(); + final Agenda agenda = workingMemory.getAgenda(); - Duration dur = rule.getDuration(); + final Duration dur = this.rule.getDuration(); if ( dur != null && dur.getDuration( tuple ) > 0 ) { - ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(), + final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(), tuple, workingMemory.getAgenda(), context, - rule ); + this.rule ); + + if ( this.rule.getXorGroup() != null ) { + // Lazy cache xorGroup + if ( this.xorGroup == null ) { + this.xorGroup = workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ); + } + this.xorGroup.addActivation( item ); + } + agenda.scheduleItem( item ); tuple.setActivation( item ); item.setActivated( true ); @@ -126,23 +149,23 @@ // Lazy instantiation and addition to the Agenda of AgendGroup // implementations // ---------------- - TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this ); + final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this ); AgendaGroupImpl agendaGroup = memory.getAgendaGroup(); if ( agendaGroup == null ) { - if ( rule.getAgendaGroup() == null || rule.getAgendaGroup().equals( "" ) || rule.getAgendaGroup().equals( AgendaGroup.MAIN ) ) { + if ( this.rule.getAgendaGroup() == null || this.rule.getAgendaGroup().equals( "" ) || this.rule.getAgendaGroup().equals( AgendaGroup.MAIN ) ) { // Is the Rule AgendaGroup undefined? If it is use MAIN, // which is added to the Agenda by default agendaGroup = (AgendaGroupImpl) agenda.getAgendaGroup( AgendaGroup.MAIN ); } else { // AgendaGroup is defined, so try and get the AgendaGroup // from the Agenda - agendaGroup = (AgendaGroupImpl) agenda.getAgendaGroup( rule.getAgendaGroup() ); + agendaGroup = (AgendaGroupImpl) agenda.getAgendaGroup( this.rule.getAgendaGroup() ); } if ( agendaGroup == null ) { // The AgendaGroup is defined but not yet added to the // Agenda, so create the AgendaGroup and add to the Agenda. - agendaGroup = new AgendaGroupImpl( rule.getAgendaGroup() ); + agendaGroup = new AgendaGroupImpl( this.rule.getAgendaGroup() ); workingMemory.getAgenda().addAgendaGroup( agendaGroup ); } @@ -150,14 +173,22 @@ } // set the focus if rule autoFocus is true - if ( rule.getAutoFocus() ) { + if ( this.rule.getAutoFocus() ) { agenda.setFocus( agendaGroup ); } - AgendaItem item = new AgendaItem( context.getPropagationNumber(), + final AgendaItem item = new AgendaItem( context.getPropagationNumber(), tuple, context, - rule ); + this.rule ); + + if ( this.rule.getXorGroup() != null ) { + // Lazy cache xorGroup + if ( this.xorGroup == null ) { + this.xorGroup = workingMemory.getAgenda().getXorGroup( this.rule.getXorGroup() ); + } + this.xorGroup.addActivation( item ); + } // Makes sure the Lifo is added to the AgendaGroup priority queue // If the AgendaGroup is already in the priority queue it just @@ -165,14 +196,18 @@ agendaGroup.add( item ); tuple.setActivation( item ); item.setActivated( true ); - workingMemory.getAgendaEventSupport().fireActivationCreated( item ); + + // We only want to fire an event on a truly new Activation and not on an Activation as a result of a modify + if ( fireActivationCreated ) { + workingMemory.getAgendaEventSupport().fireActivationCreated( item ); + } } } - public void retractTuple(ReteTuple tuple, - PropagationContext context, - WorkingMemoryImpl workingMemory) { - Activation activation = tuple.getActivation(); + public void retractTuple(final ReteTuple tuple, + final PropagationContext context, + final WorkingMemoryImpl workingMemory) { + final Activation activation = tuple.getActivation(); if ( activation.isActivated() ) { activation.remove(); workingMemory.getAgendaEventSupport().fireActivationCancelled( activation ); @@ -183,15 +218,17 @@ this.rule ); } - public void modifyTuple(ReteTuple tuple, - PropagationContext context, - WorkingMemoryImpl workingMemory) { + public void modifyTuple(final ReteTuple tuple, + final PropagationContext context, + final WorkingMemoryImpl workingMemory) { + // We have to remove and assert the new tuple as it has modified facts and thus its tuple is newer if ( tuple.getActivation().isActivated() ) { tuple.getActivation().remove(); } assertTuple( tuple, context, - workingMemory ); + workingMemory, + false ); } @@ -205,15 +242,15 @@ } public void attach() { - tupleSource.addTupleSink( this ); + this.tupleSource.addTupleSink( this ); } - public void attach(WorkingMemoryImpl[] workingMemories) { + public void attach(final WorkingMemoryImpl[] workingMemories) { attach(); for ( int i = 0, length = workingMemories.length; i < length; i++ ) { - WorkingMemoryImpl workingMemory = workingMemories[i]; - PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(), + final WorkingMemoryImpl workingMemory = workingMemories[i]; + final PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(), PropagationContext.RULE_ADDITION, null, null ); @@ -222,46 +259,46 @@ } } - public void remove(BaseNode node, - WorkingMemoryImpl[] workingMemories) { + public void remove(final BaseNode node, + final WorkingMemoryImpl[] workingMemories) { for ( int i = 0, length = workingMemories.length; i < length; i++ ) { - WorkingMemoryImpl workingMemory = workingMemories[i]; + final WorkingMemoryImpl workingMemory = workingMemories[i]; - TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this ); + final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this ); - AgendaGroupImpl group = memory.getAgendaGroup(); - Queueable[] elements = group.getQueueable(); - List list = new ArrayList(); + final AgendaGroupImpl group = memory.getAgendaGroup(); + final Queueable[] elements = group.getQueueable(); + final List list = new ArrayList(); //start at 1 as BinaryHeapQueue starts at 1 - for ( int j = 1, size = group.size()+1; j < size; j++ ) { - AgendaItem item = (AgendaItem) elements[j]; + for ( int j = 1, size = group.size() + 1; j < size; j++ ) { + final AgendaItem item = (AgendaItem) elements[j]; if ( item.getRule() == this.rule ) { list.add( item ); } } - for ( Iterator it = list.iterator(); it.hasNext(); ) { - AgendaItem item = ( AgendaItem ) it.next(); + for ( final Iterator it = list.iterator(); it.hasNext(); ) { + final AgendaItem item = (AgendaItem) it.next(); if ( item.isActivated() ) { item.remove(); workingMemory.getAgendaEventSupport().fireActivationCancelled( item ); } - PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(), + final PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(), PropagationContext.RULE_REMOVAL, null, null ); workingMemory.removeLogicalDependencies( item, propagationContext, - this.rule ); + this.rule ); } - } - - tupleSource.remove( this, + } + + this.tupleSource.remove( this, workingMemories ); } - public void updateNewNode(WorkingMemoryImpl workingMemory, - PropagationContext context) { + public void updateNewNode(final WorkingMemoryImpl workingMemory, + final PropagationContext context) { // There are no child nodes to update, do nothing. } @@ -276,7 +313,7 @@ return this.agendaGroup; } - public void setAgendaGroup(AgendaGroupImpl agendaGroup) { + public void setAgendaGroup(final AgendaGroupImpl agendaGroup) { this.agendaGroup = agendaGroup; } } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -25,7 +25,7 @@ import org.drools.spi.PropagationContext; import org.drools.util.LinkedList; import org.drools.util.LinkedListNode; -import org.drools.util.LinkedListNodeWrapper; +import org.drools.util.LinkedListObjectWrapper; /** * A source of <code>ReteTuple</code> s for a <code>TupleSink</code>. @@ -152,7 +152,7 @@ for ( int i = 0, size = getTupleSinks().size(); i < size; i++ ) { ReteTuple child = new ReteTuple( tuple ); // no TupleMatch so instead add as a linked tuple - tuple.addLinkedTuple( new LinkedListNodeWrapper( child ) ); + tuple.addLinkedTuple( new LinkedListObjectWrapper( child ) ); ((TupleSink) getTupleSinks().get( i )).assertTuple( child, context, workingMemory ); @@ -178,7 +178,7 @@ if ( list != null && !list.isEmpty() ) { int i = 0; for ( LinkedListNode node = list.removeFirst(); node != null; node = list.removeFirst() ) { - ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + ((TupleSink) getTupleSinks().get( i++ )).retractTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } @@ -204,7 +204,7 @@ if ( list != null && !list.isEmpty() ) { int i = 0; for ( LinkedListNode node = list.getFirst(); node != null; node = node.getNext() ) { - ((TupleSink) getTupleSinks().get( i++ )).modifyTuple( (ReteTuple) ((LinkedListNodeWrapper) node).getNode(), + ((TupleSink) getTupleSinks().get( i++ )).modifyTuple( (ReteTuple) ((LinkedListObjectWrapper) node).getObject(), context, workingMemory ); } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/WorkingMemoryImpl.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -241,6 +241,13 @@ public void clearAgenda() { this.agenda.clearAgenda(); } + + /** + * Clear the Agenda Group + */ + public void clearAgendaGroup(String group) { + this.agenda.clearAgendaGroup(group); + } /** * @see WorkingMemory Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -77,6 +77,8 @@ /** makes the rule's much the current focus */ private boolean autoFocus; + + private String xorGroup; /** indicates that the rule is semantically correct. */ private boolean semanticallyValid = true; @@ -241,8 +243,16 @@ public void setAutoFocus(boolean autoFocus) { this.autoFocus = autoFocus; + } + + public String getXorGroup() { + return this.xorGroup; } + public void setXorGroup(String xorGroup) { + this.xorGroup = xorGroup; + } + /** * Retrieve a parameter <code>Declaration</code> by identifier. * @@ -437,5 +447,4 @@ public boolean isSemanticallyValid() { return semanticallyValid; } - } Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Activation.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -20,8 +20,10 @@ import org.drools.common.LogicalDependency; +import org.drools.common.XorGroupNode; import org.drools.rule.Rule; import org.drools.util.LinkedList; +import org.drools.util.LinkedListObjectWrapper; /** * When a <code>Tuple</code> fully matches a rule it is added to the <code>Agenda</code> @@ -73,4 +75,8 @@ public boolean isActivated(); public void setActivated(boolean activated); + + public XorGroupNode getXorGroupNode(); + + public void setXorGroupNode(XorGroupNode xorGroupNode); } \ No newline at end of file Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -111,6 +111,8 @@ * ActivationCancelled events. <br> */ void clearAgenda(); + + void clearAgendaGroup(String group); public AgendaGroup getFocus(); Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/XorGroup.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/XorGroup.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/XorGroup.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -0,0 +1,19 @@ +package org.drools.spi; + +import java.util.Iterator; + +public interface XorGroup { + public String getName(); + + public void addActivation(Activation activation); + + public void removeActivation(Activation activation); + + public Iterator iterator(); + + public boolean isEmpty(); + + public int size(); + + public void clear(); +} Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -1,34 +0,0 @@ -package org.drools.util; - -/* - * Copyright 2005 JBoss Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * The idea behind <code>LinkedListNodeWrapper</code> is to be able to add - * the same <code>LinkedListNode</code> to multiple <code>LinkedList</code>s - * where the node can have different previous and next nodes in each list. - */ -public class LinkedListNodeWrapper extends AbstractBaseLinkedListNode { - private LinkedListNode node; - - public LinkedListNodeWrapper(LinkedListNode node) { - this.node = node; - } - - public LinkedListNode getNode() { - return this.node; - } -} Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListObjectWrapper.java (from rev 4078, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java) =================================================================== --- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNodeWrapper.java 2006-05-04 01:57:37 UTC (rev 4078) +++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListObjectWrapper.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -0,0 +1,34 @@ +package org.drools.util; + +/* + * Copyright 2005 JBoss Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The idea behind <code>LinkedListNodeWrapper</code> is to be able to add + * the same <code>LinkedListNode</code> to multiple <code>LinkedList</code>s + * where the node can have different previous and next nodes in each list. + */ +public class LinkedListObjectWrapper extends AbstractBaseLinkedListNode { + private Object object; + + public LinkedListObjectWrapper(Object object) { + this.object = object; + } + + public Object getObject() { + return this.object; + } +} Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -16,7 +16,9 @@ * limitations under the License. */ +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.drools.DroolsTestCase; @@ -33,6 +35,7 @@ import org.drools.spi.ConsequenceException; import org.drools.spi.KnowledgeHelper; import org.drools.spi.PropagationContext; +import org.drools.spi.XorGroup; /** * @author mproctor @@ -457,5 +460,132 @@ // assertEquals( 0, // queue.size() ); } + + public void testXorGroup() { + RuleBase ruleBase = new RuleBaseImpl(); + WorkingMemoryImpl workingMemory = (WorkingMemoryImpl) ruleBase.newWorkingMemory(); + + final Agenda agenda = workingMemory.getAgenda(); + + final List list = new ArrayList(); + + // create the consequence + Consequence consequence = new Consequence() { + public void evaluate(KnowledgeHelper knowledgeHelper, + WorkingMemory workingMemory) { + list.add( knowledgeHelper.getRule() ); + } + }; + + ReteTuple tuple = new ReteTuple( new FactHandleImpl( 1 ) ); + + // create a rule for each agendaGroup + Rule rule0 = new Rule( "test-rule0" ); + rule0.setXorGroup( "xor-group-0" ); + TerminalNode node0 = new TerminalNode( 3, + new MockTupleSource( 2 ), + rule0 ); + rule0.setConsequence( consequence ); + PropagationContext context0 = new PropagationContextImpl( 0, + PropagationContext.ASSERTION, + rule0, + null ); + + Rule rule1 = new Rule( "test-rule1" ); + rule1.setXorGroup( "xor-group-0" ); + TerminalNode node1 = new TerminalNode( 5, + new MockTupleSource( 4 ), + rule1 ); + rule1.setConsequence( consequence ); + PropagationContext context1 = new PropagationContextImpl( 0, + PropagationContext.ASSERTION, + rule1, + null ); + + Rule rule2 = new Rule( "test-rule2" ); + TerminalNode node2 = new TerminalNode( 7, + new MockTupleSource( 6 ), + rule2 ); + rule2.setConsequence( consequence ); + PropagationContext context2 = new PropagationContextImpl( 0, + PropagationContext.ASSERTION, + rule2, + null ); + + Rule rule3 = new Rule( "test-rule3", + "agendaGroup3" ); + rule3.setXorGroup( "xor-group-3" ); + TerminalNode node3 = new TerminalNode( 9, + new MockTupleSource( 8 ), + rule3 ); + rule3.setConsequence( consequence ); + PropagationContext context3 = new PropagationContextImpl( 0, + PropagationContext.ASSERTION, + rule3, + null ); + + // Assert the tuple and check it was added to xor-group-0 + node0.assertTuple( tuple, context0, workingMemory ); + XorGroup xorGroup0 = agenda.getXorGroup( "xor-group-0" ); + assertEquals( 1, xorGroup0.size() ); + + // Assert another tuple and check it was added to xor-group-0 + node1.assertTuple( tuple, context1, workingMemory ); + assertEquals( 2, xorGroup0.size() ); + + // There should now be two potential activations to fire + assertEquals( 2, agenda.focusStackSize() ); + + // The first tuple should fire, adding itself to the List and clearing and cancelling the other Activations in the xor-group-0 + agenda.fireNextItem( null ); + + // Make sure the xor-group-0 is clear + assertEquals( 0, xorGroup0.size() ); + + // Make sure the Agenda is empty + assertEquals( 0, agenda.focusStackSize() ); + + // List should only have a single item, "rule0" + assertEquals( 1, list.size() ); + assertSame( rule0, list.get( 0 ) ); + + list.clear(); + + //------------------- + // Now try a more complex scenario involving two Xor Groups and one rule not in a Group + node0.assertTuple( tuple, context0, workingMemory ); + node1.assertTuple( tuple, context1, workingMemory ); + node2.assertTuple( tuple, context2, workingMemory ); + node3.assertTuple( tuple, context3, workingMemory ); + + // xor-group-0 should be populated again + assertEquals( 2, xorGroup0.size() ); + + // make sure the xor-group-3 is cleared when we can clear the Agenda Group for the activation that is in both + XorGroup xorGroup3 = agenda.getXorGroup( "xor-group-3" ); + + assertEquals( 4, agenda.agendaSize() ); + assertEquals( 1, xorGroup3.size() ); + + agenda.clearAgendaGroup( "agendaGroup3" ); + assertEquals( 3, agenda.agendaSize() ); + assertEquals( 0, xorGroup3.size() ); + + // Activation for xor-group-0 should be next - the activation in no xor/agenda group should remain on the agenda + agenda.fireNextItem( null ); + assertEquals( 1, agenda.agendaSize() ); + assertEquals( 0, xorGroup0.size() ); + + + // Fire the last activation and make sure the Agenda Empties + agenda.fireNextItem( null ); + assertEquals( 0, agenda.agendaSize() ); + + assertEquals( 2, list.size() ); + assertEquals( rule0, list.get(0)); + assertEquals( rule2, list.get(1)); + + } + } Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java =================================================================== --- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java 2006-05-06 15:51:09 UTC (rev 4108) +++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/LeftInputAdapterNodeTest.java 2006-05-06 15:51:12 UTC (rev 4109) @@ -24,7 +24,7 @@ import org.drools.common.PropagationContextImpl; import org.drools.spi.PropagationContext; import org.drools.util.LinkedList; -import org.drools.util.LinkedListNodeWrapper; +import org.drools.util.LinkedListObjectWrapper; public class LeftInputAdapterNodeTest extends DroolsTestCase { @@ -106,7 +106,7 @@ assertEquals( 1, list0.size() ); assertSame( tuple0, - ((LinkedListNodeWrapper) list0.getFirst()).getNode() ); + ((LinkedListObjectWrapper) list0.getFirst()).getObject() ); // check memory stacks correctly FactHandleImpl f1 = (FactHandleImpl) workingMemory.assertObject( "test1" ); @@ -122,7 +122,7 @@ assertEquals( 1, list1.size() ); assertSame( tuple1, - ((LinkedListNodeWrapper) list1.getFirst()).getNode() ); + ((LinkedListObjectWrapper) list1.getFirst()).getObject() ); assertNotSame( tuple0, tuple1 ); |
From: <jbo...@li...> - 2006-05-06 15:51:11
|
Author: mar...@jb... Date: 2006-05-06 11:51:09 -0400 (Sat, 06 May 2006) New Revision: 4108 Modified: labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF Log: JBRULES-259 Implement Xor Group -includes unit and integration tests JBRULES-258 Clear Agenda Group Modified: labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF =================================================================== --- labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF 2006-05-06 10:51:56 UTC (rev 4107) +++ labs/jbossrules/trunk/drools-ide/META-INF/MANIFEST.MF 2006-05-06 15:51:09 UTC (rev 4108) @@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Drools IDE Plug-in Bundle-SymbolicName: org.drools.ide;singleton:=true -Bundle-Version: 1.0.0 +Bundle-Version: 3.0 Bundle-Activator: org.drools.ide.DroolsIDEPlugin Bundle-Vendor: krisv,mic Bundle-Localization: plugin |
From: <jbo...@li...> - 2006-05-06 10:52:08
|
Author: wrzep Date: 2006-05-06 06:51:56 -0400 (Sat, 06 May 2006) New Revision: 4107 Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/project.xml labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java labs/jbosslabs/trunk/portal-extensions/maven.xml Log: JBLAB-599 fixed kosmos/hessian bug in jmm service Pawel Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/project.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/project.xml 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/project.xml 2006-05-06 10:51:56 UTC (rev 4107) @@ -67,6 +67,7 @@ <jar>hessian-3.0.13.jar</jar> <properties> <war.bundle>true</war.bundle> +<!-- <war.manifest.classpath>true</war.manifest.classpath> --> <ejb.manifest.classpath>true</ejb.manifest.classpath> </properties> </dependency> Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -47,7 +47,7 @@ /** * Binds project ids with kosmos-service specyfic Maps. */ - private Map<String,Map> projectMaps; + private Map<String,Object> projectServices; /** * Kosmos service adress. @@ -60,7 +60,7 @@ super(); log = Logger.getLogger(this.getClass()); - projectMaps = new HashMap<String,Map>(); + projectServices = new HashMap<String,Object>(); } @Override @@ -101,7 +101,7 @@ * @param projectMap service specyfic Map * @return Plugin value */ - protected abstract int getPluginSpecyficValue(Map projectMap); + protected abstract int getPluginSpecyficValue(Object projectMap); /** @@ -116,7 +116,7 @@ * @param projectId * @return service specyfic Map */ - protected abstract Map getProjectMap(String projectId); + protected abstract Object getProjectService(String projectId); /* (non-Javadoc) * @see org.jboss.forge.status.Plugin#getValue(java.lang.String) @@ -124,16 +124,16 @@ @Override public long getValue(String projectId) { - if (!projectMaps.containsKey(projectId)) { - projectMaps.put(projectId, getProjectMap(projectId)); + if (!projectServices.containsKey(projectId)) { + projectServices.put(projectId, getProjectService(projectId)); } - Map projectMap = projectMaps.get(projectId); + Object projectService = projectServices.get(projectId); - if (projectMap == null) { + if (projectService == null) { return getPluginSpecyficDefaultValue(); } - return getPluginSpecyficValue(projectMap); + return getPluginSpecyficValue(projectService); } } Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -33,6 +33,7 @@ import com.caucho.hessian.client.HessianProxyFactory; +import hu.midori.kosmos.model.CcProject; import hu.midori.kosmos.protocol.CcService; /** @@ -58,7 +59,7 @@ } @Override - protected Map getProjectMap(String projectId) { + protected CcProject getProjectService(String projectId) { // Get project cc URL String ccURL = getCcURL(projectId); @@ -67,7 +68,7 @@ return null; } - Map ccMap = null; + CcProject ccProject = null; // Connect to the kosmos service HessianProxyFactory factory = new HessianProxyFactory(); @@ -81,19 +82,19 @@ } // Get map with the cc statistics - List repositories = null; + List<CcProject> stats = null; try { - repositories = service.getProjects(ccURL); + stats = service.getProjects(ccURL); } catch (Exception e) { log.error("Can not analyze cc: " + ccURL, e); return null; } - if ((repositories != null) && (repositories.size() > 0)) { - ccMap = (Map) repositories.get(0); + if ((stats != null) && (stats.size() > 0)) { + ccProject = stats.get(0); } - return ccMap; + return ccProject; } Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,7 +22,7 @@ package org.jboss.forge.status.plugins.cc; -import java.util.Map; +import hu.midori.kosmos.model.CcProject; /** * @author Pawel Wrzeszcz @@ -32,9 +32,9 @@ public class ErrorsStatusPlugin extends CcStatusPlugin { @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer resolvedIssues = (Integer) projectMap.get("errors"); - return resolvedIssues.intValue(); + protected int getPluginSpecyficValue(Object ccProject) { + CcProject ccPrj = (CcProject) ccProject; + return ccPrj.getErrors(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.cc; -import java.util.Map; +import hu.midori.kosmos.model.CcProject; + /** * @author Pawel Wrzeszcz * The plugin provides number of tests in the last project CruiseControl build. @@ -32,9 +33,9 @@ public class TestsStatusPlugin extends CcStatusPlugin { @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer resolvedIssues = (Integer) projectMap.get("tests"); - return resolvedIssues.intValue(); + protected int getPluginSpecyficValue(Object ccProject) { + CcProject ccPrj = (CcProject) ccProject; + return ccPrj.getTests(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.jira; -import java.util.Map; +import hu.midori.kosmos.model.JiraProject; + /** * @author Pawel Wrzeszcz * The plugin provides number of closed issues in the project's JIRA. @@ -32,9 +33,10 @@ public class ClosedIssuesStatusPlugin extends JiraStatusPlugin { @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer resolvedIssues = (Integer) projectMap.get("closedIssues"); - return resolvedIssues.intValue(); + protected int getPluginSpecyficValue(Object jiraProject) { + + JiraProject jp = (JiraProject) jiraProject; + return jp.getClosedIssues(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,10 +22,7 @@ package org.jboss.forge.status.plugins.jira; -import java.util.HashMap; import java.util.List; -import java.util.Map; - import java.net.MalformedURLException; import org.jboss.forge.status.plugins.KosmosStatusPlugin; @@ -57,9 +54,9 @@ log = Logger.getLogger(this.getClass()); } - - protected Map getProjectMap(String projectId) { + @Override + protected JiraProject getProjectService(String projectId) { // Get project jira URL String jiraURL = getJiraURL(projectId); @@ -93,10 +90,7 @@ jiraProject = projects.get(0); } - Map jiraMap = new HashMap(); - jiraMap.put("resolvedIssues",jiraProject.getResolvedIssues()); - - return jiraMap; + return jiraProject; } Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.jira; -import java.util.Map; +import hu.midori.kosmos.model.JiraProject; + /** * @author Pawel Wrzeszcz * The plugin provides number of open issues in the project's JIRA. @@ -32,9 +33,10 @@ public class OpenIssuesStatusPlugin extends JiraStatusPlugin { @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer resolvedIssues = (Integer) projectMap.get("openIssues"); - return resolvedIssues.intValue(); + protected int getPluginSpecyficValue(Object jiraProject) { + + JiraProject jp = (JiraProject) jiraProject; + return jp.getOpenIssues(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.jira; -import java.util.Map; +import hu.midori.kosmos.model.JiraProject; + /** * @author Pawel Wrzeszcz * The plugin provides number of resolved issues in the project's JIRA. @@ -32,9 +33,10 @@ public class ResolvedIssuesStatusPlugin extends JiraStatusPlugin { @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer resolvedIssues = (Integer) projectMap.get("resolvedIssues"); - return resolvedIssues.intValue(); + protected int getPluginSpecyficValue(Object jiraProject) { + + JiraProject jp = (JiraProject) jiraProject; + return jp.getResolvedIssues(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This provides number of commits done in last 31 days metric. @@ -35,9 +36,9 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer commitsTotal = (Integer) projectMap.get("commitsLast31Days"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return repo.getCommitsLast31Days(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This provides number of commits done in last 7 days metric. @@ -35,9 +36,9 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer commitsTotal = (Integer) projectMap.get("commitsLast7Days"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return repo.getCommitsLast7Days(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This provides number of today commits metric. @@ -35,9 +36,9 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer commitsTotal = (Integer) projectMap.get("commitsToday"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return repo.getCommitsToday(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This plugin provides number of commits metric. @@ -35,9 +36,9 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer commitsTotal = (Integer) projectMap.get("commitsTotal"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return repo.getCommitsTotal(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This plugin provides project revision number metric. @@ -35,9 +36,10 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Long commitsTotal = (Long) projectMap.get("revision"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return Long.valueOf(repo.getRevision()).intValue(); + //TODO possible out of range } @Override Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -23,8 +23,6 @@ package org.jboss.forge.status.plugins.svn; import java.util.List; -import java.util.Map; - import java.net.MalformedURLException; import org.jboss.forge.status.plugins.KosmosStatusPlugin; @@ -33,6 +31,7 @@ import com.caucho.hessian.client.HessianProxyFactory; +import hu.midori.kosmos.model.SvnRepository; import hu.midori.kosmos.protocol.SvnService; /** @@ -56,7 +55,8 @@ log = Logger.getLogger(this.getClass()); } - protected Map getProjectMap(String projectId) { + @Override + protected SvnRepository getProjectService(String projectId) { // Get project repository URL String repoURL = getRepoURL(projectId); @@ -65,7 +65,7 @@ return null; } - Map repositoryMap = null; + SvnRepository repository = null; // Connect to kosmos service HessianProxyFactory factory = new HessianProxyFactory(); @@ -79,7 +79,7 @@ } // Get map with repository statistics - List repositories = null; + List<SvnRepository> repositories = null; try { repositories = service.getRepositories(repoURL); } catch (Exception e) { @@ -89,10 +89,10 @@ } if ((repositories != null) && (repositories.size() > 0)) { - repositoryMap = (Map) repositories.get(0); + repository = repositories.get(0); } - return repositoryMap; + return repository; } private String getRepoURL(String projectId) { Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java 2006-05-06 10:51:56 UTC (rev 4107) @@ -22,8 +22,9 @@ package org.jboss.forge.status.plugins.svn; -import java.util.Map; +import hu.midori.kosmos.model.SvnRepository; + /** * @author Pawel Wrzeszcz * This plugin provides project repository size metric. @@ -35,9 +36,9 @@ super(); } @Override - protected int getPluginSpecyficValue(Map projectMap) { - Integer commitsTotal = (Integer) projectMap.get("totalFileSize"); - return commitsTotal.intValue(); + protected int getPluginSpecyficValue(Object repository) { + SvnRepository repo = (SvnRepository) repository; + return repo.getTotalFileSize(); } @Override Modified: labs/jbosslabs/trunk/portal-extensions/maven.xml =================================================================== --- labs/jbosslabs/trunk/portal-extensions/maven.xml 2006-05-06 09:09:59 UTC (rev 4106) +++ labs/jbosslabs/trunk/portal-extensions/maven.xml 2006-05-06 10:51:56 UTC (rev 4107) @@ -71,6 +71,14 @@ overwrite="true" /> <ant:copy todir="${forge.sar.dir}/target/${forge.sar.name}" + file="${maven.repo.local}/kosmos/jars/kosmos-server.jar" + overwrite="true" /> + <ant:copy + todir="${forge.sar.dir}/target/${forge.sar.name}" + file="${maven.repo.local}/hessian/jars/hessian-3.0.13.jar" + overwrite="true" /> + <ant:copy + todir="${forge.sar.dir}/target/${forge.sar.name}" file="${maven.repo.local}/commons-collections/jars/commons-collections-3.1.jar" overwrite="true" /> @@ -121,7 +129,7 @@ (for all that are not created there's a template .sample file) 1. build.properties 2. forge-login/to-copy/portal-login-ds.xml -3. federation-register/src/web/WEB-INF/faces-config (only for the JOSF portal). +3. federation-register/src/web/WEB-INF/faces-config.xml (only for the JOSF portal). 4. jbosswiki/wiki-common/src/etc/org/jboss/wiki/filedatasource.properties 5. shotoku/shotoku-base/src/etc/shotoku.properties |
From: <jbo...@li...> - 2006-05-06 09:10:05
|
Author: wrzep Date: 2006-05-06 05:09:59 -0400 (Sat, 06 May 2006) New Revision: 4106 Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java Log: JBLAB-599 try to fix hessian/kosmos bug in jmm service Modified: labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-05-05 23:06:00 UTC (rev 4105) +++ labs/jbosslabs/trunk/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-05-06 09:09:59 UTC (rev 4106) @@ -22,6 +22,7 @@ package org.jboss.forge.status.plugins.jira; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,6 +34,7 @@ import com.caucho.hessian.client.HessianProxyFactory; +import hu.midori.kosmos.model.JiraProject; import hu.midori.kosmos.protocol.JiraService; /** @@ -65,7 +67,7 @@ return null; } - Map jiraMap = null; + JiraProject jiraProject = null; // Connect to kosmos service HessianProxyFactory factory = new HessianProxyFactory(); @@ -79,7 +81,7 @@ } // Get map with jira statistics - List projects = null; + List<JiraProject> projects = null; try { projects = service.getProjects(jiraURL); } catch (Exception e) { @@ -88,9 +90,12 @@ } if ((projects != null) && (projects.size() > 0)) { - jiraMap = (Map) projects.get(0); + jiraProject = projects.get(0); } + Map jiraMap = new HashMap(); + jiraMap.put("resolvedIssues",jiraProject.getResolvedIssues()); + return jiraMap; } |
From: <jbo...@li...> - 2006-05-05 23:06:12
|
Author: soh...@jb... Date: 2006-05-05 19:06:00 -0400 (Fri, 05 May 2006) New Revision: 4105 Added: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/action/PollController.java labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_ballot.xhtml labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_result.xhtml Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/Constants.java labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/PortalUtil.java labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewTopic.java labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/classes/ResourceJSF.properties labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums-config.xml labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_body.xhtml Log: http://jira.jboss.com/jira/browse/JBFORUMS-69 - Post a Vote Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/Constants.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/Constants.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/Constants.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -46,6 +46,8 @@ public static final String p_poll_title = "POLL_TITLE"; public static final String p_poll_delete = "POLL_DELETE"; public static final String p_attachment = "ATTACHMENT"; + public static final String p_vote = "vote"; + public static final String p_results = "results"; //other constants------------------------------------------------------------------------------------------------------------------------------- public static final String QUOTE = "quote"; Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumUtil.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -21,8 +21,11 @@ */ package org.jboss.portlet.forums.ui; +import java.text.DecimalFormat; + import javax.portlet.ActionRequest; + /** * @author <a href="mailto:soh...@jb...">Sohil Shah</a> * @@ -56,5 +59,20 @@ parameter = request.getParameter(param); return parameter; + } + + /** + * + * + */ + public static String getPercentStr(double input) + { + String percent = ""; + + DecimalFormat decimalFormat = new DecimalFormat("##.##%"); + percent = decimalFormat.format(input); + + + return percent; } } Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/ForumsJSFPortlet.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -62,7 +62,9 @@ String attachment = ForumUtil.getParameter(request,Constants.p_attachment); String topicId = ForumUtil.getParameter(request,Constants.p_topicId); String postId = ForumUtil.getParameter(request,Constants.p_postId); - String userId = ForumUtil.getParameter(request,Constants.p_userId); + String userId = ForumUtil.getParameter(request,Constants.p_userId); + String vote = ForumUtil.getParameter(request,Constants.p_vote); + String results = ForumUtil.getParameter(request,Constants.p_results); if(categoryId!=null && categoryId.trim().length()>0) { response.setRenderParameter(Constants.p_categoryId,categoryId); @@ -98,6 +100,14 @@ if(postId!=null && postId.trim().length()>0) { response.setRenderParameter(Constants.p_postId,postId); - } + } + if(vote!=null && vote.trim().length()>0) + { + response.setRenderParameter(Constants.p_vote,vote); + } + if(results!=null && results.trim().length()>0) + { + response.setRenderParameter(Constants.p_results,results); + } } } Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/PortalUtil.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/PortalUtil.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/PortalUtil.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -21,7 +21,6 @@ */ package org.jboss.portlet.forums.ui; -import java.lang.reflect.Field; import java.util.Date; @@ -29,7 +28,6 @@ import java.text.SimpleDateFormat; -import java.util.Iterator; import java.util.Map; import org.apache.log4j.Logger; @@ -58,12 +56,9 @@ import org.jboss.portlet.forums.impl.PollOptionImpl; import org.jboss.portlet.forums.model.Message; import org.jboss.portlet.forums.impl.MessageImpl; -import org.jboss.portlet.forums.model.UploadedFile; -import org.jboss.portlet.forums.impl.UploadedFileImpl; -import org.jboss.portlet.forums.model.Attachment; -import org.jboss.portlet.forums.impl.AttachmentImpl; + /** * @author <a href="mailto:soh...@jb...">Sohil Shah</a> * @author <a href="mailto:rys...@jb...">Ryszard Kozmik</a> @@ -314,4 +309,21 @@ Message message = new MessageImpl(); return message; } + + /** + * + * + */ + public static float getVotePercent(Poll poll,PollOption option) + { + float votePercent = 0; + + float votesSum = poll.getVotesSum(); + if(votesSum>0) + { + votePercent = (option.getVotes()/votesSum); + } + + return votePercent; + } } Added: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/action/PollController.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/action/PollController.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/action/PollController.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -0,0 +1,95 @@ +/* +* JBoss, Home of Professional Open Source +* Copyright 2005, JBoss Inc., and individual contributors as indicated +* by the @authors tag. See the copyright.txt in the distribution for a +* full listing of individual contributors. +* +* This is free software; you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as +* published by the Free Software Foundation; either version 2.1 of +* the License, or (at your option) any later version. +* +* This software is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this software; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA, or see the FSF site: http://www.fsf.org. +*/ +package org.jboss.portlet.forums.ui.action; + +import org.jboss.portlet.forums.ui.*; + +import org.jboss.portlet.forums.model.Topic; +import org.jboss.portlet.forums.model.Poll; +import org.jboss.portlet.forums.model.PollOption; +import org.jboss.portlet.forums.model.Poster; + +/* + * Created on May 5, 2006 + * + * @author <a href="mailto:soh...@jb...">Sohil Shah</a> + */ +public class PollController extends ActionController +{ + /** + * + * Created on May 5, 2006 + * + * @author <a href="mailto:soh...@jb...">Sohil Shah</a> + */ + public PollController() + { + } + + /** + * accepts a vote and processes it + * + */ + public String vote() + { + String navState = null; + try + { + String t = ForumUtil.getParameter(Constants.p_topicId); + String vote = ForumUtil.getParameter(Constants.p_vote); + + if(t!=null && t.trim().length()>0) + { + //setup the data needed for this process + int topicId,voteIndex; + try + { + topicId = Integer.parseInt(t); + voteIndex = Integer.parseInt(vote); + } + catch(NumberFormatException e) + { + //dont process a vote + return null; + } + + + Topic topic = this.getForumsModule().findTopicById(new Integer(topicId)); + Poll poll = topic.getPoll(); + PollOption selectedOption = (PollOption)poll.getOptions().get(voteIndex); + Poster poster = PortalUtil.getPoster(); + + //perform the voting on the selected option + if(poster!=null) + { + poll.getVoted().add(poster.getUserId()); + } + selectedOption.incVotes(); + } + } + catch(Exception e) + { + JSFUtil.handleException(e); + } + return navState; + } +} Modified: labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewTopic.java =================================================================== --- labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewTopic.java 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/main/org/jboss/portlet/forums/ui/view/ViewTopic.java 2006-05-05 23:06:00 UTC (rev 4105) @@ -78,6 +78,43 @@ return postDays; } + /** + * + * + */ + public boolean isPollPresent() + { + boolean isPollPresent = false; + + if( this.topic.getPoll()!= null && + this.topic.getPoll().getId() != null && + this.topic.getPoll().getId().intValue()>0 && + this.topic.getPoll().getOptions() != null && + !this.topic.getPoll().getOptions().isEmpty() + ) + { + isPollPresent = true; + } + + return isPollPresent; + } + + /** + * + * + */ + public boolean isBallotView() + { + boolean isBallotView = true; //in ballot view by default + + String result = ForumUtil.getParameter(Constants.p_results); + if(result!=null && result.trim().length()>0) + { + isBallotView = false; + } + + return isBallotView; + } //------------user preferences------------------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------------------------------------- Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/classes/ResourceJSF.properties =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/classes/ResourceJSF.properties 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/classes/ResourceJSF.properties 2006-05-05 23:06:00 UTC (rev 4105) @@ -381,6 +381,7 @@ View_previous_topic=View previous topic Submit_vote=Submit Vote View_results=View Results +View_ballot=View Ballot No_newer_topics=There are no newer topics in this forum No_older_topics=There are no older topics in this forum Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums-config.xml =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums-config.xml 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums-config.xml 2006-05-05 23:06:00 UTC (rev 4105) @@ -236,7 +236,7 @@ <from-outcome>startEditPost</from-outcome> <to-view-id>/views/topics/posting_edit_body.xhtml</to-view-id> </navigation-case> - </navigation-rule> + </navigation-rule> <!-- managedBean for the jumpbox usecase --> <managed-bean> @@ -277,4 +277,11 @@ <to-view-id>/views/forums/viewforum_body.xhtml</to-view-id> </navigation-case> </navigation-rule> + + <!-- managed bean for the voting/poll stuff --> + <managed-bean> + <managed-bean-name>pollController</managed-bean-name> + <managed-bean-class>org.jboss.portlet.forums.ui.action.PollController</managed-bean-class> + <managed-bean-scope>request</managed-bean-scope> + </managed-bean> </faces-config> \ No newline at end of file Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/WEB-INF/forums.taglib.xml 2006-05-05 23:06:00 UTC (rev 4105) @@ -52,4 +52,23 @@ <function-class>org.jboss.portlet.forums.ui.JSFUtil</function-class> <function-signature>java.lang.String getErrorMsg()</function-signature> </function> + + <!-- + --> + <function> + <function-name>percentStr</function-name> + <function-class>org.jboss.portlet.forums.ui.ForumUtil</function-class> + <function-signature>java.lang.String getPercentStr(double)</function-signature> + </function> + + + <!-- application specific functions --> + <!-- + function calculates the vote percent for the specified poll option + --> + <function> + <function-name>votePercent</function-name> + <function-class>org.jboss.portlet.forums.ui.PortalUtil</function-class> + <function-signature>float getVotePercent(org.jboss.portlet.forums.model.Poll,org.jboss.portlet.forums.model.PollOption)</function-signature> + </function> </facelet-taglib> \ No newline at end of file Modified: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_body.xhtml =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_body.xhtml 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_body.xhtml 2006-05-05 23:06:00 UTC (rev 4105) @@ -147,6 +147,7 @@ </table> <table class="forumline" width="100%" cellspacing="1" cellpadding="3" border="0"> + <!-- TODO: hook in the previous/next topic function --> <!--tr align="right"> <td class="catHead" colspan="2" height="28"><span class="nav"><a href="${n:out("U_VIEW_OLDER_TOPIC")}" class="nav">${n:i18n("View_previous_topic")}</a> :: <a href="${n:out("U_VIEW_NEWER_TOPIC")}" class="nav">${n:i18n("View_next_topic")}</a> </span></td> </tr--> @@ -158,10 +159,25 @@ <include page="viewtopic_poll_result.jsp"/> </if> --> - <tr> - <th class="thLeft" width="150" height="26" nowrap="nowrap">${resource.Author}</th> - <th class="thRight" nowrap="nowrap">${resource.Message}</th> - </tr> + <!-- POLL DISPLAY --> + <c:if test="#{topic.pollPresent && topic.ballotView}"> + <ui:include src="/views/topics/viewtopic_poll_ballot.xhtml"> + <ui:param name="t" value="#{topic.topic.id}"/> + <ui:param name="poll" value="#{topic.topic.poll}"/> + </ui:include> + </c:if> + <c:if test="#{topic.pollPresent && !topic.ballotView}"> + <ui:include src="/views/topics/viewtopic_poll_result.xhtml"> + <ui:param name="t" value="#{topic.topic.id}"/> + <ui:param name="poll" value="#{topic.topic.poll}"/> + </ui:include> + </c:if> + + + <tr> + <th class="thLeft" width="150" height="26" nowrap="nowrap">${resource.Author}</th> + <th class="thRight" nowrap="nowrap">${resource.Message}</th> + </tr> <!-- iterate and display each post on this topic in the forum --> <c:forEach items="#{topic.topic.posts}" var="postrow" varStatus="status" > Added: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_ballot.xhtml =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_ballot.xhtml 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_ballot.xhtml 2006-05-05 23:06:00 UTC (rev 4105) @@ -0,0 +1,88 @@ +<!-- +/* +* JBoss, Home of Professional Open Source +* Copyright 2005, JBoss Inc., and individual contributors as indicated +* by the @authors tag. See the copyright.txt in the distribution for a +* full listing of individual contributors. +* +* This is free software; you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as +* published by the Free Software Foundation; either version 2.1 of +* the License, or (at your option) any later version. +* +* This software is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this software; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA, or see the FSF site: http://www.fsf.org. +*/ +--> + +<div xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://java.sun.com/jsf/facelets" + xmlns:c="http://java.sun.com/jstl/core" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:t="http://myfaces.apache.org/tomahawk" + xmlns:forums="http://www.jboss.com/products/jbossportal/forums" + class="bb" +> + +<ui:composition template="/views/common/common.xhtml"> +<ui:define name="mainContent"> + +<tr> + <td class="row2" colspan="2"><br clear="all"/> + <h:form> + <input type="hidden" name="t" value="#{t}"/> + <table cellspacing="0" cellpadding="4" border="0" align="center"> + <tr> + <td align="center"><span class="gen"><b>#{poll.title}</b></span></td> + </tr> + <tr> + <td align="center"> + <table cellspacing="0" cellpadding="2" border="0"> + <c:forEach items="#{poll.options}" var="optionrow" varStatus="status"> + <tr> + <td> + <input type="radio" name="vote" value="#{(status.index)-1}"/> + &nbsp; + </td> + <td> + <span class="gen">#{optionrow.question}</span> + </td> + </tr> + </c:forEach> + </table> + </td> + </tr> + <tr> + <td align="center"> + <h:commandButton action="#{pollController.vote}" value="${resource.Submit_vote}" styleClass="liteoption"/> + </td> + </tr> + <tr> + <td align="center"><span class="gensmall"> + <b> + <!-- view results link --> + <h:outputLink value="#{forums:outputLink(shared.links['topic'],true)}" styleClass="gensmall"> + <f:param name="t" value="${t}"/> + <f:param name="results" value="1"/> + <h:outputText value="${resource.View_results}"/> + </h:outputLink> + </b></span> + </td> + </tr> + </table> + </h:form> + </td> +</tr> + +</ui:define> +</ui:composition> + +</div> \ No newline at end of file Added: labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_result.xhtml =================================================================== --- labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_result.xhtml 2006-05-05 15:25:23 UTC (rev 4104) +++ labs/jbossforums/trunk/forums/src/resources/portal-forums-war/views/topics/viewtopic_poll_result.xhtml 2006-05-05 23:06:00 UTC (rev 4105) @@ -0,0 +1,111 @@ +<!-- +/* +* JBoss, Home of Professional Open Source +* Copyright 2005, JBoss Inc., and individual contributors as indicated +* by the @authors tag. See the copyright.txt in the distribution for a +* full listing of individual contributors. +* +* This is free software; you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as +* published by the Free Software Foundation; either version 2.1 of +* the License, or (at your option) any later version. +* +* This software is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this software; if not, write to the Free +* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +* 02110-1301 USA, or see the FSF site: http://www.fsf.org. +*/ +--> + +<div xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://java.sun.com/jsf/facelets" + xmlns:c="http://java.sun.com/jstl/core" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:t="http://myfaces.apache.org/tomahawk" + xmlns:forums="http://www.jboss.com/products/jbossportal/forums" + class="bb" +> + +<ui:composition template="/views/common/common.xhtml"> +<ui:define name="mainContent"> + +<tr> + <td class="row2" colspan="2"><br clear="all"/> + <table cellspacing="0" cellpadding="4" border="0" align="center"> + <!-- title --> + <tr> + <td align="center"><span class="gen"><b>#{poll.title}</b></span></td> + </tr> + <!-- option results --> + <tr> + <td align="center"> + <table cellspacing="0" cellpadding="2" border="0"> + <c:forEach items="#{poll.options}" var="optionrow" varStatus="status"> + <tr> + <td><span class="gen">#{optionrow.question}</span></td> + <td> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td> + <img src="#{forums:themeURL('resourcePollVotingLBar')}" width="4" height="12" alt=""/> + </td> + <td> + <img src="#{forums:themeURL('resourcePollVotingBar')}" + width="#{(forums:votePercent(poll,optionrow))*205}" + height="12" + alt=""/> + </td> + <td> + <img src="#{forums:themeURL('resourcePollVotingRBar')}" width="4" height="12" alt=""/> + </td> + </tr> + </table> + </td> + <td align="center"> + <b> + <span class="gen"> + &nbsp;${forums:percentStr(forums:votePercent(poll,optionrow))}&nbsp; + </span> + </b> + </td> + <td align="center"> + <span class="gen">[ #{optionrow.votes} ]</span> + </td> + </tr> + </c:forEach> + </table> + </td> + </tr> + <!-- total result --> + <tr> + <td colspan="4" align="center"> + <span class="gen"><b>${resource.Total_votes} : #{poll.votesSum}</b></span> + </td> + </tr> + <!-- switch back to the voting screen --> + <tr> + <td align="center"><span class="gensmall"> + <b> + <!-- view results link --> + <h:outputLink value="#{forums:outputLink(shared.links['topic'],true)}" styleClass="gensmall"> + <f:param name="t" value="${t}"/> + <h:outputText value="${resource.View_ballot}"/> + </h:outputLink> + </b> + </span> + </td> + </tr> + </table> + </td> +</tr> + +</ui:define> +</ui:composition> + +</div> \ No newline at end of file |
From: <jbo...@li...> - 2006-05-05 15:25:27
|
Author: jfr...@jb... Date: 2006-05-05 11:25:23 -0400 (Fri, 05 May 2006) New Revision: 4104 Added: labs/jbossweb/trunk/src/share/native/build/buildphp.sh Log: First version of buildphp.sh (for debian only). Added: labs/jbossweb/trunk/src/share/native/build/buildphp.sh =================================================================== --- labs/jbossweb/trunk/src/share/native/build/buildphp.sh 2006-05-05 15:10:40 UTC (rev 4103) +++ labs/jbossweb/trunk/src/share/native/build/buildphp.sh 2006-05-05 15:25:23 UTC (rev 4104) @@ -0,0 +1,75 @@ +#/bin/sh +# +# JBoss, the OpenSource J2EE webOS +# +# Distributable under LGPL license. +# See terms of license at gnu.org. +# +# Build php and its extensions +# There are windoze binaries +# + +PHPVER=5.1.4 +URL=http://de.php.net/distributions/php-${PHPVER}.tar.gz + +# get and extract php +wget $URL +tar zxf php-${PHPVER}.tar.gz +(cd php-${PHPVER} + ./configure --prefix=$HOME/PHP \ + --with-tsrm-pthreads --enable-shared \ + --enable-embed=shared \ + --with-kerberos \ + --with-imap-ssl \ + --enable-all=shared \ + --enable-gd-native-ttf \ + --with-jpeg-dir \ + --with-png-dir \ + --with-zlib-dir \ + --with-xpm-dir \ + --with-ttf \ + --with-freetype-dir \ + --with-t1lib \ + --with-fbsql=no \ + --with-fdftk=no \ + --with-gmp=no \ + --with-hwapi=no \ + --with-informix=no \ + --with-interbase=no \ + --with-ming=no \ + --with-mssql=no \ + --with-oci8=no \ + --with-pdo-oci=no \ + --with-pdo-dblib=no \ + --with-pdo-firebird=no \ + --with-pdo-odbc=no \ + --with-libedit=no \ + --disable-reflection \ + --with-snmp=no \ + --disable-spl \ + --with-sybase=no \ + --with-sybase-ct=no \ + --with-recode=no \ + \ + --with-msql=no \ + \ + --enable-maintainer-zts +make +make install +) +rm php-${PHPVER}.tar.gz + +# Now build the native part of the php5servlet +#-DZTS is the php Thread Safe Resource Manager +#-DPTHREADS to use pthreads. +# + +(cd ../php5servlet + gcc -c -I $HOME/PHP/include/php/main \ + -I $HOME/PHP/include/php/Zend \ + -I $HOME/PHP/include/php/TSRM \ + -I $HOME/PHP/include/php \ + -DZTS -DPTHREADS \ + php5servlet.c + gcc -shared -o libphp5servlet.so php5servlet.o -L $HOME/PHP/lib -lphp5 +) |
From: <jbo...@li...> - 2006-05-05 15:03:02
|
Author: adamw Date: 2006-05-05 11:02:53 -0400 (Fri, 05 May 2006) New Revision: 4102 Modified: labs/shotoku/trunk/shotoku-svn/hooks/shotoku-update.sh Log: http://jira.jboss.com/jira/browse/JBSHOTOKU-31 Modified: labs/shotoku/trunk/shotoku-svn/hooks/shotoku-update.sh =================================================================== --- labs/shotoku/trunk/shotoku-svn/hooks/shotoku-update.sh 2006-05-05 15:02:20 UTC (rev 4101) +++ labs/shotoku/trunk/shotoku-svn/hooks/shotoku-update.sh 2006-05-05 15:02:53 UTC (rev 4102) @@ -3,9 +3,16 @@ # TRIGGERS A SHOTOKU WC UPDATE ON A GIVEN REMOTE MACHINE # CONFIGURATION +# Username&password to access the servlet USERNAME="ShotokuUpdate" PASSWORD="ShotokuUpdate" +# Address of the shotoku update servlet REMOTE="http://192.168.1.102:8080/shotoku-admin/update" +# Shotoku id of the repository (as in shotoku.properties) +ID=priv +# Prefix of the repository (as in shotoku.properties, relative to the root +# of the whole svn repository, without a slash in the beginning, with a +# trailing slash. REPO_PREFIX="private/adamw/test/" # ------------- @@ -20,9 +27,9 @@ if [ -n "$SVNLOOK_DATA" ] then - POST_DATA="data=priv#$REV#$SVNLOOK_DATA" - - wget -O - --http-user=$USERNAME --http-password=$PASSWORD --post-data="$POST_DATA" $REMOTE >/dev/null + POST_DATA="data=$ID#$REV#$SVNLOOK_DATA" + + wget -O - -o - --http-user=$USERNAME --http-password=$PASSWORD --post-data="$POST_DATA" $REMOTE >/dev/null fi exit 0 |