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
|
From: <jbo...@li...> - 2006-01-09 02:45:30
|
Author: mar...@jb... Date: 2006-01-08 21:45:27 -0500 (Sun, 08 Jan 2006) New Revision: 2032 Removed: trunk/labs/jbossrules/drools-core/src/test/Resources/ Log: in in process of renaming |
From: <jbo...@li...> - 2006-01-09 02:43:37
|
Author: mar...@jb... Date: 2006-01-08 21:43:33 -0500 (Sun, 08 Jan 2006) New Revision: 2031 Added: trunk/labs/jbossrules/drools-core/src/test/resources/ Removed: trunk/labs/jbossrules/drools-core/src/test/resourc/ Log: in in process of renaming Copied: trunk/labs/jbossrules/drools-core/src/test/resources (from rev 2030, trunk/labs/jbossrules/drools-core/src/test/resourc) |
From: <jbo...@li...> - 2006-01-09 02:41:56
|
Author: mar...@jb... Date: 2006-01-08 21:41:48 -0500 (Sun, 08 Jan 2006) New Revision: 2030 Added: trunk/labs/jbossrules/drools-core/src/test/resourc/ Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java Log: -in process of renaming Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-09 02:07:56 UTC (rev 2029) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-09 02:41:48 UTC (rev 2030) @@ -112,9 +112,9 @@ public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException, RuleIntegrationException, RuleSetIntegrationException, InvalidPatternException, FactException, IOException, InterruptedException { RuleSet ruleSet = new RuleSet( "Miss Manners" ); - ruleSet.addRule( getAssignFirstSeatRule() ); +// ruleSet.addRule( getAssignFirstSeatRule() ); // ruleSet.addRule( getMakePath() ); -// ruleSet.addRule( getFindSeating() ); + ruleSet.addRule( getFindSeating() ); // ruleSet.addRule( getPathDone() ); // ruleSet.addRule( getAreWeDone() ); // ruleSet.addRule( getContinueProcessing() ); Copied: trunk/labs/jbossrules/drools-core/src/test/resourc (from rev 2020, trunk/labs/jbossrules/drools-core/src/test/Resources) |
From: <jbo...@li...> - 2006-01-09 02:08:04
|
Author: mar...@jb... Date: 2006-01-08 21:07:56 -0500 (Sun, 08 Jan 2006) New Revision: 2029 Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java Log: -removed mistak from Viewer Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java 2006-01-09 02:07:00 UTC (rev 2028) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java 2006-01-09 02:07:56 UTC (rev 2029) @@ -74,7 +74,6 @@ ReteooToJungVisitor visitor = new ReteooToJungVisitor(); visitor.visit( ruleBase ); this.graph = visitor.getGraph(); - this.graph.g final PluggableRenderer pr = new PluggableRenderer(); |
From: <jbo...@li...> - 2006-01-09 02:07:13
|
Author: mar...@jb... Date: 2006-01-08 21:07:00 -0500 (Sun, 08 Jan 2006) New Revision: 2028 Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java Removed: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seat.java Modified: trunk/labs/jbossrules/drools-core/pom.xml trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/RuleSet.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/event/WorkingMemoryEventSupportTest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seating.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Sex.java Log: -Added Jung based reteviewer with temporary example. Modified: trunk/labs/jbossrules/drools-core/pom.xml =================================================================== --- trunk/labs/jbossrules/drools-core/pom.xml 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/pom.xml 2006-01-09 02:07:00 UTC (rev 2028) @@ -11,5 +11,13 @@ <name>Drools :: Rete-OO Core</name> <version>3.0-M1-dev</version> + + <dependencies> + <dependency> + <groupId>jung</groupId> + <artifactId>jung</artifactId> + <version>1.7.2</version> + </dependency> + </dependencies> </project> \ No newline at end of file Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/ReteooJungViewer.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -0,0 +1,185 @@ +package org.drools; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; + +import org.drools.reteoo.ReteooToJungVisitor; +import org.drools.reteoo.ReteooToJungVisitor.ReteooNodeVertex; + +import edu.uci.ics.jung.graph.Graph; +import edu.uci.ics.jung.graph.Vertex; +import edu.uci.ics.jung.graph.decorators.DefaultToolTipFunction; +import edu.uci.ics.jung.graph.decorators.EdgeShape; +import edu.uci.ics.jung.graph.decorators.EllipseVertexShapeFunction; +import edu.uci.ics.jung.graph.decorators.PickableEdgePaintFunction; +import edu.uci.ics.jung.graph.decorators.PickableVertexPaintFunction; +import edu.uci.ics.jung.graph.impl.SparseGraph; +import edu.uci.ics.jung.graph.impl.SparseTree; +import edu.uci.ics.jung.visualization.DefaultGraphLabelRenderer; +import edu.uci.ics.jung.visualization.GraphMouseListener; +import edu.uci.ics.jung.visualization.GraphZoomScrollPane; +import edu.uci.ics.jung.visualization.Layout; +import edu.uci.ics.jung.visualization.PluggableRenderer; +import edu.uci.ics.jung.visualization.ShapePickSupport; +import edu.uci.ics.jung.visualization.VisualizationViewer; +import edu.uci.ics.jung.visualization.contrib.DAGLayout; +import edu.uci.ics.jung.visualization.contrib.TreeLayout; +import edu.uci.ics.jung.visualization.control.CrossoverScalingControl; +import edu.uci.ics.jung.visualization.control.CrossoverScalingGraphMousePlugin; +import edu.uci.ics.jung.visualization.control.PickingGraphMousePlugin; +import edu.uci.ics.jung.visualization.control.PluggableGraphMouse; +import edu.uci.ics.jung.visualization.control.ScalingControl; +import edu.uci.ics.jung.visualization.control.ViewScalingGraphMousePlugin; + +import samples.graph.TreeLayoutDemo; + +public class ReteooJungViewer extends JFrame { + + /** + * the graph + */ + Graph graph; + + /** + * the visual component and renderer for the graph + */ + VisualizationViewer vv; + + // public static void main(String[] args) { + // javax.swing.SwingUtilities.invokeLater(new Runnable() { + // public void run() { + // createAndShowGUI(); + // } + // }); + // } + + public static void createAndShowGUI(RuleBase ruleBase) { + ReteooJungViewer viewer = new ReteooJungViewer(ruleBase);; + } + + public ReteooJungViewer(RuleBase ruleBase) { + ReteooToJungVisitor visitor = new ReteooToJungVisitor(); + visitor.visit( ruleBase ); + this.graph = visitor.getGraph(); + this.graph.g + + final PluggableRenderer pr = new PluggableRenderer(); + + pr.setVertexPaintFunction( new PickableVertexPaintFunction( pr, + Color.black, + Color.white, + Color.yellow ) ); + pr.setEdgePaintFunction( new PickableEdgePaintFunction( pr, + Color.black, + Color.cyan ) ); + pr.setGraphLabelRenderer( new DefaultGraphLabelRenderer( Color.cyan, + Color.cyan ) ); + + pr.setVertexShapeFunction( new EllipseVertexShapeFunction() ); + + Layout layout = new DAGLayout( this.graph ); + + this.vv = new VisualizationViewer( layout, + pr, + new Dimension( 600, + 600 ) ); + this.vv.setPickSupport( new ShapePickSupport() ); + pr.setEdgeShapeFunction( new EdgeShape.QuadCurve() ); + this.vv.setBackground( Color.white ); + + // add a listener for ToolTips + this.vv.setToolTipFunction( new DefaultToolTipFunction() ); + + Container content = getContentPane(); + final GraphZoomScrollPane panel = new GraphZoomScrollPane( this.vv ); + content.add( panel ); + + final PluggableGraphMouse graphMouse = new PluggableGraphMouse(); + graphMouse.add( new PickingGraphMousePlugin() ); + graphMouse.add( new ViewScalingGraphMousePlugin() ); + graphMouse.add( new CrossoverScalingGraphMousePlugin() ); + + this.vv.setGraphMouse( graphMouse ); + + final ScalingControl scaler = new CrossoverScalingControl(); + + JButton plus = new JButton( "+" ); + plus.addActionListener( new ActionListener() { + public void actionPerformed(ActionEvent e) { + scaler.scale( ReteooJungViewer.this.vv, + 1.1f, + ReteooJungViewer.this.vv.getCenter() ); + } + } ); + JButton minus = new JButton( "-" ); + minus.addActionListener( new ActionListener() { + public void actionPerformed(ActionEvent e) { + scaler.scale( ReteooJungViewer.this.vv, + 0.9f, + ReteooJungViewer.this.vv.getCenter() ); + } + } ); + + JPanel scaleGrid = new JPanel( new GridLayout( 1, + 0 ) ); + scaleGrid.setBorder( BorderFactory.createTitledBorder( "Zoom" ) ); + + JPanel controls = new JPanel(); + scaleGrid.add( plus ); + scaleGrid.add( minus ); + controls.add( scaleGrid ); + content.add( controls, + BorderLayout.SOUTH ); + + final JEditorPane editorPane = new JEditorPane(); + editorPane.setEditable( false ); + editorPane.setContentType( "text/html" ); + + this.vv.addGraphMouseListener( new GraphMouseListener() { + + public void graphClicked(Vertex vertex, + MouseEvent e) { + System.out.println( vertex ); + editorPane.setText( ((HtmlContent)vertex).getHtml() ); + } + + public void graphPressed(Vertex vertex, + MouseEvent e) { + } + + public void graphReleased(Vertex vertex, + MouseEvent e) { + } + + } ); + + // Put the editor pane in a scroll pane. + JScrollPane editorScrollPane = new JScrollPane( editorPane ); + editorScrollPane.setPreferredSize( new Dimension( 250, + 145 ) ); + editorScrollPane.setMinimumSize( new Dimension( 10, + 10 ) ); + content.add( editorScrollPane, + BorderLayout.EAST ); + + pack(); + setVisible( true ); + } + + public interface HtmlContent { + public String getHtml(); + } +} Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -142,12 +142,14 @@ addRule( and[i], rule ); } - TerminalNode node = new TerminalNode( this.tupleSource, + TerminalNode node = new TerminalNode( ++this.id, + this.tupleSource, rule ); } private void addRule(And and, Rule rule) { + this.objectSource = null; for ( Iterator it = and.getChildren().iterator(); it.hasNext(); ) { Object object = it.next(); @@ -222,7 +224,7 @@ private BetaNodeBinder attachColumn(Column column, ConditionalElement parent) { - addDeclarations( column ); +// addDeclarations( column ); List predicates = attachAlphaNodes( column ); @@ -237,20 +239,20 @@ return binder; } - private void addDeclarations(Column column) { - for ( Iterator it = column.getDeclarations().iterator(); it.hasNext(); ) { - Declaration declaration = (Declaration) it.next(); - this.declarations.put( declaration.getIdentifier(), - declaration ); - } +// private void addDeclarations(Column column) { +// for ( Iterator it = column.getDeclarations().iterator(); it.hasNext(); ) { +// Declaration declaration = (Declaration) it.next(); +// this.declarations.put( declaration.getIdentifier(), +// declaration ); +// } +// +// if ( column.getBinding() != null ) { +// Binding binding = column.getBinding(); +// this.declarations.put( binding.getIdentifier(), +// binding ); +// } +// } - if ( column.getBinding() != null ) { - Binding binding = column.getBinding(); - this.declarations.put( binding.getIdentifier(), - binding ); - } - } - public List attachAlphaNodes(Column column) { List constraints = column.getConstraints(); Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -218,6 +218,10 @@ return new PrimitiveLongMap( 32, 8 ); } + + public String toString() { + return "[ObjectTypeNode objectType=" + this.objectType + "]"; + } public boolean equals(Object object) { if ( this == object ) { @@ -228,6 +232,10 @@ return false; } - return this.objectType.equals( ((ObjectTypeNode) object).getObjectType() ); + return this.objectType.equals( this.objectType ); } + + public int hashCode() { + return this.objectType.hashCode(); + } } Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteooToJungVisitor.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -0,0 +1,545 @@ +package org.drools.reteoo; + +/* + * $Id: ReteooToJungVisitor.java,v 1.11 2005/02/02 00:23:22 mproctor Exp $ + * + * Copyright 2004-2004 (C) The Werken Company. All Rights Reserved. + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain copyright statements and + * notices. Redistributions must also contain a copy of this document. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name "drools" must not be used to endorse or promote products derived + * from this Software without prior written permission of The Werken Company. + * For written permission, please contact bo...@we.... + * + * 4. Products derived from this Software may not be called "drools" nor may + * "drools" appear in their names without prior written permission of The Werken + * Company. "drools" is a trademark of The Werken Company. + * + * 5. Due credit should be given to The Werken Company. (http://werken.com/) + * + * THIS SOFTWARE IS PROVIDED BY THE WERKEN COMPANY AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE WERKEN COMPANY OR ITS CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import edu.uci.ics.jung.graph.Graph; +import edu.uci.ics.jung.graph.Vertex; +import edu.uci.ics.jung.graph.impl.DirectedSparseEdge; +import edu.uci.ics.jung.graph.impl.DirectedSparseGraph; +import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; +import edu.uci.ics.jung.graph.impl.SparseGraph; +import edu.uci.ics.jung.graph.impl.UndirectedSparseEdge; +import edu.uci.ics.jung.visualization.VisualizationViewer; +import org.drools.ReteooJungViewer.HtmlContent; + +/** + * Produces a graph in GraphViz DOT format. + * + * @see http://www.research.att.com/sw/tools/graphviz/ + * @see http://www.pixelglow.com/graphviz/ + * + * @author Andy Barnett + */ +public class ReteooToJungVisitor extends ReflectiveVisitor { + /** String displayed for Null values. */ + private static final String NULL_STRING = "<NULL>"; + + /** Amount of indention for Node and Edge lines. */ + private static final String INDENT = " "; + + /** + * Keeps track of visited JoinNode DOT IDs. This mapping allows the visitor + * to recognize JoinNodes it has already visited and as a consequence link + * existing nodes back together. This is vital to the Visitor being able to + * link two JoinNodeInputs together through their common JoinNode. + */ + private Map visitedNodes = new HashMap(); + + Graph graph; + + VisualizationViewer vv; + + Vertex rootVertex; + + Vertex parentVertex; + + /** + * Constructor. + */ + public ReteooToJungVisitor() { + } + + public Graph getGraph() { + return this.graph; + } + + /** + * Default visitor if an unknown object is visited. + */ + public void visitObject(Object object) { + Vertex vertex = this.graph.addVertex( new UnkownVertex() ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + + /** + * Null visitor if a NULL object gets visited. Unique String objects are + * generated to ensure every NULL object is distinct. + */ + public void visitNull() { + Vertex vertex = this.graph.addVertex( new UnkownVertex() ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + + /** + * RuleBaseImpl visits its Rete. + */ + public void visitRuleBaseImpl(RuleBaseImpl ruleBase) { + visit( ((RuleBaseImpl) ruleBase).getRete() ); + } + + /** + * Rete visits each of its ObjectTypeNodes. + */ + public void visitRete(Rete rete) { + this.rootVertex = (ReteNodeVertex) this.visitedNodes.get( dotId( rete ) ); + if ( this.rootVertex == null ) { + this.rootVertex = new ReteNodeVertex( rete ); + this.visitedNodes.put( dotId( rete ), + this.rootVertex ); + } + + this.graph = new DirectedSparseGraph(); + this.graph.addVertex( this.rootVertex ); + this.parentVertex = this.rootVertex; + for ( Iterator i = rete.getObjectTypeNodeIterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + } + + /** + * ObjectTypeNode displays its objectType and then visits each of its + * ParameterNodes. + */ + public void visitObjectTypeNode(ObjectTypeNode node) { + Vertex vertex = (ObjectTypeNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new ObjectTypeNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + //makeNode( node, + // "ObjectTypeNode", + // "objectType: " + node.getObjectType( ) ); + for ( Iterator i = node.getObjectSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitAlphaNode(AlphaNode node) { + Vertex vertex = (AlphaNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new AlphaNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getObjectSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitRightInputAdapterNode(RightInputAdapterNode node) { + Vertex vertex = (RightInputAdapterNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new RightInputAdapterNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getObjectSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitLeftInputAdapterNode(LeftInputAdapterNode node) { + Vertex vertex = (LeftInputAdapterNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new LeftInputAdapterNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getTupleSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitJoinNode(JoinNode node) { + Vertex vertex = (JoinNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new JoinNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getTupleSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitNotNode(NotNode node) { + Vertex vertex = (NotNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new NotNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getTupleSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + public void visitTestNode(TestNode node) { + Vertex vertex = (TestNodeVertex) this.visitedNodes.get( dotId( node ) ); + if ( vertex == null ) { + vertex = new TestNodeVertex( node ); + this.graph.addVertex( vertex ); + this.visitedNodes.put( dotId( node ), + vertex ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + Vertex oldParentVertex = this.parentVertex; + this.parentVertex = vertex; + + for ( Iterator i = node.getTupleSinks().iterator(); i.hasNext(); ) { + Object nextNode = i.next(); + visitNode( nextNode ); + } + this.parentVertex = oldParentVertex; + } else { + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + } + } + + // /** + // * ConditionNode displays its condition and tuple Declarations and then + // * visits its TupleSink. + // */ + // public void visitConditionNode(ConditionNode node) + // { + // makeTupleSourceNode( node, + // "ConditionNode", + // "TupleSource/TupleSink", + // "condition: " + node.getCondition( ) + newline + format( node.getTupleDeclarations( ), + // "tuple" ) ); + // } + + /** + * TerminalNode displays its rule. + */ + public void visitTerminalNode(TerminalNode node) { + Vertex vertex = this.graph.addVertex( new TerminalNodeVertex( node ) ); + this.graph.addEdge( new DroolsDirectedEdge( this.parentVertex, + vertex ) ); + + // makeNode( node, + // "TerminalNode", + // "TupleSink", + // "rule: " + node.getRule( ).getName( ) ); + } + + /** + * Helper method to ensure nodes are not visited more than once. + */ + private void visitNode(Object node) { + visit( node ); + } + + /** + * The identity hashCode for the given object is used as its unique DOT + * identifier. + */ + private static String dotId(Object object) { + return Integer.toHexString( System.identityHashCode( object ) ).toUpperCase(); + } + + class DroolsDirectedEdge extends DirectedSparseEdge { + public DroolsDirectedEdge(Vertex v1, + Vertex v2) { + super( v1, + v2 ); + } + + // public String toString() { + // return null; + // } + } + + class ReteNodeVertex extends ReteooNodeVertex { + private final Rete node; + + public ReteNodeVertex(Rete node) { + super(); + this.node = node; + } + + public String getHtml() { + return "Rete : " + this.node.getId(); + } + + public String toString() { + return "Rete"; + } + } + + class ObjectTypeNodeVertex extends ReteooNodeVertex { + private final ObjectTypeNode node; + + public ObjectTypeNodeVertex(ObjectTypeNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "ObjectTypeNode : " + this.node.getId(); + } + + public String toString() { + return "ObjectTypeNode"; + } + } + + class AlphaNodeVertex extends ReteooNodeVertex { + private final AlphaNode node; + + public AlphaNodeVertex(AlphaNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "AlphaNode : " + this.node.getId(); + } + + public String toString() { + return "AlphaNode"; + } + } + + class LeftInputAdapterNodeVertex extends ReteooNodeVertex { + private final LeftInputAdapterNode node; + + public LeftInputAdapterNodeVertex(LeftInputAdapterNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "LeftInputAdapterNode : " + this.node.getId(); + } + + public String toString() { + return "leftInputAdapter"; + } + } + + class RightInputAdapterNodeVertex extends ReteooNodeVertex { + private final RightInputAdapterNode node; + + public RightInputAdapterNodeVertex(RightInputAdapterNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "RightInputAdapterNodeVertex : " + this.node.getId(); + } + + public String toString() { + return "RightInputAdapterNodeVertex"; + } + } + + class JoinNodeVertex extends ReteooNodeVertex { + private final JoinNode node; + + public JoinNodeVertex(JoinNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "JoinNode : " + this.node.getId(); + } + + public String toString() { + return "JoinNode"; + } + } + + class NotNodeVertex extends ReteooNodeVertex { + private final NotNode node; + + public NotNodeVertex(NotNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "NotNode : " + this.node.getId(); + } + + public String toString() { + return "NotNode"; + } + } + + class TestNodeVertex extends ReteooNodeVertex { + private final TestNode node; + + public TestNodeVertex(TestNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "TestNode : " + this.node.getId(); + } + + public String toString() { + return "TestNode"; + } + } + + class TerminalNodeVertex extends ReteooNodeVertex { + private final TerminalNode node; + + public TerminalNodeVertex(TerminalNode node) { + super(); + this.node = node; + } + + public String getHtml() { + return "TerminalNode : " + this.node.getId(); + } + + public String toString() { + return "TerminalNode"; + } + } + + class UnkownVertex extends ReteooNodeVertex { + + public UnkownVertex() { + super(); + } + + public String getHtml() { + return "Uknown"; + } + + public String toString() { + return "Unknown"; + } + } + + public static abstract class ReteooNodeVertex extends DirectedSparseVertex + implements + HtmlContent { + public ReteooNodeVertex() { + super(); + } + + public abstract String getHtml(); + } +} Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -53,7 +53,7 @@ * * @author <a href="mailto:bo...@en...">bob mcwhirter </a> */ -final class TerminalNode +final class TerminalNode extends BaseNode implements TupleSink { // ------------------------------------------------------------ @@ -75,8 +75,10 @@ * @param rule * The rule. */ - TerminalNode(TupleSource inputSource, + TerminalNode(int id, + TupleSource inputSource, Rule rule) { + super(id); this.rule = rule; inputSource.addTupleSink( this ); @@ -143,4 +145,20 @@ // TODO Auto-generated method stub } + + public void attach() { + // TODO Auto-generated method stub + + } + + public void remove() { + // TODO Auto-generated method stub + + } + + public void updateNewNode(WorkingMemoryImpl workingMemory, + PropagationContext context) throws FactException { + // TODO Auto-generated method stub + + } } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -8,8 +8,7 @@ public class Column { private final ObjectType objectType; - private List constraints = Collections.EMPTY_LIST; - private List declarations = Collections.EMPTY_LIST; + private List constraints = Collections.EMPTY_LIST; private final ColumnBinding binding; private final int index; @@ -40,17 +39,6 @@ return this.objectType; } - public List getDeclarations() { - return Collections.unmodifiableList( this.declarations ); - } - - public void addDeclaration(Declaration declaration) { - if ( this.declarations == Collections.EMPTY_LIST ) { - this.declarations = new ArrayList( 1 ); - } - this.declarations.add( declaration ); - } - public List getConstraints() { return Collections.unmodifiableList( this.constraints ); } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -519,5 +519,28 @@ public String getModule() { return this.module; } + + public String toString() { + return "[Rule name=" + this.name + ", module=" + this.module + ", salience=" + this.salience + ", no-loop=" + this.noLoop + "]"; + } + + public boolean equals(Object object) { + if ( this == object ) { + return true; + } + + if (object == null||!(object instanceof Rule)) { + return false; + } + + Rule other = (Rule) object; + + return (this.name.equals(other.name) && this.module.equals( other.module ) && this.salience == other.salience && this.noLoop == other.noLoop); + } + + public int hashCode() { + return this.name.hashCode(); + } + } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/RuleSet.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/RuleSet.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/RuleSet.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -266,4 +266,26 @@ public RuleBaseContext getRuleBaseContext() { return this.ruleBaseContext; } + + public String toString() { + return "[RuleSet name=" + this.name + "]"; + } + + public boolean equals(Object object) { + if ( this == object ) { + return true; + } + + if (object == null||!(object instanceof RuleSet)) { + return false; + } + + RuleSet other = (RuleSet) object; + + return (this.name.equals(other.name)); + } + + public int hashCode() { + return this.name.hashCode(); + } } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -115,15 +115,6 @@ // java.lang.Object // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /** - * Produce the hash of this object. - * - * @return The hash. - */ - public int hashCode() { - return getClassType().hashCode(); - } - protected void setValueType(Class clazz) { if ( clazz == Character.class ) { this.valueType = Evaluator.CHAR_TYPE; @@ -147,6 +138,10 @@ this.valueType = Evaluator.OBJECT_TYPE; } } + + public String toString() { + return "[ClassObjectType class=" + getClassType().getName() + "]"; + } /** * Determine if another object is equal to this. @@ -168,8 +163,10 @@ return this.objectTypeClass == ( (ClassObjectType) object).objectTypeClass; } - - public String toString() { - return getClassType().getName(); + + public int hashCode() { + return this.objectTypeClass.hashCode(); } + + } Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/event/WorkingMemoryEventSupportTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/event/WorkingMemoryEventSupportTest.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/event/WorkingMemoryEventSupportTest.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -12,5 +12,5 @@ assertTrue( Serializable.class.isAssignableFrom( WorkingMemoryEventSupport.class ) ); } - // TODO: Need more tests but I'm tired! Need sleep. + // TODO: Need more tests but I'M tired! Need sleep. } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -51,11 +51,17 @@ public static final int ASSIGN_SEATS = 1; public static final int MAKE_PATH = 2; public static final int CHECK_DONE = 3; - public static final int PRINT_RESULTS = 4; - + public static final int PRINT_RESULTS = 4; + private int state; - //private Path path; + public Context(String state) { + if ("start".equals( state ) ) { + this.state = Context.START_UP; + } else { + throw new RuntimeException("Context '" + state + "' does not exist for Context Enum" ); + } + } public Context(int state) { this.state = state; @@ -71,9 +77,25 @@ public int getState() { return this.state; - } + } + + public String getStringValue() { + switch (this.state) { + case 0: + return "START_UP"; + case 1: + return "ASSIGN_SEATS"; + case 2: + return "MAKE_PATH"; + case 3: + return "CHECK_DONE"; + case 4: + return "PRINT_RESULTS"; + } + return ""; + } public String toString() { - return "{state=" + this.state + "}"; + return "[Context state=" + getStringValue() + "]"; } } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -75,6 +75,6 @@ } public String toString() { - return "{name=" + this.name + ",sex=" + this.sex + ",hobbies=" + this.hobby + "}"; + return "[Guest name=" + this.name + ", sex=" + this.sex + ", hobbies=" + this.hobby + "]"; } } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -1,9 +1,9 @@ package org.drools.examples.manners; public class Hobby { - public static final Hobby h1 = new Hobby( 1 ); - public static final Hobby h2 = new Hobby( 2 ); - public static final Hobby h3 = new Hobby( 3 ); + public static final Hobby H1 = new Hobby( 1 ); + public static final Hobby H2 = new Hobby( 2 ); + public static final Hobby H3 = new Hobby( 3 ); public static final String stringH1 = "h1"; public static final String stringH2 = "h2"; @@ -15,7 +15,7 @@ this.hobby = hobby; } - public String getValue() { + public String getHobby() { switch ( this.hobby ) { case 1 : return stringH1; @@ -28,8 +28,20 @@ } } + public static Hobby resolve(String hobby) { + if (stringH1.equals( hobby ) ) { + return Hobby.H1; + } else if (stringH2.equals( hobby ) ) { + return Hobby.H2; + } else if (stringH3.equals( hobby ) ) { + return Hobby.H3; + } else { + throw new RuntimeException("Hobby '" + hobby + "' does not exist for Hobby Enum" ); + } + } + public String toString() { - return getValue(); + return getHobby(); } public boolean equals(Object object) { Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/LastSeat.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -57,6 +57,6 @@ } public String toString() { - return "{seat=" + this.seat + "}"; + return "[LastSeat seat=" + this.seat + "]"; } } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -11,6 +11,7 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; @@ -20,6 +21,7 @@ import org.drools.Cheese; import org.drools.FactException; +import org.drools.ReteooJungViewer; import org.drools.RuleBase; import org.drools.RuleIntegrationException; import org.drools.RuleSetIntegrationException; @@ -106,9 +108,9 @@ this.booleanNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE, Evaluator.NOT_EQUAL ); - } + } - public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException, RuleIntegrationException, RuleSetIntegrationException, InvalidPatternException, FactException { + public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException, RuleIntegrationException, RuleSetIntegrationException, InvalidPatternException, FactException, IOException, InterruptedException { RuleSet ruleSet = new RuleSet( "Miss Manners" ); ruleSet.addRule( getAssignFirstSeatRule() ); // ruleSet.addRule( getMakePath() ); @@ -118,17 +120,34 @@ // ruleSet.addRule( getContinueProcessing() ); // ruleSet.addRule( getAllDone() ); - RuleBaseImpl ruleBase = new RuleBaseImpl(); + final RuleBaseImpl ruleBase = new RuleBaseImpl(); ruleBase.addRuleSet( ruleSet ); - WorkingMemory workingMemory = ruleBase.newWorkingMemory(); - workingMemory.assertObject( new Context( Context.START_UP ) ); - workingMemory.assertObject( new Guest("mark", Sex.m, Hobby.h1) ); - workingMemory.assertObject( new Count(0) ); + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + ReteooJungViewer.createAndShowGUI(ruleBase); + } + }); - workingMemory.fireAllRules(); + while (true) { + Thread.sleep( 1000 ); + } - System.out.println( "ttt" ); + +// +// WorkingMemory workingMemory = ruleBase.newWorkingMemory(); +// +// InputStream is = getClass().getResourceAsStream( "/manners16.dat" ); +// List list = getInputObjects(is); +// for (Iterator it = list.iterator(); it.hasNext(); ) { +// workingMemory.assertObject( it.next() ); +// } +// //System.out.println( list ); +// +// workingMemory.assertObject( new Count(0) ); +// +// workingMemory.fireAllRules(); + } /** @@ -234,7 +253,7 @@ context.setState( Context.ASSIGN_SEATS ); drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), context ); - System.out.println( "assigned first seat : " + guestName ); + System.out.println( "assigned first seat : " + guest ); } catch ( Exception e ) { throw new ConsequenceException( e ); @@ -368,9 +387,13 @@ String guestName = (String) tuple.get( pathGuestNameDeclaration ); int seat = ((Integer) tuple.get( pathSeatDeclaration )).intValue(); - drools.assertObject( new Path( id, - seat, - guestName ) ); + Path path = new Path( id, + seat, + guestName ); + + drools.assertObject( path ); + + System.out.println( path ); } catch ( Exception e ) { throw new ConsequenceException( e ); } @@ -396,7 +419,7 @@ * when { * context : Context( state == Context.ASSIGN_SEATS ) * Seating( seatingId:id, seatingPid:pid, pathDone == true - * seatingRightGuestName:rightGuestName ) + * seatingRightSeat:rightSeat seatingRightGuestName:rightGuestName ) * Guest( name == seatingRightGuestName, rightGuestSex:sex, rightGuestHobby:hobby ) * Guest( leftGuestName:name , sex != rightGuestSex, hobby == rightGuestHobby ) * @@ -444,8 +467,7 @@ // ------------------------------- // Seating( seatingId:id, seatingPid:pid, pathDone == true - // seatingRightSeat:rightSeat - // seatingRightGuestName:rightGuestName ) + // seatingRightSeat:rightSeat seatingRightGuestName:rightGuestName ) // ------------------------------- Column seatingColumn = new Column( 1, seatingType ); @@ -474,8 +496,7 @@ final Declaration seatingRightGuestNameDeclaration = rule.getDeclaration( "seatingRightGuestName" ); final Declaration seatingRightSeatDeclaration = rule.getDeclaration( "seatingRightSeat" ); // -------------- - // Guest( name == seatingRightGuestName, rightGuestSex:sex, - // rightGuestHobby:hobby ) + // Guest( name == seatingRightGuestName, rightGuestSex:sex, rightGuestHobby:hobby ) // --------------- Column rightGuestColumn = new Column( 2, guestType ); @@ -533,7 +554,6 @@ // -------------- // not ( Path( id == seatingId, guestName == leftGuestName) ) - // not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby) ) // -------------- Column notPathColumn = new Column( 3, pathType ); @@ -549,7 +569,7 @@ objectEqualEvaluator ) ); Not notPath = new Not(); notPath.addChild( notPathColumn ); - notPathColumn.addConstraint( notPath ); + rule.addPattern( notPath ); // ------------ // not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby ) ) // ------------ @@ -606,13 +626,14 @@ String rightGuestName = (String) tuple.get( seatingRightGuestNameDeclaration ); Hobby rightGuestHobby = (Hobby) tuple.get( rightGuestHobbyDeclaration ); - drools.assertObject( new Seating( count.getValue(), - seatId, - false, - seatingRightSeat, - leftGuestName, - seatingRightSeat + 1, - rightGuestName ) ); + Seating seating = new Seating( count.getValue(), + seatId, + false, + seatingRightSeat, + leftGuestName, + seatingRightSeat + 1, + rightGuestName ); + drools.assertObject( seating ); drools.assertObject( new Path( count.getValue(), seatingRightSeat + 1, @@ -630,6 +651,8 @@ drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), context ); + System.out.println( seating ); + } catch ( Exception e ) { throw new ConsequenceException( e ); } @@ -938,80 +961,74 @@ return rule; } -// /** -// * Convert the facts from the <code>InputStream</code> to a list of -// * objects. -// */ -// private List getInputObjects(InputStream inputStream) throws IOException -// { -// List list = new ArrayList( ); -// -// BufferedReader br = new BufferedReader( new InputStreamReader( inputStream ) ); -// -// String line; -// while ( (line = br.readLine( )) != null ) -// { -// if ( line.trim( ).length( ) == 0 || line.trim( ).startsWith( ";" ) ) -// { -// continue; -// } -// StringTokenizer st = new StringTokenizer( line, -// "() " ); -// String type = st.nextToken( ); -// -// if ( "guest".equals( type ) ) -// { -// if ( !"name".equals( st.nextToken( ) ) ) -// { -// throw new IOException( "expected 'name' in: " + line ); -// } -// String name = st.nextToken( ); -// if ( !"sex".equals( st.nextToken( ) ) ) -// { -// throw new IOException( "expected 'sex' in: " + line ); -// } -// String sex = st.nextToken( ); -// if ( !"hobby".equals( st.nextToken( ) ) ) -// { -// throw new IOException( "expected 'hobby' in: " + line ); -// } -// String hobby = st.nextToken( ); -// -// Guest guest = (Guest) guests.get( name ); -// if ( guest == null ) -// { -// guest = new Guest( name, -// sex.charAt( 0 ) -// Hobby); -// guests.put( name, -// guest ); -// list.add( guest ); -// } -// guest.addHobby( hobby ); -// } -// -// if ( "last_seat".equals( type ) ) -// { -// if ( !"seat".equals( st.nextToken( ) ) ) -// { -// throw new IOException( "expected 'seat' in: " + line ); -// } -// list.add( new LastSeat( new Integer( st.nextToken( ) ).intValue( ) ) ); -// } -// -// if ( "context".equals( type ) ) -// { -// if ( !"state".equals( st.nextToken( ) ) ) -// { -// throw new IOException( "expected 'state' in: " + line ); -// } -// list.add( new Context( st.nextToken( ) ) ); -// } -// } -// inputStream.close( ); -// -// return list; -// } + /** + * Convert the facts from the <code>InputStream</code> to a list of + * objects. + */ + private List getInputObjects(InputStream inputStream) throws IOException + { + List list = new ArrayList( ); + + BufferedReader br = new BufferedReader( new InputStreamReader( inputStream ) ); + + String line; + while ( (line = br.readLine( )) != null ) + { + if ( line.trim( ).length( ) == 0 || line.trim( ).startsWith( ";" ) ) + { + continue; + } + StringTokenizer st = new StringTokenizer( line, + "() " ); + String type = st.nextToken( ); + + if ( "guest".equals( type ) ) + { + if ( !"name".equals( st.nextToken( ) ) ) + { + throw new IOException( "expected 'name' in: " + line ); + } + String name = st.nextToken( ); + if ( !"sex".equals( st.nextToken( ) ) ) + { + throw new IOException( "expected 'sex' in: " + line ); + } + String sex = st.nextToken( ); + if ( !"hobby".equals( st.nextToken( ) ) ) + { + throw new IOException( "expected 'hobby' in: " + line ); + } + String hobby = st.nextToken( ); + + Guest guest = new Guest( name, + Sex.resolve(sex), + Hobby.resolve(hobby)); + + list.add( guest ); + } + + if ( "last_seat".equals( type ) ) + { + if ( !"seat".equals( st.nextToken( ) ) ) + { + throw new IOException( "expected 'seat' in: " + line ); + } + list.add( new LastSeat( new Integer( st.nextToken( ) ).intValue( ) ) ); + } + + if ( "context".equals( type ) ) + { + if ( !"state".equals( st.nextToken( ) ) ) + { + throw new IOException( "expected 'state' in: " + line ); + } + list.add( new Context( st.nextToken( ) ) ); + } + } + inputStream.close( ); + + return list; + } private InputStream generateData() { final String LINE_SEPARATOR = System.getProperty( "line.separator" ); Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-01-09 02:07:00 UTC (rev 2028) @@ -23,6 +23,9 @@ return this.id; } + public String toString() { + return "[Path id=" + this.id + ", seat=" + this.seat + ", guest=" + this.guestName + "]"; + } } Deleted: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seat.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seat.java 2006-01-08 23:45:28 UTC (rev 2027) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manner... [truncated message content] |
From: <jbo...@li...> - 2006-01-08 23:45:34
|
Author: mic...@jb... Date: 2006-01-08 18:45:28 -0500 (Sun, 08 Jan 2006) New Revision: 2027 Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java Log: Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-08 01:16:44 UTC (rev 2026) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-08 23:45:28 UTC (rev 2027) @@ -87,7 +87,7 @@ assertEquals(2, def2.getVersionHistory().size()); } - public void testNewVersionInMemory() { + public void testNewVersioning() { RuleSetDef set = new RuleSetDef("InMemory", null); RuleDef def1 = new RuleDef("Rule1", "blah"); RuleDef def2 = new RuleDef("Rule2", "blah2"); |
From: <jbo...@li...> - 2006-01-08 01:16:50
|
Author: wrzep Date: 2006-01-07 20:16:44 -0500 (Sat, 07 Jan 2006) New Revision: 2026 Modified: trunk/forge/portal-extensions/forge-podcast/src/java/org/jboss/forge/podcast/Podcast.java Log: itunes parsing (not finished) http://jira.jboss.com/jira/browse/JBLAB-540 Pawel Modified: trunk/forge/portal-extensions/forge-podcast/src/java/org/jboss/forge/podcast/Podcast.java =================================================================== --- trunk/forge/portal-extensions/forge-podcast/src/java/org/jboss/forge/podcast/Podcast.java 2006-01-07 20:03:08 UTC (rev 2025) +++ trunk/forge/portal-extensions/forge-podcast/src/java/org/jboss/forge/podcast/Podcast.java 2006-01-08 01:16:44 UTC (rev 2026) @@ -34,7 +34,6 @@ import java.util.SimpleTimeZone; import java.net.URL; -import java.net.HttpURLConnection; import java.io.IOException; import org.jboss.forge.common.XmlTools; @@ -134,9 +133,35 @@ */ private void fillItemInfo(DelegateContext nodeContext, ItemIF item) { - nodeContext.put("title", item.getTitle()); - nodeContext.put("description", item.getDescription()); + if (item == null) { + return; + } + // item title + String title = item.getTitle(); + if ((title == null) || (title.length() == 0) || (title.equals("<No Title>"))) { + title = item.getElementValue("itunes:subtitle"); + } + nodeContext.put("title", title); + + // item autor + String author = item.getElementValue("itunes:author"); + if ((author == null) || (author.length() == 0)) { + ChannelIF channel = item.getChannel(); + if (channel != null) { + author = channel.getElementValue("itunes:author"); + } + } + nodeContext.put("author", author); + + // item descritpion + String description = item.getDescription(); + if ((description == null) || (description.length() == 0)) { + description = item.getElementValue("itunes:summary"); + } + nodeContext.put("description", description); + + // item date Date date = item.getDate(); if (date != null) { DateFormat dateFormat = DateFormat.getInstance(); @@ -145,21 +170,34 @@ nodeContext.put("date", dateString); } + // item link URL link = item.getLink(); if (link != null) { nodeContext.put("link", link.toString()); } + // item image // For unknown reasons there is not item.getImage() method (informa version 0.6.5) String[] imageProperties = item.getElementValues("image", new String[] {"title", "url", "link", "width", "height", "description"} ); - if (imageProperties != null) { - nodeContext.put("image", imageProperties[1]); + String image = null; + if (imageProperties != null) + image = imageProperties[1]; + + if ((image == null) || (image.length() == 0)) { + image = item.getElementValue("itunes:image"); + } + + if ((image != null) && (image.length() != 0)) { + nodeContext.put("image", image); nodeContext.next("hasImage"); } else { nodeContext.next("hasNotImage"); } + + // duration, usually in dd:hh:mm or hh:mm format + nodeContext.put("duration", item.getElementValue("itunes:duration")); } /** @@ -169,6 +207,7 @@ * @param item ItemEnclosureIF to get information from */ private void fillEnclosureInfo(DelegateContext nodeContext, ItemEnclosureIF enclosure) { + URL enclosureLocation = null; if (enclosure != null) { @@ -190,8 +229,14 @@ */ private void fillChannelInfo(DelegateContext nodeContext, ChannelIF channel) { - nodeContext.put("channel-title", channel.getTitle()); + // channel title + String title = channel.getTitle(); + if ((title == null) || (title.length() == 0) || (title.equals("<No Title>"))) { + title = channel.getElementValue("itunes:subtitle"); + } + nodeContext.put("channel-title", title); + // channel link URL channelLocation = channel.getLocation(); String channelStringLink = null; @@ -201,18 +246,30 @@ channelStringLink = channel.getElementValue("link"); } - if (channelStringLink != null) { - nodeContext.put("channel-link", channelStringLink); - } + nodeContext.put("channel-link", channelStringLink); + // channel image ImageIF channelImage = channel.getImage(); + String image = null; if ((channelImage != null) && (channelImage.getLocation() != null)) { + image = channelImage.getLocation().toString(); + } + + if ((image == null) || (image.length() == 0)) { + image = channel.getElementValue("itunes:image"); + } + + if ((image != null) && (image.length() != 0)) { nodeContext.put("channel-image", channelImage.getLocation().toString()); nodeContext.next("channel-hasImage"); } else { nodeContext.next("channel-hasNotImage"); } + + // channel category + String category = channel.getElementValue("itunes:category"); + nodeContext.put("category", category); } /** @@ -236,12 +293,6 @@ fillChannelInfo(nodeContext, item.getChannel()); - // TODO itunes tags parsing - /* - System.out.println("channel / element value / author = " + channel.getElementValue("itunes:author")); - System.out.println("item / element value / image = " + item.getElementValue("itunes:image")); - */ - context.append("podcast", nodeContext); } } @@ -318,19 +369,14 @@ } URL url = new URL(urlString); - - /*TODO updating when change registred only (using http protocol) - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - Date date = new Date(connection.getDate()); - - HttpURLConnection con = (HttpURLConnection) url.openConnection(); - con.setRequestMethod("HEAD"); - con.connect(); - date = new Date(con.getDate()); - */ - + ChannelIF channel = FeedParser.parse(new ChannelBuilder(), url.openStream()); - ret.addAll(channel.getItems()); + if (channel != null) { + Collection items = channel.getItems(); + if ((items != null) && (!items.isEmpty())) { + ret.addAll(items); + } + } } catch (IOException e) { log.warn(urlString + " could not be found."); |
From: <jbo...@li...> - 2006-01-07 20:03:20
|
Author: wrzep Date: 2006-01-07 15:03:08 -0500 (Sat, 07 Jan 2006) New Revision: 2025 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java Log: comments, cleanup http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast31DaysStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This provides number of commits done in last 31 days metric. */ public class CommitsLast31DaysStatusPlugin extends SvnStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsLast7DaysStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This provides number of commits done in last 7 days metric. */ public class CommitsLast7DaysStatusPlugin extends SvnStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTodayStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This provides number of today commits metric. */ public class CommitsTodayStatusPlugin extends SvnStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/CommitsTotalStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This plugin provides number of commits metric. */ public class CommitsTotalStatusPlugin extends SvnStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/RevisionStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This plugin provides project revision number metric. */ public class RevisionStatusPlugin extends SvnStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -22,19 +22,21 @@ 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; import org.jboss.logging.Logger; -import java.net.MalformedURLException; -import java.util.List; -import java.util.Map; - import com.caucho.hessian.client.HessianProxyFactory; import hu.midori.kosmos.protocol.SvnService; /** * @author Pawel Wrzeszcz +* Superclass for plugins affecting Subversion version control system. */ public abstract class SvnStatusPlugin extends KosmosStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/TotalRepoSizeStatusPlugin.java 2006-01-07 20:03:08 UTC (rev 2025) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* This plugin provides project repository size metric. */ public class TotalRepoSizeStatusPlugin extends SvnStatusPlugin { |
From: <jbo...@li...> - 2006-01-07 19:45:59
|
Author: wrzep Date: 2006-01-07 14:45:51 -0500 (Sat, 07 Jan 2006) New Revision: 2024 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java Log: comments, cleanup http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -22,10 +22,11 @@ package org.jboss.forge.status.plugins.cc; -import java.net.MalformedURLException; import java.util.List; import java.util.Map; +import java.net.MalformedURLException; + import org.jboss.forge.status.plugins.KosmosStatusPlugin; import org.jboss.logging.Logger; @@ -35,6 +36,7 @@ /** * @author Pawel Wrzeszcz +* Superclass for plugins affecting CruiseControl. */ public abstract class CcStatusPlugin extends KosmosStatusPlugin { @@ -42,6 +44,7 @@ private static final String CC_SERVICE_PROPERTY = "cc-service"; private static final String CC_ADRESS_TAG = "cc-adress"; + @Override protected String getKosmosServiceTag() { return CC_SERVICE_PROPERTY;}; protected Logger log; @@ -52,8 +55,9 @@ log = Logger.getLogger(this.getClass()); } - + @Override protected Map getProjectMap(String projectId) { + // Get project cc URL String ccURL = getCcURL(projectId); Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/ErrorsStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* The plugin provides number of errors occured in the project latest CruiseControl build */ public class ErrorsStatusPlugin extends CcStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/TestsStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* The plugin provides number of tests in the last project CruiseControl build. */ public class TestsStatusPlugin extends CcStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ClosedIssuesStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* The plugin provides number of closed issues in the project's JIRA. */ public class ClosedIssuesStatusPlugin extends JiraStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -22,20 +22,21 @@ package org.jboss.forge.status.plugins.jira; -import java.net.MalformedURLException; import java.util.List; import java.util.Map; +import java.net.MalformedURLException; + import org.jboss.forge.status.plugins.KosmosStatusPlugin; import org.jboss.logging.Logger; import com.caucho.hessian.client.HessianProxyFactory; -import hu.midori.kosmos.model.JiraProject; import hu.midori.kosmos.protocol.JiraService; /** * @author Pawel Wrzeszcz +* Superclass for plugins affecting JIRA issue tracking system. */ public abstract class JiraStatusPlugin extends KosmosStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/OpenIssuesStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* The plugin provides number of open issues in the project's JIRA. */ public class OpenIssuesStatusPlugin extends JiraStatusPlugin { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java 2006-01-07 19:32:33 UTC (rev 2023) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/ResolvedIssuesStatusPlugin.java 2006-01-07 19:45:51 UTC (rev 2024) @@ -26,6 +26,7 @@ /** * @author Pawel Wrzeszcz +* The plugin provides number of resolved issues in the project's JIRA. */ public class ResolvedIssuesStatusPlugin extends JiraStatusPlugin { |
From: <jbo...@li...> - 2006-01-07 19:32:39
|
Author: mar...@jb... Date: 2006-01-07 14:32:33 -0500 (Sat, 07 Jan 2006) New Revision: 2023 Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/BetaNodeBinder.java Log: -Removed jdk1.5 code Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/BetaNodeBinder.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/BetaNodeBinder.java 2006-01-07 19:12:13 UTC (rev 2022) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/BetaNodeBinder.java 2006-01-07 19:32:33 UTC (rev 2023) @@ -6,6 +6,7 @@ import org.drools.FactHandle; import org.drools.WorkingMemory; +import org.drools.rule.Declaration; import org.drools.spi.BetaNodeConstraint; import org.drools.spi.Tuple; @@ -62,8 +63,10 @@ public Set getRequiredDeclarations() { Set declarations = new HashSet(); for ( int i = 0; i < this.constraints.length; i++ ) { - Collections.addAll( declarations, - this.constraints[i].getRequiredDeclarations() ); + Declaration[] array = this.constraints[i].getRequiredDeclarations(); + for (int j = 0; j < array.length; j++) { + declarations.add( array[j] ); + } } return declarations; } |
From: <jbo...@li...> - 2006-01-07 19:12:16
|
Author: wrzep Date: 2006-01-07 14:12:13 -0500 (Sat, 07 Jan 2006) New Revision: 2022 Removed: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java Log: http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Deleted: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java 2006-01-07 19:12:13 UTC (rev 2022) @@ -1,38 +0,0 @@ -/* - * 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.forge.status.plugins; - -/** -* @author Pawel Wrzeszcz -* The simplest plugin example. Plugin always returning 1. -*/ - -public class OneStatusPlugin extends StatusPlugin { - - public OneStatusPlugin() { - super(); - }; - - public long getValue(String projectId) { return 1; } ; - -} |
From: <jbo...@li...> - 2006-01-07 19:10:52
|
Author: wrzep Date: 2006-01-07 14:10:45 -0500 (Sat, 07 Jan 2006) New Revision: 2021 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java Log: comments and cleanup http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -27,7 +27,6 @@ import org.jboss.logging.Logger; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import java.util.Properties; @@ -38,7 +37,10 @@ public abstract class KosmosStatusPlugin extends StatusPlugin { - protected abstract String getKosmosServiceProperty(); + /** + * Kosmos-service xml tag. + */ + protected abstract String getKosmosServiceTag(); /** * Binds project ids with kosmos-service specyfic Maps. @@ -59,6 +61,7 @@ projectMaps = new HashMap<String,Map>(); } + @Override public void init(String id, String portalName, Projects projects, Properties properties) throws InvalidPluginPropertiesException { super.init(id, portalName, projects,properties); @@ -80,11 +83,11 @@ "Missing properties for plugin: " + getId() + "."); } - serviceURL = properties.getProperty(getKosmosServiceProperty()); + serviceURL = properties.getProperty(getKosmosServiceTag()); if (serviceURL == null) { throw new InvalidPluginPropertiesException( - "Missing " + getKosmosServiceProperty() + + "Missing " + getKosmosServiceTag() + " property for plugin: " + getId() + "."); } } @@ -115,6 +118,7 @@ /* (non-Javadoc) * @see org.jboss.forge.status.Plugin#getValue(java.lang.String) */ + @Override public long getValue(String projectId) { if (!projectMaps.containsKey(projectId)) { @@ -129,15 +133,4 @@ return getPluginSpecyficValue(projectMap); } - - protected void printMap(Map map) { //debug - if (map != null) { - - for (Iterator iter = map.keySet().iterator(); iter.hasNext();) { - Object obj = (Object) iter.next(); - System.out.println( - "object: " + obj + " binding: " + map.get(obj)); - } - } - } } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/OneStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -24,6 +24,7 @@ /** * @author Pawel Wrzeszcz +* The simplest plugin example. Plugin always returning 1. */ public class OneStatusPlugin extends StatusPlugin { @@ -32,6 +33,6 @@ super(); }; - public long getValue(String projectId) { return -1; } ; + public long getValue(String projectId) { return 1; } ; } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -31,7 +31,7 @@ public abstract class Plugin { - /** Node from xml file which holds properties specyfic to this plugin */ + /** Properties specyfic to this plugin */ protected Properties properties; /** Plugin id */ @@ -39,11 +39,11 @@ /** * @param id Plugin id - * @param properties Node with plugin specyfic properties + * @param properties plugin specyfic properties * or null if properties are not specified * @throws InvalidPluginPropertiesException * Thrown when properties passed in <code>propertiesNode</code> - * are incorrect or missed. + * are incorrect or missing. */ public void init(String id, Properties properties) throws InvalidPluginPropertiesException { @@ -61,7 +61,7 @@ public abstract long getValue(String projectId); /** - * @return Plugin id + * @return plugin id */ public String getId() { return id; }; } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -25,15 +25,26 @@ import java.util.Map; import java.util.Properties; - /** * @author Pawel Wrzeszcz +* +* Superclass for plugins computing project score +* from values provided by StatusPlugins. */ public abstract class ScorePlugin extends Plugin { protected Map<String,Plugin> plugins; + /** + * @param id Plugin id + * @param plugins Map binding StatusPlugin names with appropriate Plugins + * @param properties plugin specyfic properties + * or null if properties are not specified + * @throws InvalidPluginPropertiesException + * Thrown when properties passed in <code>propertiesNode</code> + * are incorrect or missing. + */ public void init(String id, Map<String, Plugin> plugins, Properties properties) throws InvalidPluginPropertiesException { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -28,14 +28,12 @@ /** * @author Pawel Wrzeszcz -* Superclass for the status plugins in the Status Matrix. +* Superclass for plugins providing projects metrics. */ public abstract class StatusPlugin extends Plugin { - /** - * Projects present in the Status Matrix. - */ + /** Projects present in the Status Matrix. */ protected Projects projects; protected String portalName; @@ -44,7 +42,8 @@ * @param name Plugin name * @param id Plugin id * @param projects Projects present in the Status Matrix - * @param propertiesNode Node with plugin specyfic properties + * @param properties plugin specyfic properties + * or null if properties are not specified * @throws InvalidPluginPropertiesException */ public void init(String id, String portalName, Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/cc/CcStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -42,7 +42,7 @@ private static final String CC_SERVICE_PROPERTY = "cc-service"; private static final String CC_ADRESS_TAG = "cc-adress"; - protected String getKosmosServiceProperty() { return CC_SERVICE_PROPERTY;}; + protected String getKosmosServiceTag() { return CC_SERVICE_PROPERTY;}; protected Logger log; Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/jira/JiraStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -43,7 +43,7 @@ private static final String JIRA_SERVICE_PROPERTY = "jira-service"; private static final String JIRA_ADRESS_TAG = "jira-adress"; - protected String getKosmosServiceProperty() { return JIRA_SERVICE_PROPERTY;}; + protected String getKosmosServiceTag() { return JIRA_SERVICE_PROPERTY;}; protected Logger log; Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-01-07 18:52:55 UTC (rev 2020) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/svn/SvnStatusPlugin.java 2006-01-07 19:10:45 UTC (rev 2021) @@ -42,7 +42,7 @@ private static final String SVN_SERVICE_PROPERTY = "svn-service"; private static final String SVN_REPO_ADRESS_TAG = "svn-repo"; - protected String getKosmosServiceProperty() { return SVN_SERVICE_PROPERTY;}; + protected String getKosmosServiceTag() { return SVN_SERVICE_PROPERTY;}; protected Logger log; |
From: <jbo...@li...> - 2006-01-07 18:53:05
|
Author: mar...@jb... Date: 2006-01-07 13:52:55 -0500 (Sat, 07 Jan 2006) New Revision: 2020 Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java Log: -First Manners rule matches and fires Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 18:39:27 UTC (rev 2019) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 18:52:55 UTC (rev 2020) @@ -253,11 +253,11 @@ public List attachAlphaNodes(Column column) { List constraints = column.getConstraints(); + + this.objectSource = attachNode( new ObjectTypeNode( this.id++, + column.getObjectType(), + this.rete ) ); - ObjectSource objectSource = attachNode( new ObjectTypeNode( this.id++, - column.getObjectType(), - this.rete ) ); - List predicateConstraints = new ArrayList(); for ( Iterator it = constraints.iterator(); it.hasNext(); ) { Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 18:39:27 UTC (rev 2019) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 18:52:55 UTC (rev 2020) @@ -3,12 +3,18 @@ import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; +import java.io.BufferedReader; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.StringWriter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.StringTokenizer; import junit.framework.TestCase; @@ -228,7 +234,7 @@ context.setState( Context.ASSIGN_SEATS ); drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), context ); - System.out.println( "leftSeat " + guestName ); + System.out.println( "assigned first seat : " + guestName ); } catch ( Exception e ) { throw new ConsequenceException( e ); @@ -931,6 +937,81 @@ return rule; } + +// /** +// * Convert the facts from the <code>InputStream</code> to a list of +// * objects. +// */ +// private List getInputObjects(InputStream inputStream) throws IOException +// { +// List list = new ArrayList( ); +// +// BufferedReader br = new BufferedReader( new InputStreamReader( inputStream ) ); +// +// String line; +// while ( (line = br.readLine( )) != null ) +// { +// if ( line.trim( ).length( ) == 0 || line.trim( ).startsWith( ";" ) ) +// { +// continue; +// } +// StringTokenizer st = new StringTokenizer( line, +// "() " ); +// String type = st.nextToken( ); +// +// if ( "guest".equals( type ) ) +// { +// if ( !"name".equals( st.nextToken( ) ) ) +// { +// throw new IOException( "expected 'name' in: " + line ); +// } +// String name = st.nextToken( ); +// if ( !"sex".equals( st.nextToken( ) ) ) +// { +// throw new IOException( "expected 'sex' in: " + line ); +// } +// String sex = st.nextToken( ); +// if ( !"hobby".equals( st.nextToken( ) ) ) +// { +// throw new IOException( "expected 'hobby' in: " + line ); +// } +// String hobby = st.nextToken( ); +// +// Guest guest = (Guest) guests.get( name ); +// if ( guest == null ) +// { +// guest = new Guest( name, +// sex.charAt( 0 ) +// Hobby); +// guests.put( name, +// guest ); +// list.add( guest ); +// } +// guest.addHobby( hobby ); +// } +// +// if ( "last_seat".equals( type ) ) +// { +// if ( !"seat".equals( st.nextToken( ) ) ) +// { +// throw new IOException( "expected 'seat' in: " + line ); +// } +// list.add( new LastSeat( new Integer( st.nextToken( ) ).intValue( ) ) ); +// } +// +// if ( "context".equals( type ) ) +// { +// if ( !"state".equals( st.nextToken( ) ) ) +// { +// throw new IOException( "expected 'state' in: " + line ); +// } +// list.add( new Context( st.nextToken( ) ) ); +// } +// } +// inputStream.close( ); +// +// return list; +// } private InputStream generateData() { final String LINE_SEPARATOR = System.getProperty( "line.separator" ); |
From: <jbo...@li...> - 2006-01-07 18:39:54
|
Author: wrzep Date: 2006-01-07 13:39:27 -0500 (Sat, 07 Jan 2006) New Revision: 2019 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByNameComparator.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByScoreComparator.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPortlet.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTags.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java Log: comments, cleanup http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByNameComparator.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByNameComparator.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByNameComparator.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -27,9 +27,8 @@ import org.jboss.forge.common.projects.Projects; /** - * * @author Pawel Wrzeszcz - * + * Implements alphabetical projects order by name. */ public class ProjectsByNameComparator implements Comparator<String> { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByScoreComparator.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByScoreComparator.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/ProjectsByScoreComparator.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -27,15 +27,17 @@ import org.jboss.forge.status.plugins.Plugin; /** - * * @author Pawel Wrzeszcz - * + * Implements projects order by score. */ public class ProjectsByScoreComparator implements Comparator<String> { private Plugin orderPlugin; + /** + * @param orderPlugin Plugin determining projects order + */ public ProjectsByScoreComparator(Plugin orderPlugin) { this.orderPlugin = orderPlugin; } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Status.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -22,13 +22,13 @@ package org.jboss.forge.status; +import java.util.HashMap; import java.util.Map; import java.util.Set; import org.jboss.forge.common.projects.Projects; import org.jboss.forge.common.projects.ProjectsHelper; - import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.AbstractDescriptor; import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; @@ -37,7 +37,6 @@ import org.w3c.dom.Node; - /** * @author Pawel Wrzeszcz * A class which handles Status Matrix information managment. @@ -50,14 +49,21 @@ /** Columns to display on the main page */ private Columns mainPageColumns; - /* Columns to display on the project specyfic page */ + /** Columns to display on the project specyfic page */ private Columns projectPageColumns; /** Plugins used in the Status Matrix */ private Plugins plugins; + /** Projects present in the Status Matrix */ private Projects projects; + /** + * @param portalName portal name + * @param statusRoot Node with Matrix properites + * @param statusPluginsRoot Node defining StatusPlugins used in the Matrix + * @param scorePluginsRoot Node defining ScorePlugins used in the Matrix + */ Status(String portalName, Node statusRoot, Node statusPluginsRoot, Node scorePluginsRoot) { // Get the projects @@ -85,8 +91,13 @@ mainPageColumns.fillContext(context); } - public void fillProjectContexts(Map<String,DelegateContext> contextsMap) { + /** + * @return Map binding project ids with DelegateContexts containing project information + */ + public Map<String, DelegateContext> getProjectContexts() { + Map<String,DelegateContext> contextsMap = new HashMap<String,DelegateContext>(); + Set<String> projectIdsSet = projects.getProjectIds( (PermissionsChecker) new NullPermissionsChecker(), null); @@ -97,5 +108,7 @@ contextsMap.put(projectId, context); } + + return contextsMap; } } \ No newline at end of file Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -22,19 +22,20 @@ package org.jboss.forge.status; +import java.util.Map; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import org.apache.xerces.parsers.DOMParser; import org.jboss.portal.common.context.DelegateContext; import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.w3c.dom.Node; + import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.apache.xerces.parsers.DOMParser; + /** * @author Pawel Wrzeszcz * A class which handles xml parsing and accessing parsed feeds information. @@ -72,8 +73,7 @@ context = new DelegateContext(); status.fillContext(context); - projectContexts = new HashMap<String,DelegateContext>(); - status.fillProjectContexts(projectContexts); + projectContexts = status.getProjectContexts(); } public DelegateContext getContext() { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -25,6 +25,7 @@ import org.jboss.forge.common.service.NodeWatcher; import org.jboss.forge.common.service.ResourceWatcher; + import org.jboss.shotoku.ContentManager; public class StatusNodeWatcher implements NodeWatcher { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPortlet.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusPortlet.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -43,6 +43,7 @@ private static final String PROJECT_DETAILS_ACTION = "viewProjectDetails"; + @Override public void doView(JBossRenderRequest request, JBossRenderResponse response) throws IOException, PortletException { response.setContentType("text/html"); Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTags.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTags.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTags.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -24,7 +24,7 @@ /** * @author Pawel Wrzeszcz -* A class which handles Status Matrix information managment. +* Status Matrix xml tags. */ public class StatusTags { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java 2006-01-07 18:07:55 UTC (rev 2018) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusTools.java 2006-01-07 18:39:27 UTC (rev 2019) @@ -37,22 +37,37 @@ @Inject private static ContentManager cm; + /** + * Path to the xml file with the Status Matrix properties. + */ public static String getXmlCmPath(String portalName) { return portalName + "/" + STATUS_DIR + "/" + STATUS_XML; } + /** + * Path to the xml file defining StatusPlugins used in the Matrix. + */ public static String getXmlStatusPluginsCmPath(String portalName) { return portalName + "/" + STATUS_DIR + "/" + STATUS_PLUGINS_XML; } + /** + * Path to the xml file defining ScorePlugins used in the Matrix. + */ public static String getXmlScorePluginsCmPath(String portalName) { return portalName + "/" + STATUS_DIR + "/" + SCORE_PLUGINS_XML; } + /** + * Path to the projects.xml file. + */ public static String getProjectsXmlPath(String portalName) { return portalName + "/" + ProjectsHelper.PROJECTS_DESC; } + /** + * Set containing paths to project.xml files for all projects. + */ public static Set<String> getProjectXmlPathsSet(String portalName) { Set<String> pathsSet = new HashSet<String>(); @@ -71,12 +86,15 @@ } /** - * Path to the file displaying the Status Matrix + * Path to the jsp file responsible file displaying the Status Matrix. */ public static String getJspCmPath() { return STATUS_JSP_DIR + "/" + STATUS_JSP; } + /** + * Path to the jsp file responsible file displaying project details. + */ public static String getDetailsJspCmPath() { return STATUS_JSP_DIR + "/" + PROJECT_DETAILS_JSP; } |
From: <jbo...@li...> - 2006-01-07 18:08:00
|
Author: wrzep Date: 2006-01-07 13:07:55 -0500 (Sat, 07 Jan 2006) New Revision: 2018 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java Log: comments & cleanup http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2006-01-07 17:00:46 UTC (rev 2017) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2006-01-07 18:07:55 UTC (rev 2018) @@ -60,8 +60,8 @@ } /** - * Fills the given context with the appropiate Status Matrix cell, - * located in the project row and this column. + * Fills the given context with information appropriate for + * the Status Matrix cell, located in the project row and this column. * * @param projectContext context to fill * @param projectId id of the project to fill value for Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java 2006-01-07 17:00:46 UTC (rev 2017) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Columns.java 2006-01-07 18:07:55 UTC (rev 2018) @@ -42,18 +42,18 @@ /** * @author Pawel Wrzeszcz -* A class holding column information about columns on the one page to display. +* A class holding information about columns to display on one page. */ public class Columns { - /** Status Matrix Columns list (Column order matters) */ + /** Status Matrix Columns list (Column order matters). */ private List<Column> columns; /** Projects present in the Status Matrix */ private Projects projects; /** - * ScorePlugin, which determine projects order in the Matrix + * Plugin determining project order in the Matrix. */ private Plugin orderPlugin; @@ -109,12 +109,12 @@ } /** - * Retruns Plugin used to determine projects order - * in the StatusMatrix + * Retruns Plugin determining project order in the Status Matrix. * * @param pageRoot Node specfying Columns properties * @param plugins Plugins used by Columns * @return Plugin determining projects order + * or null if it is not specified in the properties */ private Plugin getOrderPlugin(Node pageRoot, Plugins plugins) { @@ -130,7 +130,7 @@ /** - * Fills the given context with columns information + * Fills the given context with the columns information. * * @param context DelegateContext to fill */ @@ -139,6 +139,13 @@ fillValues(context); } + /** + * Fills the given context with the columns information + * for project with the given id. + * + * @param context DelegateContext to fill + * @param projectId id of project to fill context for + */ public void fillContext(DelegateContext context, String projectId) { fillColumnsNames(context); fillProjectContext(context, projectId); @@ -161,8 +168,8 @@ } } - /** Fills the given context with the cell values - * (for each column and for each project). + /** Fills the given context with cell values. + * Context is filled with values for each project and for each column. * * @param context DelegateContext to fill */ @@ -195,10 +202,10 @@ Comparator<String> projectsComparator = null; - if (orderPlugin != null) { + if (orderPlugin == null) { + projectsComparator = new ProjectsByNameComparator(projects); + } else { projectsComparator = new ProjectsByScoreComparator(orderPlugin); - } else { - projectsComparator = new ProjectsByNameComparator(projects); } Arrays.sort(projectIdsArr, projectsComparator); @@ -207,7 +214,7 @@ } /** - * Fills the given context with the project informationcell value + * Fills the given context with project information * * @param projectContext DelegateContext to fill * @param projectId project id @@ -222,7 +229,7 @@ } /** - * Fills the given context with the cells information in the project row + * Fills the given context with cells information in the project row * * @param projectId specifies project row * @param projectContext DelegateContext to fill @@ -235,4 +242,4 @@ column.fillProjectContext(projectContext, projectId); } } -} +} \ No newline at end of file Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-07 17:00:46 UTC (rev 2017) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-07 18:07:55 UTC (rev 2018) @@ -39,7 +39,7 @@ /** * @author Pawel Wrzeszcz -* A class handling plugins used by the Status Matrix. +* A class storing plugins used by the Status Matrix. */ public class Plugins {; @@ -69,6 +69,7 @@ /** * @param pluginsNode Node with plugins definitions + * @param portalName portal name * @param projects Projects present in the Status Matrix * @param scorePlugins flag indicating whether plugins are ScorePlugins */ @@ -110,6 +111,7 @@ return null; } + // Get plugin properties Node pluginPropertiesNode = XmlTools.getFirstNodeWithName(pluginNode, PLUGIN_PROPERTIES_ELEMENT); Properties pluginProperties = getPluginProperties(pluginPropertiesNode); @@ -127,8 +129,7 @@ } catch (InvalidPluginPropertiesException e) { log.warn(e); return null; - } - catch (Exception e) { + } catch (Exception e) { log.error("Plugin class: " + pluginClassString + ". Instantination failed.", e); return null; } @@ -138,6 +139,12 @@ return plugin; } + /** + * Computes plugin properites from given properties Node. + * + * @param propertiesNode Node containging plugin properties + * @return plugin properties or null if properties are not specified + */ private Properties getPluginProperties(Node propertiesNode) { if (propertiesNode == null) @@ -165,6 +172,8 @@ } /** + * Returns plugin with the gieven id. + * * @param pluginId * @return Plugin with the given <code>pluginId</code> */ @@ -174,9 +183,10 @@ } /** - * Adds Plugins described in the pluginsNode. + * Adds Plugins defined in the given Node. * * @param pluginsNode Node with plugins definitions + * @param portalName portal name * @param scorePlugins flag indicating whether plugins are ScorePlugins */ public void addAll(Node pluginsNode, String portalName, boolean scorePlugins) { Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java 2006-01-07 17:00:46 UTC (rev 2017) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusNodeWatcher.java 2006-01-07 18:07:55 UTC (rev 2018) @@ -50,11 +50,12 @@ /* Watch projects.xml file*/ rw.watchResource(StatusTools.getProjectsXmlPath(portalName)); - /* Watch all project.xml files */ + /* Watch all project.xml files + * We assume that they contain entries used by plugins */ Set<String> projectXmlPathsSet = StatusTools.getProjectXmlPathsSet(portalName); for (String projectXmlPath : projectXmlPathsSet) { - rw.watchResource(projectXmlPath);; + rw.watchResource(projectXmlPath); } return desc; |
From: <jbo...@li...> - 2006-01-07 17:00:51
|
Author: wrzep Date: 2006-01-07 12:00:46 -0500 (Sat, 07 Jan 2006) New Revision: 2017 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/InvalidPluginPropertiesException.java Log: protection aganist exceptions inside plugin.getValue() http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2006-01-07 16:50:11 UTC (rev 2016) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Column.java 2006-01-07 17:00:46 UTC (rev 2017) @@ -23,6 +23,7 @@ package org.jboss.forge.status; import org.jboss.forge.status.plugins.Plugin; +import org.jboss.logging.Logger; import org.jboss.portal.common.context.DelegateContext; /** @@ -37,13 +38,18 @@ /** Plugin used to generate values in project rows */ Plugin plugin; + protected Logger log; + /** * @param name Column name * @param plugin Plugin to be used to generate values in project rows */ public Column(String name, Plugin plugin) { + this.name = name; this.plugin = plugin; + + log = Logger.getLogger(this.getClass()); } /** @@ -64,7 +70,13 @@ DelegateContext entryContext = projectContext.next("entry"); - Long value = plugin.getValue(projectId); + Long value = null; + try { + value = plugin.getValue(projectId); + } catch (Exception e) { + log.error("Could not get value for plugin: " + plugin.getId(), e); + } + entryContext.put("value", Long.toString(value)); entryContext.put("name", getName()); Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/InvalidPluginPropertiesException.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/InvalidPluginPropertiesException.java 2006-01-07 16:50:11 UTC (rev 2016) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/InvalidPluginPropertiesException.java 2006-01-07 17:00:46 UTC (rev 2017) @@ -6,6 +6,8 @@ */ public class InvalidPluginPropertiesException extends Exception { + private static final long serialVersionUID = 3709326670581403244L; + public InvalidPluginPropertiesException(String msg) { super(msg); } |
From: <jbo...@li...> - 2006-01-07 16:50:15
|
Author: wrzep Date: 2006-01-07 11:50:11 -0500 (Sat, 07 Jan 2006) New Revision: 2016 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java Log: secured plugin instantination method for missed class or id http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-07 05:49:55 UTC (rev 2015) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-07 16:50:11 UTC (rev 2016) @@ -98,6 +98,9 @@ String pluginClassString = XmlTools.getChildNodeValue(pluginNode, PLUGIN_CLASS_ELEMENT); String pluginId = XmlTools.getChildNodeValue(pluginNode, PLUGIN_ID_ELEMENT); + if ((pluginClassString == null) || (pluginId == null)) + return null; + // Get plugin class Class pluginClass = null; try { |
Author: mic...@jb... Date: 2006-01-07 00:49:55 -0500 (Sat, 07 Jan 2006) New Revision: 2015 Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/IVersionable.java Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetAttachment.hbm.xml trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java Log: better versioning, generic interface Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/IVersionable.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/IVersionable.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/IVersionable.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -0,0 +1,15 @@ +package org.drools.repository; + +/** All assets that support major versioning must implement this. */ +interface IVersionable { + + /** must create a fresh copy OF THE SAME TYPE, with a null Id */ + IVersionable copy(); + + void setVersionNumber(long versionNumber); + + void setVersionComment(String comment); + + long getVersionNumber(); + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/IVersionable.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -5,7 +5,7 @@ import java.util.Iterator; import java.util.Set; -public class RuleDef extends Persistent { +public class RuleDef extends Persistent implements IVersionable { private static final long serialVersionUID = -677781085801764266L; @@ -96,7 +96,7 @@ public long getVersionNumber(){ return this.versionNumber; } - void setVersionNumber(long versionNumber){ + public void setVersionNumber(long versionNumber){ this.versionNumber = versionNumber; } public String getDocumentation(){ @@ -161,7 +161,7 @@ /** * This is used for versioning. */ - RuleDef copy() { + public IVersionable copy() { RuleDef newVersion = new RuleDef(); newVersion.content = this.content; newVersion.documentation = this.documentation; Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -14,7 +14,7 @@ * @author <a href="mailto:mic...@gm..."> Michael Neale</a> * */ -public class RuleSetAttachment extends Persistent { +public class RuleSetAttachment extends Persistent implements IVersionable { private static final long serialVersionUID = 7474038734785975202L; @@ -26,6 +26,7 @@ private String name; private long versionNumber = 1; + private String versionComment; public RuleSetAttachment(String typeOfAttachment, @@ -64,7 +65,7 @@ return versionNumber; } - void setVersionNumber(long versionNumber){ + public void setVersionNumber(long versionNumber){ this.versionNumber = versionNumber; } @@ -84,6 +85,22 @@ this.originalFileName = originalFileName; } + public IVersionable copy() { + RuleSetAttachment copy = new RuleSetAttachment(this.typeOfAttachment, + this.name, + this.content, + this.originalFileName); + return copy; + } + + public void setVersionComment(String comment){ + this.versionComment = comment; + } + public String getVersionComment() { + return this.versionComment; + } + + } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -47,7 +47,7 @@ } - public void setVersionHistory(Set versionHistory){ + void setVersionHistory(Set versionHistory){ this.versionHistory = versionHistory; } @@ -65,8 +65,9 @@ } else if (rule.getVersionNumber() == this.workingVersionNumber) { this.rules.add(rule); } else { - RuleDef copy = rule.copy(); + RuleDef copy = (RuleDef) rule.copy(); copy.setVersionNumber(this.workingVersionNumber); + copy.setVersionComment("Copied for this version."); this.rules.add(copy); } return this; @@ -97,7 +98,7 @@ public String getName(){ return name; } - public void setName(String name){ + private void setName(String name){ this.name = name; } @@ -158,45 +159,50 @@ public void createNewVersion(String comment, String newStatus) { this.workingVersionNumber++; - RuleSetVersionInfo newVersion = new RuleSetVersionInfo(); - newVersion.setStatus(newStatus); - newVersion.setVersionNumber(this.workingVersionNumber); - this.versionHistory.add(newVersion); + addNewVersionHistory( newStatus ); - //as the Ids are null, copied objects - //will get a new identity, and have the new workingVersionNumber //now have to create new rules and add to the collection - createNewRuleVersions( comment, this.workingVersionNumber ); + createAndAddNewVersions( this.rules, comment, this.workingVersionNumber ); -// //create new attachment -// for ( Iterator iter = this.attachments.iterator(); iter.hasNext(); ) { -// RuleSetAttachment att = (RuleSetAttachment) iter.next(); -// //TODO: need too finish this. -// att.copy(); -// -// } + //now attachments + createAndAddNewVersions( this.attachments, comment, this.workingVersionNumber ); + //create new functions, app data and imports etc. System.out.println("DON'T FORGET FUNCTIONS ETC !!"); } - private void createNewRuleVersions(String comment, long newVersionNumber){ + private void addNewVersionHistory(String newStatus){ + RuleSetVersionInfo newVersion = new RuleSetVersionInfo(); + newVersion.setStatus(newStatus); + newVersion.setVersionNumber(this.workingVersionNumber); + this.versionHistory.add(newVersion); + } + + /** This will work on any set of <code>IVersionable</code> objects. They are copied, and + * then added to the original set (with null Ids). The comment is added, as is the new version number. + */ + private void createAndAddNewVersions(Set assets, String comment, long newVersionNumber){ + //as the Ids are null, copied objects + //will get a new identity, and have the new workingVersionNumber Set newVersions = new HashSet(); - for ( Iterator iter = this.rules.iterator(); iter.hasNext(); ) { - RuleDef old = (RuleDef) iter.next(); + for ( Iterator iter = assets.iterator(); iter.hasNext(); ) { + IVersionable old = (IVersionable) iter.next(); if (old.getVersionNumber() == newVersionNumber - 1) { //we only want to clone rules that are for the version being cloned - RuleDef clone = old.copy(); + IVersionable clone = (IVersionable) old.copy(); clone.setVersionComment(comment); clone.setVersionNumber(newVersionNumber); newVersions.add(clone); } } - this.rules.addAll(newVersions); + assets.addAll(newVersions); } + + public String toString() { return "{ name=" + this.name + " , workingVersionNumber=" + this.workingVersionNumber + " }"; } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -77,25 +77,20 @@ Session session = getSession(); session.beginTransaction(); - session.enableFilter("workingVersionFilter") - .setParameter("filteredVersionNumber", - new Long(workingVersionNumber)); + enableVersionFilter( workingVersionNumber, + session ); + RuleSetDef def = (RuleSetDef) session.createQuery("from RuleSetDef where name = :name") .setString("name", ruleSetName ).uniqueResult(); - def.setWorkingVersionNumber(workingVersionNumber); - session.disableFilter("workingVersionFilter"); + + def.setWorkingVersionNumber(workingVersionNumber); + removeVersionFilter( session ); session.getTransaction().commit(); return def; } + - public void save(RuleSetAttachment attachment) { - Session session = getSession(); - session.beginTransaction(); - session.saveOrUpdate(attachment); - session.getTransaction().commit(); - } - public RuleSetAttachment loadAttachment(String name) { Session session = getSession(); session.beginTransaction(); @@ -105,10 +100,33 @@ .uniqueResult(); session.getTransaction().commit(); return at; + } + + + private void enableVersionFilter(long workingVersionNumber, + Session session){ + session.enableFilter("workingVersionFilter") + .setParameter("filteredVersionNumber", + new Long(workingVersionNumber)); } + + + + private void removeVersionFilter(Session session){ + session.disableFilter("workingVersionFilter"); + } + public void save(RuleSetAttachment attachment) { + Session session = getSession(); + session.beginTransaction(); + session.saveOrUpdate(attachment); + session.getTransaction().commit(); + } + + + private Session getSession(){ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); return session; Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetAttachment.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetAttachment.hbm.xml 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetAttachment.hbm.xml 2006-01-07 05:49:55 UTC (rev 2015) @@ -15,6 +15,8 @@ <property name="typeOfAttachment" /> <property name="content" /> <property name="originalFileName" /> + <property name="versionNumber" /> + <property name="versionComment" /> </class> Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-07 05:49:55 UTC (rev 2015) @@ -52,6 +52,7 @@ <set name="attachments" lazy="false" cascade="all"> <key column="RULESET_ID"/> <one-to-many class="org.drools.repository.RuleSetAttachment"/> + <filter name="workingVersionFilter" condition=":filteredVersionNumber = versionNumber" /> </set> Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -54,7 +54,7 @@ rule1.setMetaData(meta); repo.save(rule1); - RuleDef ruleCopy = rule1.copy(); + RuleDef ruleCopy = (RuleDef) rule1.copy(); assertEquals(null, ruleCopy.getId()); assertEquals(2, ruleCopy.getTags().size()); assertEquals("Peter Jackson", ruleCopy.getMetaData().getCreator()); Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 05:06:14 UTC (rev 2014) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 05:49:55 UTC (rev 2015) @@ -94,16 +94,20 @@ def1.addTag("S").addTag("A"); set.addRule(def1).addRule(def2); + set.addAttachment(new RuleSetAttachment("x", "x", "x".getBytes(), "x")); assertEquals(2, set.getRules().size()); assertEquals(1, def1.getVersionNumber()); assertEquals(1, def2.getVersionNumber()); assertEquals(1, set.getWorkingVersionNumber()); + //once we create a new version, we double the asset counts, one for each version set.createNewVersion("New version", "Draft"); assertEquals(4, set.getRules().size()); + assertEquals(2, set.getAttachments().size()); + assertEquals(1, def1.getVersionNumber()); - assertEquals(1, def1.getVersionNumber()); + //now check that the new version rules are kosher (tag wise) for ( Iterator iter = set.getRules().iterator(); iter.hasNext(); ) { RuleDef rule = (RuleDef) iter.next(); if (rule.getVersionNumber() == 2) { @@ -114,16 +118,34 @@ } } + RepositoryImpl repo = getRepo(); repo.save(set); + //now when we load it, the filter only loads the workingVersion that we specify RuleSetDef loaded = repo.loadRuleSet("InMemory", 2); - assertEquals(2, loaded.getRules().size()); + //now should have half as many as before, as old versions are not loaded. + assertEquals(2, loaded.getRules().size()); + assertEquals(1, loaded.getAttachments().size()); + //now check the version numbers and comment, use attachment as there is only one in set so easy.. + RuleSetAttachment att = (RuleSetAttachment) loaded.getAttachments().iterator().next(); + assertEquals(2, att.getVersionNumber()); + assertEquals("New version", att.getVersionComment()); + //now run it again, with OLD VERSION... + loaded = repo.loadRuleSet("InMemory", 1); + assertEquals(2, loaded.getRules().size()); + assertEquals(1, loaded.getAttachments().size()); + + //now the version number should be one + att = (RuleSetAttachment) loaded.getAttachments().iterator().next(); + assertEquals(1, att.getVersionNumber()); + assertFalse("New version".equals(att.getVersionComment())); + } } |
Author: mar...@jb... Date: 2006-01-07 00:06:14 -0500 (Sat, 07 Jan 2006) New Revision: 2014 Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/AgendaItem.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java Log: -Have assertions and firing partially working Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/AgendaItem.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/AgendaItem.java 2006-01-07 05:03:43 UTC (rev 2013) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/AgendaItem.java 2006-01-07 05:06:14 UTC (rev 2014) @@ -167,7 +167,7 @@ */ void fire(WorkingMemoryImpl workingMemory) throws ConsequenceException { - this.rule.getConsequence().invoke( null ); + this.rule.getConsequence().invoke( this ); workingMemory.getAgendaEventSupport().fireActivationFired( this.rule, this.tuple ); Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 05:03:43 UTC (rev 2013) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 05:06:14 UTC (rev 2014) @@ -113,7 +113,7 @@ */ Builder(RuleBaseImpl ruleBase, ObjectTypeResolver resolver) { this.ruleBase = ruleBase; - this.rete = new Rete(); + this.rete = this.ruleBase.getRete(); this.resolver = resolver; this.ruleSets = new ArrayList(); this.attachedNodes = new HashMap(); Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-07 05:03:43 UTC (rev 2013) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-07 05:06:14 UTC (rev 2014) @@ -73,4 +73,8 @@ public int getIndex() { return this.index; } + + public String toString() { + return "Column type='"+ this.objectType + "', index='"+ this.index + "' identifer='"+ this.binding.getIdentifier() + "'"; + } } Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-07 05:03:43 UTC (rev 2013) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-07 05:06:14 UTC (rev 2014) @@ -1,9 +1,11 @@ package org.drools.examples.manners; public class Hobby { + public static final Hobby h1 = new Hobby( 1 ); public static final Hobby h2 = new Hobby( 2 ); public static final Hobby h3 = new Hobby( 3 ); + public static final String stringH1 = "h1"; public static final String stringH2 = "h2"; public static final String stringH3 = "h3"; @@ -15,6 +17,8 @@ public String getValue() { switch ( this.hobby ) { + case 1 : + return stringH1; case 2 : return stringH2; case 3 : Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 05:03:43 UTC (rev 2013) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 05:06:14 UTC (rev 2014) @@ -115,6 +115,13 @@ RuleBaseImpl ruleBase = new RuleBaseImpl(); ruleBase.addRuleSet( ruleSet ); + WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + workingMemory.assertObject( new Context( Context.START_UP ) ); + workingMemory.assertObject( new Guest("mark", Sex.m, Hobby.h1) ); + workingMemory.assertObject( new Count(0) ); + + workingMemory.fireAllRules(); + System.out.println( "ttt" ); } |
Author: mic...@jb... Date: 2006-01-07 00:03:43 -0500 (Sat, 07 Jan 2006) New Revision: 2013 Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java Log: Got versioning working Added: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -0,0 +1,13 @@ +package org.drools.repository; + +/** + * + * @author <a href="mailto:mic...@gm..."> Michael Neale</a> + */ +public class RepositoryException extends RuntimeException { + + public RepositoryException(String message) { + super(message); + } + +} Property changes on: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RepositoryException.java ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -126,12 +126,12 @@ public String getName(){ return name; } - public RuleDef setName(String name){ - this.name = name; - return this; + public void setName(String name){ + this.name = name; } - /** return a list of tags as Strings. Tags are stored as Tag objects, + /** + * Return a list of tags as Strings. Tags are stored as Tag objects, * but are essentially strings. */ public String[] listTags() { @@ -164,7 +164,7 @@ RuleDef copy() { RuleDef newVersion = new RuleDef(); newVersion.content = this.content; - newVersion.documentation = documentation; + newVersion.documentation = this.documentation; newVersion.effectiveDate = this.effectiveDate; newVersion.expiryDate = this.expiryDate; if (this.metaData != null) { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetAttachment.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -17,9 +17,8 @@ public class RuleSetAttachment extends Persistent { - private static final long serialVersionUID = 7474038734785975202L; + private static final long serialVersionUID = 7474038734785975202L; - private byte[] content; private String originalFileName; Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -30,6 +30,7 @@ this.tags = new HashSet(); this.rules = new HashSet(); this.attachments = new HashSet(); + this.versionHistory = new HashSet(); this.workingVersionNumber = 1; } @@ -117,6 +118,16 @@ return workingVersionNumber; } + /** + * This will only be set when loading the RuleSet from the repository. + * When you load a ruleset, a version number is specified. + * This property is not persistent, as multiple people could be working on different versions + * at the same time. + * + * DO NOT set this property. + * + * @param workingVersionNumber + */ public void setWorkingVersionNumber(long workingVersionNumber){ this.workingVersionNumber = workingVersionNumber; } @@ -145,6 +156,7 @@ * */ public void createNewVersion(String comment, String newStatus) { + this.workingVersionNumber++; RuleSetVersionInfo newVersion = new RuleSetVersionInfo(); newVersion.setStatus(newStatus); @@ -155,7 +167,7 @@ //will get a new identity, and have the new workingVersionNumber //now have to create new rules and add to the collection - createNewRuleVersions( comment ); + createNewRuleVersions( comment, this.workingVersionNumber ); // //create new attachment // for ( Iterator iter = this.attachments.iterator(); iter.hasNext(); ) { @@ -170,14 +182,19 @@ } - private void createNewRuleVersions(String comment){ + private void createNewRuleVersions(String comment, long newVersionNumber){ + Set newVersions = new HashSet(); for ( Iterator iter = this.rules.iterator(); iter.hasNext(); ) { RuleDef old = (RuleDef) iter.next(); - RuleDef clone = (RuleDef) old.copy(); - clone.setVersionComment(comment); - clone.setVersionNumber(this.workingVersionNumber); - this.rules.add(clone); + if (old.getVersionNumber() == newVersionNumber - 1) { + //we only want to clone rules that are for the version being cloned + RuleDef clone = old.copy(); + clone.setVersionComment(comment); + clone.setVersionNumber(newVersionNumber); + newVersions.add(clone); + } } + this.rules.addAll(newVersions); } public String toString() { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -71,12 +71,20 @@ return ruleSet; } - public RuleSetDef loadRuleSet(String ruleSetName) { + /** This loads a RuleSet with the appropriate workingVersionNumber applied to its assets. + */ + public RuleSetDef loadRuleSet(String ruleSetName, long workingVersionNumber) { Session session = getSession(); - session.beginTransaction(); + + session.beginTransaction(); + session.enableFilter("workingVersionFilter") + .setParameter("filteredVersionNumber", + new Long(workingVersionNumber)); RuleSetDef def = (RuleSetDef) session.createQuery("from RuleSetDef where name = :name") .setString("name", ruleSetName ).uniqueResult(); + def.setWorkingVersionNumber(workingVersionNumber); + session.disableFilter("workingVersionFilter"); session.getTransaction().commit(); return def; } Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2006-01-07 05:03:43 UTC (rev 2013) @@ -23,8 +23,6 @@ <property name="expiryDate" /> - <!-- want nothing to be lazy, no runtime proxies??? --> - <!-- tags to aid with searching and management of rules --> <set name="tags" table="RULE_TAGS" lazy="false" cascade="all"> <key column="RULE_ID"/> <one-to-many class="org.drools.repository.Tag" /> @@ -46,6 +44,10 @@ <property name="rights" /> </component> + + </class> + + </hibernate-mapping> \ No newline at end of file Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-07 05:03:43 UTC (rev 2013) @@ -13,9 +13,7 @@ <property name="name" /> - <property name="workingVersionNumber" /> - <component name="metaData"> <property name="title" /> <property name="creator" /> @@ -43,6 +41,7 @@ <set name="rules" table="RULESET_RULES" lazy="false" cascade="all"> <key column="RULESET_ID"/> <one-to-many class="org.drools.repository.RuleDef"/> + <filter name="workingVersionFilter" condition=":filteredVersionNumber = versionNumber" /> </set> <set name="versionHistory" table="RULESET_VERSION_HISTORY" lazy="false" cascade="all"> @@ -58,5 +57,10 @@ </class> + + <!-- This magic allows us to have a view of working versions only --> + <filter-def name="workingVersionFilter"> + <filter-param name="filteredVersionNumber" type="long" /> + </filter-def> </hibernate-mapping> \ No newline at end of file Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 04:19:02 UTC (rev 2012) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-07 05:03:43 UTC (rev 2013) @@ -1,6 +1,7 @@ package org.drools.repository; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; import org.drools.repository.AttachmentFile; @@ -24,7 +25,7 @@ RepositoryImpl repo = getRepo(); repo.save(def); - RuleSetDef def2 = repo.loadRuleSet("my ruleset"); + RuleSetDef def2 = repo.loadRuleSet("my ruleset", 1); assertEquals("my ruleset", def2.getName()); assertEquals("Michael Neale", def2.getMetaData().getCreator()); assertEquals(1, def2.getTags().size()); @@ -44,7 +45,7 @@ RepositoryImpl repo = getRepo(); repo.save(ruleSet); - RuleSetDef loaded = repo.loadRuleSet("Uber 1"); + RuleSetDef loaded = repo.loadRuleSet("Uber 1", 1); assertEquals(2, loaded.getRules().size()); } @@ -63,7 +64,7 @@ RepositoryImpl repo = getRepo(); repo.save(ruleSet); - RuleSetDef result = repo.loadRuleSet("Attachmate"); + RuleSetDef result = repo.loadRuleSet("Attachmate", 1); assertEquals(1, result.getAttachments().size()); RuleSetAttachment at2 = (RuleSetAttachment) result.getAttachments().iterator().next(); assertEquals("file.txt", at2.getOriginalFileName()); @@ -82,8 +83,47 @@ RepositoryImpl repo = getRepo(); repo.save(def); - RuleSetDef def2 = repo.loadRuleSet("WithHistory"); + RuleSetDef def2 = repo.loadRuleSet("WithHistory", 1); assertEquals(2, def2.getVersionHistory().size()); } + public void testNewVersionInMemory() { + RuleSetDef set = new RuleSetDef("InMemory", null); + RuleDef def1 = new RuleDef("Rule1", "blah"); + RuleDef def2 = new RuleDef("Rule2", "blah2"); + + def1.addTag("S").addTag("A"); + set.addRule(def1).addRule(def2); + + assertEquals(2, set.getRules().size()); + assertEquals(1, def1.getVersionNumber()); + assertEquals(1, def2.getVersionNumber()); + assertEquals(1, set.getWorkingVersionNumber()); + + set.createNewVersion("New version", "Draft"); + assertEquals(4, set.getRules().size()); + + assertEquals(1, def1.getVersionNumber()); + for ( Iterator iter = set.getRules().iterator(); iter.hasNext(); ) { + RuleDef rule = (RuleDef) iter.next(); + if (rule.getVersionNumber() == 2) { + assertEquals("New version", rule.getVersionComment()); + if (rule.getName().equals("Rule1")) { + assertEquals(2, rule.getTags().size()); + } + } + } + + RepositoryImpl repo = getRepo(); + repo.save(set); + + RuleSetDef loaded = repo.loadRuleSet("InMemory", 2); + assertEquals(2, loaded.getRules().size()); + + + + + + } + } |
From: <jbo...@li...> - 2006-01-07 04:19:14
|
Author: mar...@jb... Date: 2006-01-06 23:19:02 -0500 (Fri, 06 Jan 2006) New Revision: 2012 Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java Log: -Succesfully added Manner's RuleSet to a RuleBaseImpl, although Rete is still not correctly built Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 03:28:59 UTC (rev 2011) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/Builder.java 2006-01-07 04:19:02 UTC (rev 2012) @@ -181,7 +181,7 @@ ce = (ConditionalElement) ce.getChildren().get( 0 ); } column = (Column) ce.getChildren().get( 0 ); - binder = attachColumn( (Column) object, + binder = attachColumn( column, and ); // If a tupleSource does not exist then we need to adapt an @@ -267,7 +267,7 @@ (LiteralConstraint) constraint, true, objectSource ) ); - } else { + } else if (constraint instanceof BetaNodeConstraint ){ predicateConstraints.add( constraint ); } } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-01-07 03:28:59 UTC (rev 2011) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/RuleBaseImpl.java 2006-01-07 04:19:02 UTC (rev 2012) @@ -41,6 +41,7 @@ */ import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -69,7 +70,7 @@ * * @version $Id: RuleBaseImpl.java,v 1.5 2005/08/14 22:44:12 mproctor Exp $ */ -class RuleBaseImpl +public class RuleBaseImpl implements RuleBase { // ------------------------------------------------------------ @@ -113,10 +114,10 @@ * @param rete * The rete network. */ - RuleBaseImpl() { + public RuleBaseImpl() { this( DefaultConflictResolver.getInstance(), new DefaultFactHandleFactory(), - null, + new HashSet(), new HashMap(), new RuleBaseContext() ); } @@ -133,7 +134,7 @@ * @param ruleSets * @param applicationData */ - RuleBaseImpl(ConflictResolver conflictResolver, + public RuleBaseImpl(ConflictResolver conflictResolver, FactHandleFactory factHandleFactory, Set ruleSets, Map applicationData, @@ -274,8 +275,7 @@ Map newApplicationData = ruleSet.getApplicationData(); // Check that the application data is valid, we cannot change the type - // of an already declared - // application data variable + // of an already declared application data variable for ( Iterator it = newApplicationData.keySet().iterator(); it.hasNext(); ) { String identifier = (String) it.next(); Class type = (Class) newApplicationData.get( identifier ); Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 03:28:59 UTC (rev 2011) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 04:19:02 UTC (rev 2012) @@ -14,7 +14,11 @@ import org.drools.Cheese; import org.drools.FactException; +import org.drools.RuleBase; +import org.drools.RuleIntegrationException; +import org.drools.RuleSetIntegrationException; import org.drools.WorkingMemory; +import org.drools.reteoo.RuleBaseImpl; import org.drools.rule.And; import org.drools.rule.BoundVariableConstraint; import org.drools.rule.Column; @@ -23,6 +27,7 @@ import org.drools.rule.DuplicateRuleNameException; import org.drools.rule.EvaluatorFactory; import org.drools.rule.FieldBinding; +import org.drools.rule.InvalidPatternException; import org.drools.rule.InvalidRuleException; import org.drools.rule.LiteralConstraint; import org.drools.rule.Not; @@ -97,15 +102,20 @@ } - public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException { + public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException, RuleIntegrationException, RuleSetIntegrationException, InvalidPatternException, FactException { RuleSet ruleSet = new RuleSet( "Miss Manners" ); ruleSet.addRule( getAssignFirstSeatRule() ); - ruleSet.addRule( getMakePath() ); - ruleSet.addRule( getFindSeating() ); - ruleSet.addRule( getPathDone() ); - ruleSet.addRule( getAreWeDone() ); - ruleSet.addRule( getContinueProcessing() ); - ruleSet.addRule( getAllDone() ); +// ruleSet.addRule( getMakePath() ); +// ruleSet.addRule( getFindSeating() ); +// ruleSet.addRule( getPathDone() ); +// ruleSet.addRule( getAreWeDone() ); +// ruleSet.addRule( getContinueProcessing() ); +// ruleSet.addRule( getAllDone() ); + + RuleBaseImpl ruleBase = new RuleBaseImpl(); + ruleBase.addRuleSet( ruleSet ); + + System.out.println( "ttt" ); } /** |
From: <jbo...@li...> - 2006-01-07 03:29:09
|
Author: mar...@jb... Date: 2006-01-06 22:28:59 -0500 (Fri, 06 Jan 2006) New Revision: 2011 Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/FieldBinding.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Chosen.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Count.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Sex.java Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java Log: -Can successfully add all Manners' rules to a RuleSet Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/BoundVariableConstraint.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,42 @@ +package org.drools.rule; + +import org.drools.FactHandle; +import org.drools.spi.BetaNodeConstraint; +import org.drools.spi.Constraint; +import org.drools.spi.Evaluator; +import org.drools.spi.FieldExtractor; +import org.drools.spi.ReturnValueEvaluator; +import org.drools.spi.Tuple; + +public class BoundVariableConstraint + implements + BetaNodeConstraint { + + private final FieldExtractor fieldExtractor; + + private final Declaration declaration; + + private final Declaration[] requiredDeclarations; + + private final Evaluator evaluator; + + public BoundVariableConstraint(FieldExtractor fieldExtractor, + Declaration declaration, + Evaluator evaluator) { + this.fieldExtractor = fieldExtractor; + this.declaration = declaration; + this.requiredDeclarations = new Declaration[] { declaration }; + this.evaluator = evaluator; + } + + public Declaration[] getRequiredDeclarations() { + return this.requiredDeclarations; + } + + public boolean isAllowed(Object object, + FactHandle handle, + Tuple tuple) { + return evaluator.evaluate( this.fieldExtractor.getValue( object ), + tuple.get( this.declaration ) ); + } +} Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Column.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -27,9 +27,13 @@ { this.index = index; this.objectType = objectType; - this.binding = new ColumnBinding( identifier, - this.objectType, - this ); + if (identifier != null) { + this.binding = new ColumnBinding( identifier, + this.objectType, + this ); + } else { + this.binding = null; + } } public ObjectType getObjectType() { Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/FieldBinding.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/FieldBinding.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/FieldBinding.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,31 @@ +package org.drools.rule; + +import org.drools.spi.Constraint; +import org.drools.spi.Extractor; +import org.drools.spi.ObjectType; + + + +public class FieldBinding extends Binding implements Constraint { + private final Extractor extractor; + + private final int column; + + + public FieldBinding(String identifier, + ObjectType objectType, + Extractor extractor, + int column) { + super( identifier, + objectType, + extractor ); + this.extractor = extractor; + this.column = column; + } + + + public int getColumn() { + return this.column; + } + +} Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -95,7 +95,7 @@ private int salience; /** Columns */ - private final List columns = new ArrayList(); + //private final List columns = new ArrayList(); private final Map declarations = new HashMap(); @@ -240,9 +240,9 @@ * <code>false</code>. */ public boolean isValid() { - if ( this.columns.size() == 0 ) { - return false; - } + //if ( this.columns.size() == 0 ) { + // return false; + //} if ( this.consequence == null ) { return false; @@ -273,9 +273,9 @@ * if this rule is in any way invalid. */ public void checkValidity() throws InvalidRuleException { - if ( this.columns.isEmpty() ) { - throw new NoColumnsException( this ); - } + //if ( this.columns.isEmpty() ) { + // throw new NoColumnsException( this ); + //} if ( this.consequence == null ) { throw new NoConsequenceException( this ); Added: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,21 @@ +package org.drools.spi; + +public class ColumnExtractor + implements + Extractor { + + private ObjectType objectType; + + public ColumnExtractor(ObjectType objectType) { + this.objectType = objectType; + } + + public Object getValue(Object object) { + return object; + } + + public ObjectType getObjectType() { + return this.objectType; + } + +} Added: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Chosen.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Chosen.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Chosen.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,81 @@ +package org.drools.examples.manners; + +/* + * $Id: Guest.java,v 1.1 2005/07/26 01:06:32 mproctor Exp $ + * + * Copyright 2002 (C) The Werken Company. All Rights Reserved. + * + * Redistribution and use of this software and associated documentation + * ("Software"), with or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain copyright statements and + * notices. Redistributions must also contain a copy of this document. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name "drools" must not be used to endorse or promote products derived + * from this Software without prior written permission of The Werken Company. + * For written permission, please contact bo...@we.... + * + * 4. Products derived from this Software may not be called "drools" nor may + * "drools" appear in their names without prior written permission of The Werken + * Company. "drools" is a registered trademark of The Werken Company. + * + * 5. Due credit should be given to The Werken Company. + * (http://drools.werken.com/). + * + * THIS SOFTWARE IS PROVIDED BY THE WERKEN COMPANY AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE WERKEN COMPANY OR ITS CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class Chosen + implements + Serializable { + + private final int id; + + private final String guestName; + + private final Hobby hobby; + + public Chosen(int id, + String guestName, + Hobby hobby) { + this.id = id; + this.guestName = guestName; + this.hobby = hobby; + } + + public int getId() { + return this.id; + } + + public String getGuestName() { + return this.guestName; + } + + public Hobby getHobby() { + return this.hobby; + } + + public String toString() { + return "{guest name=" + this.guestName + ",hobbies=" + this.hobby + "}"; + } +} \ No newline at end of file Added: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Count.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Count.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Count.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,20 @@ +package org.drools.examples.manners; + +public class Count { + private int value; + + public Count(int value) { + super(); + this.value = value; + } + + public int getValue() { + return this.value; + } + + public void setValue(int value) { + this.value = value; + } + + +} Added: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Hobby.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,50 @@ +package org.drools.examples.manners; + +public class Hobby { + public static final Hobby h2 = new Hobby( 2 ); + public static final Hobby h3 = new Hobby( 3 ); + + public static final String stringH2 = "h2"; + public static final String stringH3 = "h3"; + + private final int hobby; + + private Hobby(int hobby) { + this.hobby = hobby; + } + + public String getValue() { + switch ( this.hobby ) { + case 2 : + return stringH2; + case 3 : + return stringH3; + default : + return ""; + } + } + + public String toString() { + return getValue(); + } + + public boolean equals(Object object) { + if (object == null) { + return false; + } + + if ( ! ( object instanceof Hobby ) ) { + return false; + } + + Hobby other = (Hobby) object; + + return ( this.hobby == other.hobby); + } + + public int hashcode() { + return this.hobby; + } + + +} Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -10,6 +10,8 @@ import java.util.List; import java.util.Random; +import junit.framework.TestCase; + import org.drools.Cheese; import org.drools.FactException; import org.drools.WorkingMemory; @@ -18,6 +20,7 @@ import org.drools.rule.Column; import org.drools.rule.ColumnBinding; import org.drools.rule.Declaration; +import org.drools.rule.DuplicateRuleNameException; import org.drools.rule.EvaluatorFactory; import org.drools.rule.FieldBinding; import org.drools.rule.InvalidRuleException; @@ -41,7 +44,7 @@ import org.drools.spi.MockField; import org.drools.spi.Tuple; -public class MannersTest { +public class MannersTest extends TestCase { /** Number of guests at the dinner (default: 16). */ private int numGuests = 16; @@ -92,9 +95,17 @@ this.booleanNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE, Evaluator.NOT_EQUAL ); + } + + public void test1() throws DuplicateRuleNameException, InvalidRuleException, IntrospectionException { RuleSet ruleSet = new RuleSet( "Miss Manners" ); - Rule assignFirstSeat = getAssignFirstSeatRule(); - + ruleSet.addRule( getAssignFirstSeatRule() ); + ruleSet.addRule( getMakePath() ); + ruleSet.addRule( getFindSeating() ); + ruleSet.addRule( getPathDone() ); + ruleSet.addRule( getAreWeDone() ); + ruleSet.addRule( getContinueProcessing() ); + ruleSet.addRule( getAllDone() ); } /** @@ -237,7 +248,7 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule makePath() throws IntrospectionException, + private Rule getMakePath() throws IntrospectionException, InvalidRuleException { final Rule rule = new Rule( "makePath" ); @@ -315,9 +326,8 @@ Not not = new Not(); not.addChild( notPathColumn ); - notPathColumn.addConstraint( not ); - rule.addPattern( notPathColumn ); + rule.addPattern( not ); // ------------ // drools.assert( new Path( id, pathName, pathSeat ) ); @@ -389,9 +399,9 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule findSeating() throws IntrospectionException, + private Rule getFindSeating() throws IntrospectionException, InvalidRuleException { - final Rule rule = new Rule( "makePath" ); + final Rule rule = new Rule( "findSeating" ); // --------------- // context : Context( state == Context.ASSIGN_SEATS ) @@ -514,9 +524,9 @@ "guestName", leftGuestNameDeclaration, objectEqualEvaluator ) ); - Not not = new Not(); - not.addChild( notPathColumn ); - notPathColumn.addConstraint( not ); + Not notPath = new Not(); + notPath.addChild( notPathColumn ); + notPathColumn.addConstraint( notPath ); // ------------ // not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby ) ) // ------------ @@ -538,9 +548,10 @@ rightGuestHobbyDeclaration, objectEqualEvaluator ) ); - notChosenColumn.addConstraint( notChosenColumn ); + Not notChosen = new Not(); + notChosen.addChild( notChosenColumn ); - rule.addPattern( notChosenColumn ); + rule.addPattern( notChosen ); // ------------ // int newSeat = rightSeat + 1; @@ -627,9 +638,9 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule pathDone() throws IntrospectionException, + private Rule getPathDone() throws IntrospectionException, InvalidRuleException { - final Rule rule = new Rule( "makePath" ); + final Rule rule = new Rule( "pathDone" ); // ----------- // context : Context( state == Context.MAKE_PATH ) @@ -704,7 +715,7 @@ * when { * context : Context( state == Context.CHECK_DONE ) * LastSeat( lastSeat: seat ) - * Seating( seat == lastSeat ) + * Seating( rightSeat == lastSeat ) * } then { * context.setState( Context.PRINT_RESULTS ); * } @@ -715,7 +726,7 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule areWeDone() throws IntrospectionException, + private Rule getAreWeDone() throws IntrospectionException, InvalidRuleException { final Rule rule = new Rule( "areWeDone" ); @@ -746,16 +757,16 @@ rule.addPattern( lastSeatColumn ); final Declaration lastSeatDeclaration = rule.getDeclaration( "lastSeat" ); // ------------- - // Seating( seat == lastSeat ) + // Seating( rightSeat == lastSeat ) // ------------- Column seatingColumn = new Column( 2, seatingType, null ); seatingColumn.addConstraint( getBoundVariableConstraint( seatingColumn, - "seat", - lastSeatDeclaration, - integerEqualEvaluator ) ); + "rightSeat", + lastSeatDeclaration, + integerEqualEvaluator ) ); rule.addPattern( seatingColumn ); @@ -803,7 +814,7 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule continueProcessing() throws IntrospectionException, + private Rule getContinueProcessing() throws IntrospectionException, InvalidRuleException { final Rule rule = new Rule( "continueProcessng" ); @@ -866,7 +877,7 @@ * @throws IntrospectionException * @throws InvalidRuleException */ - private Rule allDone() throws IntrospectionException, + private Rule getAllDone() throws IntrospectionException, InvalidRuleException { final Rule rule = new Rule( "alldone" ); Added: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Path.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,28 @@ +package org.drools.examples.manners; + +public class Path { + private final int id; + private final String guestName; + private final int seat; + + public Path(int id, int seat, String guestName) { + this.id = id; + this.seat = seat; + this.guestName = guestName; + } + + public int getSeat() { + return this.seat; + } + + public String getGuestName() { + return this.guestName; + } + + public int getId() { + return this.id; + } + + + +} Added: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Sex.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-01-07 02:17:23 UTC (rev 2010) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Sex.java 2006-01-07 03:28:59 UTC (rev 2011) @@ -0,0 +1,50 @@ +package org.drools.examples.manners; + +public class Sex { + public static final Sex m = new Sex( 0 ); + public static final Sex f = new Sex( 1 ); + + public static final String stringM = "m"; + public static final String stringF = "f"; + + private final int sex; + + private Sex(int sex) { + this.sex = sex; + } + + public String getValue() { + switch ( this.sex ) { + case 0 : + return stringM; + case 1 : + return stringF; + default : + return ""; + } + } + + public String toString() { + return getValue(); + } + + public boolean equals(Object object) { + if (object == null) { + return false; + } + + if ( ! ( object instanceof Sex ) ) { + return false; + } + + Sex other = (Sex) object; + + return ( this.sex == other.sex ); + } + + public int hashcode() { + return this.sex; + } + + +} |
Author: mar...@jb... Date: 2006-01-06 21:17:23 -0500 (Fri, 06 Jan 2006) New Revision: 2010 Removed: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ExtractorBinding.java Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Binding.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ColumnBinding.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Declaration.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/EvaluatorFactory.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/DefaultKnowledgeHelper.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Evaluator.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Extractor.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ObjectType.java trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Tuple.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seat.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Seating.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/rule/ConstraintTest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/rule/DeclarationTest.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/spi/ClassFieldExtractor.java trunk/labs/jbossrules/drools-core/src/test/java/org/drools/spi/MockObjectType.java Log: -Fist commit for the native manners example -Refactoring due to issues uncovered implementing manners Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -158,6 +158,10 @@ return null; } } + + public FactHandle getFactHandleForDeclaration(Declaration declaration) { + return this.key.get( declaration.getColumn() ); + } public WorkingMemory getWorkingMemory() { return this.workingMemory; Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Binding.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Binding.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Binding.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -1,16 +1,21 @@ package org.drools.rule; +import org.drools.spi.Extractor; import org.drools.spi.ObjectType; public abstract class Binding { private final String identifier; - private final ObjectType objectType; + private final ObjectType objectType; + + private final Extractor extractor; public Binding(String identifier, - ObjectType objectType) { + ObjectType objectType, + Extractor extractor) { this.identifier = identifier; this.objectType = objectType; + this.extractor = extractor; } /** @@ -26,5 +31,11 @@ public ObjectType getObjectType() { return this.objectType; } + + public Extractor getExtractor() { + return this.extractor; + } + + } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ColumnBinding.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ColumnBinding.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ColumnBinding.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -1,5 +1,6 @@ package org.drools.rule; +import org.drools.spi.ColumnExtractor; import org.drools.spi.ObjectType; public class ColumnBinding extends Binding { @@ -9,7 +10,8 @@ ObjectType objectType, Column column) { super( identifier, - objectType ); + objectType, + new ColumnExtractor(objectType)); this.column = column; } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Declaration.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Declaration.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Declaration.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -114,8 +114,8 @@ * * @return The object-type. */ - public Class getDeclarationType() { - return this.extractor.getValueType(); + public ObjectType getObjectType() { + return this.extractor.getObjectType(); } /** @@ -176,7 +176,7 @@ Declaration other = (Declaration) object; - return this.index == other.index && this.identifier.equals( other.identifier ) && this.extractor.getValueType().equals( other.extractor.getValueType() ); + return this.index == other.index && this.identifier.equals( other.identifier ) && this.extractor.getObjectType().equals( other.extractor.getObjectType() ); } } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/EvaluatorFactory.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/EvaluatorFactory.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/EvaluatorFactory.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -23,6 +23,8 @@ return getShortEvaluator( operator ); case Evaluator.INTEGER_TYPE : return getIntegerEvaluator( operator ); + case Evaluator.BOOLEAN_TYPE : + return getBooleanEvaluator( operator ); default : throw new RuntimeException( "Type '" + type + "' does not exist for BaseEvaluatorFactory" ); } @@ -80,7 +82,60 @@ return !object1.equals( object2 ); } } + + static class BooleanEqualEvaluator extends BaseEvaluator { + private static Evaluator INSTANCE; + public static Evaluator getInstance() { + if ( INSTANCE == null ) { + INSTANCE = new BooleanEqualEvaluator(); + } + return INSTANCE; + } + + private BooleanEqualEvaluator() { + super( Evaluator.BOOLEAN_TYPE, + Evaluator.EQUAL ); + } + + public boolean evaluate(Object object1, + Object object2) { + return ((Boolean)object1).booleanValue() == ((Boolean)object2).booleanValue(); + } + } + + Evaluator getBooleanEvaluator(int operator) { + switch ( operator ) { + case Evaluator.EQUAL : + return ObjectEqualEvaluator.getInstance(); + case Evaluator.NOT_EQUAL : + return ObjectNotEqualEvaluator.getInstance(); + default : + throw new RuntimeException( "Operator '" + operator + "' does not exist for BooleanEvaluator" ); + } + } + + static class BooleanNotEqualEvaluator extends BaseEvaluator { + private static Evaluator INSTANCE; + + public static Evaluator getInstance() { + if ( INSTANCE == null ) { + INSTANCE = new BooleanNotEqualEvaluator(); + } + return INSTANCE; + } + + private BooleanNotEqualEvaluator() { + super( Evaluator.BOOLEAN_TYPE, + Evaluator.NOT_EQUAL ); + } + + public boolean evaluate(Object object1, + Object object2) { + return ((Boolean)object1).booleanValue() != ((Boolean)object2).booleanValue(); + } + } + Evaluator getShortEvaluator(int operator) { switch ( operator ) { case Evaluator.EQUAL : Deleted: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ExtractorBinding.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ExtractorBinding.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/ExtractorBinding.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -1,24 +0,0 @@ -package org.drools.rule; - -import org.drools.spi.Extractor; -import org.drools.spi.ObjectType; - -public class ExtractorBinding extends Binding { - private final Extractor extractor; - - public ExtractorBinding(String identifier, - ObjectType objectType, - Extractor extractor) { - super( identifier, - objectType ); - this.extractor = extractor; - } - - /** - * @return Returns the extractor. - */ - public Extractor getExtractor() { - return this.extractor; - } - -} Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/rule/Rule.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -49,9 +49,13 @@ import java.util.List; import java.util.Map; +import org.drools.spi.ClassObjectType; +import org.drools.spi.ColumnExtractor; import org.drools.spi.Condition; import org.drools.spi.Consequence; +import org.drools.spi.Constraint; import org.drools.spi.Duration; +import org.drools.spi.Evaluator; import org.drools.spi.Extractor; import org.drools.spi.Importer; import org.drools.spi.Module; @@ -363,7 +367,7 @@ * the <code>identifier</code>. */ public Declaration getDeclaration(String identifier) { - return (Declaration) this.declarations; + return (Declaration) this.declarations.get( identifier ); } /** @@ -378,14 +382,50 @@ } /** - * Add a <code>Test</code> to this rule. + * Add a pattern to the rule. All patterns are searched for bindings which are then added to the rule + * as declarations * * @param condition * The <code>Test</code> to add. + * @throws InvalidRuleException */ - public void addPattern(ConditionalElement ce) { + public void addPattern(ConditionalElement ce) throws InvalidRuleException { + addDeclarations( ce ); this.headPattern.addChild( ce ); } + + public void addPattern(Column column) throws InvalidRuleException { + addDeclarations( column ); + this.headPattern.addChild( column ); + } + + private void addDeclarations(Column column) throws InvalidRuleException { + // Check if the column is bound and if so add it as a declaration + if ( column.getBinding() != null ) { + ColumnBinding binding = (ColumnBinding ) column.getBinding(); + addDeclaration( binding.getIdentifier(), column.getIndex(), new ColumnExtractor( new ClassObjectType( Object.class ) ) ); + } + + // Check if there are any bound fields and if so add it as a declaration + for ( Iterator constraintIter = column.getConstraints().iterator(); constraintIter.hasNext(); ) { + Constraint constraint = ( Constraint ) constraintIter.next(); + if ( constraint instanceof FieldBinding ) { + FieldBinding fieldBinding = ( FieldBinding ) constraint; + addDeclaration(fieldBinding.getIdentifier(), fieldBinding.getColumn(), fieldBinding.getExtractor() ); + } + } + } + + private void addDeclarations(ConditionalElement ce) throws InvalidRuleException { + for ( Iterator it = ce.getChildren().iterator(); it.hasNext(); ) { + Object object = it.next(); + if ( object instanceof Column ) { + addDeclarations( (Column) object ); + } else if ( object instanceof ConditionalElement ) { + addDeclarations( (ConditionalElement) object ); + } + } + } /** * Retrieve the <code>List</code> of <code>Conditions</code> for this Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ClassObjectType.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -41,6 +41,8 @@ * */ +import java.util.Arrays; + /** * Java class semantics <code>ObjectType</code>. * @@ -57,6 +59,8 @@ /** Java object class. */ protected Class objectTypeClass; + + protected int valueType; // ------------------------------------------------------------ // Constructors @@ -81,7 +85,7 @@ * * @return The Java object class. */ - public Class getType() { + public Class getClassType() { return this.objectTypeClass; } @@ -100,8 +104,12 @@ * object type, else <code>false</code>. */ public boolean matches(Object object) { - return getType().isInstance( object ); + return getClassType().isInstance( object ); } + + public int getValueType() { + return this.valueType; + } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // java.lang.Object @@ -113,8 +121,32 @@ * @return The hash. */ public int hashCode() { - return getType().hashCode(); + return getClassType().hashCode(); } + + protected void setValueType(Class clazz) { + if ( clazz == Character.class ) { + this.valueType = Evaluator.CHAR_TYPE; + } else if ( clazz == Byte.class ) { + this.valueType = Evaluator.BYTE_TYPE; + } else if (clazz == Short.class ) { + this.valueType = Evaluator.SHORT_TYPE; + } else if (clazz == Integer.class ) { + this.valueType = Evaluator.INTEGER_TYPE; + } else if (clazz == Long.class) { + this.valueType = Evaluator.LONG_TYPE; + } else if (clazz == Float.class) { + this.valueType = Evaluator.FLOAT_TYPE; + } else if (clazz == Double.class) { + this.valueType = Evaluator.DOUBLE_TYPE; + } else if (clazz == java.sql.Date.class) { + this.valueType = Evaluator.DATE_TYPE; + } else if (clazz.isAssignableFrom( Object[].class )) { + this.valueType = Evaluator.ARRAY_TYPE; + } else if (clazz instanceof Object) { + this.valueType = Evaluator.OBJECT_TYPE; + } + } /** * Determine if another object is equal to this. @@ -138,6 +170,6 @@ } public String toString() { - return getType().getName(); + return getClassType().getName(); } } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/DefaultKnowledgeHelper.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/DefaultKnowledgeHelper.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/DefaultKnowledgeHelper.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -78,10 +78,14 @@ public void modifyObject(Object oldObject, Object newObject) throws FactException { FactHandle handle = this.tuple.getFactHandleForObject( oldObject ); - - this.tuple.getWorkingMemory().modifyObject( handle, - newObject ); + + modifyObject(handle, newObject); } + + public void modifyObject(FactHandle handle, + Object newObject) throws FactException { + this.tuple.getWorkingMemory().modifyObject( handle, newObject ); + } public void retractObject(Object object) throws FactException { FactHandle handle = this.tuple.getFactHandleForObject( object ); Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Evaluator.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Evaluator.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Evaluator.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -14,14 +14,15 @@ // Types public static final int CHAR_TYPE = 100; public static final int BYTE_TYPE = 110; - public static final int SHORT_TYPE = 130; - public static final int INTEGER_TYPE = 140; - public static final int LONG_TYPE = 150; - public static final int FLOAT_TYPE = 160; - public static final int DOUBLE_TYPE = 170; + public static final int SHORT_TYPE = 120; + public static final int INTEGER_TYPE = 130; + public static final int LONG_TYPE = 140; + public static final int FLOAT_TYPE = 150; + public static final int DOUBLE_TYPE = 160; + public static final int BOOLEAN_TYPE = 170; public static final int DATE_TYPE = 180; public static final int ARRAY_TYPE = 190; - public static final int OBJECT_TYPE = 195; + public static final int OBJECT_TYPE = 200; public int getType(); Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Extractor.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Extractor.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Extractor.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -7,5 +7,5 @@ Serializable { Object getValue(Object object); - Class getValueType(); + ObjectType getObjectType(); } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -44,6 +44,7 @@ import java.util.List; import org.drools.FactException; +import org.drools.FactHandle; /** * KnowledgeHelper implementation types are injected into consequenses @@ -111,6 +112,9 @@ void modifyObject(Object oldObject, Object newObject) throws FactException; + void modifyObject(FactHandle handle, + Object newObject) throws FactException; + /** * Retracts an object from the WorkingMemory. All Activations on the Agenda * that are cancelled should emit ActivationCancelled events. Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ObjectType.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ObjectType.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/ObjectType.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -61,4 +61,6 @@ * object type, else <code>false</code>. */ boolean matches(Object object); + + int getValueType(); } Modified: trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Tuple.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Tuple.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/main/java/org/drools/spi/Tuple.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -83,6 +83,8 @@ * not a root fact object. */ FactHandle getFactHandleForObject(Object object); + + FactHandle getFactHandleForDeclaration(Declaration declaration); /** * Returns a reference to the <code>WorkingMemory</code> associated with Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Context.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -47,9 +47,15 @@ implements Serializable { - public static final int START_UP = 0; + public static final int START_UP = 0; + public static final int ASSIGN_SEATS = 1; + public static final int MAKE_PATH = 2; + public static final int CHECK_DONE = 3; + public static final int PRINT_RESULTS = 4; private int state; + + //private Path path; public Context(int state) { this.state = state; @@ -63,6 +69,10 @@ return this.state == state; } + public int getState() { + return this.state; + } + public String toString() { return "{state=" + this.state + "}"; } Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/Guest.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -48,45 +48,33 @@ public class Guest implements Serializable { - private String name; + private final String name; - private char sex; + private final Sex sex; - private List hobbies; + private final Hobby hobby; public Guest(String name, - char sex) { + Sex sex, + Hobby hobby) { this.name = name; this.sex = sex; - this.hobbies = new ArrayList(); + this.hobby = hobby; } public String getName() { return this.name; } - public void addHobby(String hobby) { - this.hobbies.add( hobby ); + public Hobby getHobby() { + return this.hobby; } + + public Sex getSex() { + return this.sex; + } - public List getHobbies() { - return this.hobbies; - } - - public boolean hasOppositeSex(Guest guest) { - return this.sex != guest.sex; - } - - public boolean hasSameHobby(Guest guest) { - boolean hobbyFound = false; - for ( int i = 0; !hobbyFound && i < this.hobbies.size(); i++ ) { - String hobby = (String) this.hobbies.get( i ); - hobbyFound = guest.hobbies.contains( hobby ); - } - return hobbyFound; - } - public String toString() { - return "{name=" + this.name + ",sex=" + this.sex + ",hobbies=" + this.hobbies + "}"; + return "{name=" + this.name + ",sex=" + this.sex + ",hobbies=" + this.hobby + "}"; } } \ No newline at end of file Modified: trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java =================================================================== --- trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-06 22:44:34 UTC (rev 2009) +++ trunk/labs/jbossrules/drools-core/src/test/java/org/drools/examples/manners/MannersTest.java 2006-01-07 02:17:23 UTC (rev 2010) @@ -1,5 +1,8 @@ package org.drools.examples.manners; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; @@ -7,14 +10,36 @@ import java.util.List; import java.util.Random; +import org.drools.Cheese; +import org.drools.FactException; +import org.drools.WorkingMemory; +import org.drools.rule.And; +import org.drools.rule.BoundVariableConstraint; import org.drools.rule.Column; import org.drools.rule.ColumnBinding; +import org.drools.rule.Declaration; +import org.drools.rule.EvaluatorFactory; +import org.drools.rule.FieldBinding; +import org.drools.rule.InvalidRuleException; import org.drools.rule.LiteralConstraint; +import org.drools.rule.Not; import org.drools.rule.Rule; import org.drools.rule.RuleSet; +import org.drools.spi.Activation; +import org.drools.spi.ClassFieldExtractor; import org.drools.spi.ClassObjectType; import org.drools.spi.BaseEvaluator; +import org.drools.spi.Consequence; +import org.drools.spi.ConsequenceException; +import org.drools.spi.Constraint; +import org.drools.spi.DefaultKnowledgeHelper; +import org.drools.spi.Evaluator; +import org.drools.spi.Field; +import org.drools.spi.FieldExtractor; +import org.drools.spi.KnowledgeHelper; import org.drools.spi.LiteralExpressionConstraint; +import org.drools.spi.MockField; +import org.drools.spi.Tuple; public class MannersTest { /** Number of guests at the dinner (default: 16). */ @@ -33,47 +58,852 @@ private ClassObjectType guestType; private ClassObjectType seatingType; private ClassObjectType lastSeatType; + private ClassObjectType countType; + private ClassObjectType pathType; + private ClassObjectType chosenType; + private Evaluator objectEqualEvaluator; + private Evaluator objectNotEqualEvaluator; + private Evaluator integerEqualEvaluator; + private Evaluator integerNotEqualEvaluator; + private Evaluator booleanEqualEvaluator; + private Evaluator booleanNotEqualEvaluator; protected void setUp() throws Exception { - contextType = new ClassObjectType( Context.class ); - guestType = new ClassObjectType( Guest.class ); - seatingType = new ClassObjectType( Seating.class ); - lastSeatType = new ClassObjectType( LastSeat.class ); + this.contextType = new ClassObjectType( Context.class ); + this.guestType = new ClassObjectType( Guest.class ); + this.seatingType = new ClassObjectType( Seating.class ); + this.lastSeatType = new ClassObjectType( LastSeat.class ); + this.countType = new ClassObjectType( Count.class ); + this.pathType = new ClassObjectType( Path.class ); + this.chosenType = new ClassObjectType( Chosen.class ); + this.integerEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.INTEGER_TYPE, + Evaluator.EQUAL ); + this.integerNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.INTEGER_TYPE, + Evaluator.NOT_EQUAL ); + + this.objectEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.OBJECT_TYPE, + Evaluator.EQUAL ); + this.objectNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.OBJECT_TYPE, + Evaluator.NOT_EQUAL ); + + this.booleanEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE, + Evaluator.EQUAL ); + this.booleanNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE, + Evaluator.NOT_EQUAL ); + RuleSet ruleSet = new RuleSet( "Miss Manners" ); Rule assignFirstSeat = getAssignFirstSeatRule(); } - private Rule getAssignFirstSeatRule() { - Rule rule = new Rule( "assignFirstSeat" ); + /** + * <pre> + * rule assignFirstSeat() { + * Context context; + * Guest guest; + * Count count; + * when { + * context : Context( state == Context.START_UP ) + * guest : Guest() + * count : Count() + * } then { + * String guestName = guest.getName(); + * drools.assert( new Seating( count.getValue(), 1, true, 1, guestName, 1, guestName) ); + * drools.assert( new Path( count.getValue(), 1, guestName ) ); + * count.setCount( count.getValue() + 1 ); + * + * System.out.println( "seat 1 " + guest.getName() + " ); + * + * context.setPath( Context.ASSIGN_SEATS ); + * } + * } + * </pre> + * + * + * @return + * @throws IntrospectionException + * @throws InvalidRuleException + */ + private Rule getAssignFirstSeatRule() throws IntrospectionException, + InvalidRuleException { + final Rule rule = new Rule( "assignFirstSeat" ); - Column context = new Column( 0, - contextType, - "context" ); + // ----------- + // context : Context( state == Context.START_UP ) + // ----------- + Column contextColumn = new Column( 0, + contextType, + "context" ); -// LiteralExpressionConstraint isCheddar = new LiteralExpressionConstraint() { -// -// public boolean isAllowed(Object object, -// BaseEvaluator comparator) { -// Context context = (Context) object; -// return comparator.compare( context, -// Context.START_UP ); -// } -// -// }; + contextColumn.addConstraint( getLiteralConstraint( contextColumn, + "state", + new Integer( Context.START_UP ), + this.integerEqualEvaluator ) ); - /* - * Creates a constraint with the given expression - */ -// LiteralConstraint constraint0 = new LiteralConstraint( isCheddar, -// new ObjectConstraintComparator( BaseEvaluator.EQUAL ) ); + rule.addPattern( contextColumn ); - // context. + final Declaration contextDeclaration = rule.getDeclaration( "context" ); + // ----------- + // guest: Guest() + // ----------- + Column guestColumn = new Column( 1, + guestType, + "guest" ); + + rule.addPattern( guestColumn ); + + final Declaration guestDeclaration = rule.getDeclaration( "guest" ); + + // ------------ + // count : Count() + // ------------ + Column countColumn = new Column( 2, + countType, + "count" ); + + rule.addPattern( countColumn ); + + final Declaration countDeclaration = rule.getDeclaration( "count" ); + + Consequence consequence = new Consequence() { + + public void invoke(Activation activation) throws ConsequenceException { + try { + Rule rule = activation.getRule(); + Tuple tuple = activation.getTuple(); + KnowledgeHelper drools = new DefaultKnowledgeHelper( rule, + tuple ); + + Guest guest = (Guest) tuple.get( guestDeclaration ); + Context context = (Context) tuple.get( contextDeclaration ); + Count count = (Count) tuple.get( countDeclaration ); + + String guestName = guest.getName(); + + drools.assertObject( new Seating( count.getValue(), + 0, + true, + 1, + guestName, + 1, + guestName ) ); + drools.assertObject( new Path( count.getValue(), + 1, + guestName ) ); + + count.setValue( count.getValue() + 1 ); + drools.modifyObject( tuple.getFactHandleForDeclaration( countDeclaration ), + count ); + + context.setState( Context.ASSIGN_SEATS ); + drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), + context ); + System.out.println( "leftSeat " + guestName ); + + } catch ( Exception e ) { + throw new ConsequenceException( e ); + } + } + + }; + + rule.setConsequence( consequence ); + return rule; } + /** + * <pre> + * rule makePath() { + * Context context; + * int seatingId, seatingPid, pathSeat; + * String pathGuestName; + * + * when { + * context : Context( state == Context.MAKE_PATH ) + * Seating( seatingId:id, seatingPid:pid, pathDone == false ) + * Path( id == seatingPid, pathGuestName:guest, pathSeat:seat ) + * (not Path( id == seatingId, guestName == pathGuestName ) + * } else { + * drools.assert( new Path( seatingId, pathSeat, pathGuestName ) ); + * + * } + * } + * </pre> + * + * @return + * @throws IntrospectionException + * @throws InvalidRuleException + */ + private Rule makePath() throws IntrospectionException, + InvalidRuleException { + final Rule rule = new Rule( "makePath" ); + + // ----------- + // context : Context( state == Context.MAKE_PATH ) + // ----------- + Column contextColumn = new Column( 0, + contextType ); + + contextColumn.addConstraint( getLiteralConstraint( contextColumn, + "state", + new Integer( Context.MAKE_PATH ), + this.integerEqualEvaluator ) ); + + rule.addPattern( contextColumn ); + + // --------------- + // Seating( seatingId:id, seatingPid:pid, pathDone == false ) + // --------------- + Column seatingColumn = new Column( 1, + seatingType ); + + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "id", + "seatingId" ) ); + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "pid", + "seatingPid" ) ); + seatingColumn.addConstraint( getLiteralConstraint( seatingColumn, + "pathDone", + new Boolean( false ), + booleanEqualEvaluator ) ); + + rule.addPattern( seatingColumn ); + + final Declaration seatingIdDeclaration = rule.getDeclaration( "seatingId" ); + final Declaration seatingPidDeclaration = rule.getDeclaration( "seatingPid" ); + + // ----------- + // Path( id == seatingPid, pathGuestName:guestName, pathSeat:seat ) + // ----------- + Column pathColumn = new Column( 2, + pathType ); + + pathColumn.addConstraint( getBoundVariableConstraint( pathColumn, + "id", + seatingPidDeclaration, + integerEqualEvaluator ) ); + pathColumn.addConstraint( getFieldBinding( pathColumn, + "guestName", + "pathGuestName" ) ); + pathColumn.addConstraint( getFieldBinding( pathColumn, + "seat", + "pathSeat" ) ); + + rule.addPattern( pathColumn ); + + final Declaration pathGuestNameDeclaration = rule.getDeclaration( "pathGuestName" ); + final Declaration pathSeatDeclaration = rule.getDeclaration( "pathSeat" ); + // ------------- + // (not Path( id == seatingId, guestName == pathGuestName ) + // ------------- + Column notPathColumn = new Column( 3, + pathType ); + + notPathColumn.addConstraint( getBoundVariableConstraint( notPathColumn, + "id", + seatingIdDeclaration, + integerEqualEvaluator ) ); + notPathColumn.addConstraint( getBoundVariableConstraint( notPathColumn, + "guestName", + pathGuestNameDeclaration, + objectEqualEvaluator ) ); + + Not not = new Not(); + + not.addChild( notPathColumn ); + notPathColumn.addConstraint( not ); + + rule.addPattern( notPathColumn ); + + // ------------ + // drools.assert( new Path( id, pathName, pathSeat ) ); + // ------------ + Consequence consequence = new Consequence() { + + public void invoke(Activation activation) throws ConsequenceException { + try { + Rule rule = activation.getRule(); + Tuple tuple = activation.getTuple(); + KnowledgeHelper drools = new DefaultKnowledgeHelper( rule, + tuple ); + + int id = ((Integer) tuple.get( seatingIdDeclaration )).intValue(); + String guestName = (String) tuple.get( pathGuestNameDeclaration ); + int seat = ((Integer) tuple.get( pathSeatDeclaration )).intValue(); + + drools.assertObject( new Path( id, + seat, + guestName ) ); + } catch ( Exception e ) { + throw new ConsequenceException( e ); + } + } + + }; + + rule.setConsequence( consequence ); + + return rule; + } + + /** + * <pre> + * rule findSeating() { + * Context context; + * int seatingId, seatingPid; + * String seatingRightGuestName, leftGuestName; + * Sex rightGuestSex; + * Hobby rightGuestHobby; + * Count count; + * + * when { + * context : Context( state == Context.ASSIGN_SEATS ) + * Seating( seatingId:id, seatingPid:pid, pathDone == true + * seatingRightGuestName:rightGuestName ) + * Guest( name == seatingRightGuestName, rightGuestSex:sex, rightGuestHobby:hobby ) + * Guest( leftGuestName:name , sex != rightGuestSex, hobby == rightGuestHobby ) + * + * count : Count() + * + * not ( Path( id == seatingId, guestName == leftGuestName) ) + * not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby) ) + * } then { + * int newSeat = rightSeat + 1; + * drools.assert( new Seating( coung.getValue(), rightSeat, rightSeatName, leftGuestName, newSeat, countValue, id, false ); + * drools.assert( new Path( countValue, leftGuestName, newSeat ); + * drools.assert( new Chosen( id, leftGuestName, rightGuestHobby ) ); + * + * System.out.println( "seat " + rightSeat + " " + rightSeatName + " " + leftGuestName ); + * + * count.setCount( countValue + 1 ); + * context.setPath( Context.MAKE_PATH ); + * } + * } + * </pre> + * + * @return + * @throws IntrospectionException + * @throws InvalidRuleException + */ + private Rule findSeating() throws IntrospectionException, + InvalidRuleException { + final Rule rule = new Rule( "makePath" ); + + // --------------- + // context : Context( state == Context.ASSIGN_SEATS ) + // --------------- + Column contextColumn = new Column( 0, + contextType, + "context" ); + + contextColumn.addConstraint( getLiteralConstraint( contextColumn, + "state", + new Integer( Context.ASSIGN_SEATS ), + this.integerEqualEvaluator ) ); + + rule.addPattern( contextColumn ); + + final Declaration contextDeclaration = rule.getDeclaration( "context" ); + + // ------------------------------- + // Seating( seatingId:id, seatingPid:pid, pathDone == true + // seatingRightSeat:rightSeat + // seatingRightGuestName:rightGuestName ) + // ------------------------------- + Column seatingColumn = new Column( 1, + seatingType ); + + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "id", + "seatingId" ) ); + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "pid", + "seatingPid" ) ); + seatingColumn.addConstraint( getLiteralConstraint( seatingColumn, + "pathDone", + new Boolean( true ), + this.booleanEqualEvaluator ) ); + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "rightSeat", + "seatingRightSeat" ) ); + seatingColumn.addConstraint( getFieldBinding( seatingColumn, + "rightGuestName", + "seatingRightGuestName" ) ); + + rule.addPattern( seatingColumn ); + + final Declaration seatingIdDeclaration = rule.getDeclaration( "seatingId" ); + final Declaration seatingPidDeclaration = rule.getDeclaration( "seatingPid" ); + final Declaration seatingRightGuestNameDeclaration = rule.getDeclaration( "seatingRightGuestName" ); + final Declaration seatingRightSeatDeclaration = rule.getDeclaration( "seatingRightSeat" ); + // -------------- + // Guest( name == seatingRightGuestName, rightGuestSex:sex, + // rightGuestHobby:hobby ) + // --------------- + Column rightGuestColumn = new Column( 2, + guestType ); + + rightGuestColumn.addConstraint( getBoundVariableConstraint( rightGuestColumn, + "name", + seatingRightGuestNameDeclaration, + objectEqualEvaluator ) ); + + rightGuestColumn.addConstraint( getFieldBinding( rightGuestColumn, + "sex", + "rightGuestSex" ) ); + + rightGuestColumn.addConstraint( getFieldBinding( rightGuestColumn, + "hobby", + "rightGuestHobby" ) ); + + rule.addPattern( rightGuestColumn ); + + final Declaration rightGuestSexDeclaration = rule.getDeclaration( "rightGuestSex" ); + final Declaration rightGuestHobbyDeclaration = rule.getDeclaration( "rightGuestHobby" ); + + // ---------------- + // Guest( leftGuestName:name , sex != rightGuestSex, hobby == rightGuestHobby ) + // ---------------- + Column leftGuestColumn = new Column( 3, + guestType ); + + leftGuestColumn.addConstraint( getFieldBinding( leftGuestColumn, + "name", + "leftGuestHobby" ) ); + + leftGuestColumn.addConstraint( getBoundVariableConstraint( leftGuestColumn, + "sex", + rightGuestSexDeclaration, + objectEqualEvaluator ) ); + + leftGuestColumn.addConstraint( getBoundVariableConstraint( rightGuestColumn, + "hobby", + rightGuestHobbyDeclaration, + objectEqualEvaluator ) ); + rule.addPattern( leftGuestColumn ); + final Declaration leftGuestNameDeclaration = rule.getDeclaration( "lefttGuestName" ); + + // --------------- + // count : Count() + // --------------- + Column count = new Column( 2, + countType, + "count" ); + + rule.addPattern( count ); + + final Declaration countDeclaration = rule.getDeclaration( "count" ); + + // -------------- + // not ( Path( id == seatingId, guestName == leftGuestName) ) + // not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby) ) + // -------------- + Column notPathColumn = new Column( 3, + pathType ); + + notPathColumn.addConstraint( getBoundVariableConstraint( notPathColumn, + "id", + seatingIdDeclaration, + integerEqualEvaluator ) ); + + notPathColumn.addConstraint( getBoundVariableConstraint( notPathColumn, + "guestName", + leftGuestNameDeclaration, + objectEqualEvaluator ) ); + Not not = new Not(); + not.addChild( notPathColumn ); + notPathColumn.addConstraint( not ); + // ------------ + // not ( Chosen( id == seatingId, guestName == leftGuestName, hobby == rightGuestHobby ) ) + // ------------ + Column notChosenColumn = new Column( 4, + chosenType ); + + notChosenColumn.addConstraint( getBoundVariableConstraint( notChosenColumn, + "id", + seatingIdDeclaration, + integerEqualEvaluator ) ); + + notChosenColumn.addConstraint( getBoundVariableConstraint( notChosenColumn, + "guestName", + leftGuestNameDeclaration, + objectEqualEvaluator ) ); + + notChosenColumn.addConstraint( getBoundVariableConstraint( notChosenColumn, + "hobby", + rightGuestHobbyDeclaration, + objectEqualEvaluator ) ); + + notChosenColumn.addConstraint( notChosenColumn ); + + rule.addPattern( notChosenColumn ); + + // ------------ + // int newSeat = rightSeat + 1; + // drools.assert( new Seating( coung.getValue(), rightSeat, + // rightSeatName, leftGuestName, newSeat, countValue, id, false ); + // drools.assert( new Path( countValue, leftGuestName, newSeat ); + // drools.assert( new Chosen( id, leftGuestName, rightGuestHobby ) ); + // + // System.out.println( "seat " + rightSeat + " " + rightSeatName + " " + + // leftGuestName ); + // + // count.setCount( countValue + 1 ); + // context.setPath( Context.MAKE_PATH ); + // ------------ + Consequence consequence = new Consequence() { + + public void invoke(Activation activation) throws ConsequenceException { + try { + Rule rule = activation.getRule(); + Tuple tuple = activation.getTuple(); + KnowledgeHelper drools = new DefaultKnowledgeHelper( rule, + tuple ); + + Context context = (Context) tuple.get( contextDeclaration ); + Count count = (Count) tuple.get( countDeclaration ); + int seatId = ((Integer) tuple.get( seatingIdDeclaration )).intValue(); + int seatingRightSeat = ((Integer) tuple.get( seatingRightSeatDeclaration )).intValue(); + String leftGuestName = (String) tuple.get( leftGuestNameDeclaration ); + String rightGuestName = (String) tuple.get( seatingRightGuestNameDeclaration ); + Hobby rightGuestHobby = (Hobby) tuple.get( rightGuestHobbyDeclaration ); + + drools.assertObject( new Seating( count.getValue(), + seatId, + false, + seatingRightSeat, + leftGuestName, + seatingRightSeat + 1, + rightGuestName ) ); + + drools.assertObject( new Path( count.getValue(), + seatingRightSeat + 1, + leftGuestName ) ); + + drools.assertObject( new Chosen( seatId, + leftGuestName, + rightGuestHobby ) ); + + count.setValue( count.getValue() + 1 ); + drools.modifyObject( tuple.getFactHandleForDeclaration( countDeclaration ), + count ); + + context.setState( Context.MAKE_PATH ); + drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), + context ); + + } catch ( Exception e ) { + throw new ConsequenceException( e ); + } + } + + }; + + rule.setConsequence( consequence ); + + return rule; + } + + /** + * + * rule pathDone() { + * Context context; + * Seating seating; + * when { + * context : Context( state == Context.MAKE_PATH ) + * seating : Seating( pathDone == false ) + * } then { + * seating.setPathDone( true ); + * context.setName( Context.CHECK_DONE ); + * } + * } + * + * + * @return + * @throws IntrospectionException + * @throws InvalidRuleException + */ + private Rule pathDone() throws IntrospectionException, + InvalidRuleException { + final Rule rule = new Rule( "makePath" ); + + // ----------- + // context : Context( state == Context.MAKE_PATH ) + // ----------- + Column contextColumn = new Column( 0, + contextType ); + + contextColumn.addConstraint( getLiteralConstraint( contextColumn, + "state", + new Integer( Context.MAKE_PATH ), + this.integerEqualEvaluator ) ); + + rule.addPattern( contextColumn ); + final Declaration contextDeclaration = rule.getDeclaration( "context" ); + + // --------------- + // seating : Seating( pathDone == false ) + // --------------- + Column seatingColumn = new Column( 1, + seatingType, + "seating" ); + + seatingColumn.addConstraint( getLiteralConstraint( seatingColumn, + "pathDone", + new Boolean( false ), + booleanEqualEvaluator ) ); + + rule.addPattern( seatingColumn ); + + final Declaration seatingDeclaration = rule.getDeclaration( "seating" ); + + // ------------ + // context.setName( Context.CHECK_DONE ); + // seating.setPathDone( true ); + // ------------ + Consequence consequence = new Consequence() { + + public void invoke(Activation activation) throws ConsequenceException { + try { + Rule rule = activation.getRule(); + Tuple tuple = activation.getTuple(); + KnowledgeHelper drools = new DefaultKnowledgeHelper( rule, + tuple ); + + Context context = (Context) tuple.get( contextDeclaration ); + Seating seating = (Seating) tuple.get( seatingDeclaration ); + + seating.setPathDone( true ); + drools.modifyObject( tuple.getFactHandleForDeclaration( seatingDeclaration ), + seating ); + + context.setState( Context.CHECK_DONE ); + drools.modifyObject( tuple.getFactHandleForDeclaration( contextDeclaration ), + context ); + } catch ( Exception e ) { + throw new ConsequenceException( e ); + } + } + + }; + + rule.setConsequence( consequence ); + + return rule; + } + + /** + * + * rule areWeDone() { + * Context context; + * LastSeat lastSear; + * when { + * context : Context( state == Context.CHECK_DONE ) + * LastSeat( lastSeat: seat ) + * Seating( seat == lastSeat ) + * } then { + * context.setState( Context.PRINT_RESULTS ); + * } + * } + * + * + * @return + * @throws IntrospectionException + * @throws InvalidRuleException + */ + private Rule areWeDone() throws IntrospectionException, + InvalidRuleException { + final Rule rule = new Rule( "areWeDone" ); + + // ----------- + // context : Context( state == Context.CHECK_DONE ) + // ----------- + Column contextColumn = new Column( 0, + contextType ); + + contextColumn.addConstraint( getLiteralConstraint( contextColumn, + "state", + new Integer( Context.CHECK_DONE ), + this.integerEqualEvaluator ) ); + + rule.addPattern( contextColumn ); + final Declaration contextDeclaration = rule.getDeclaration( "context" ); + + // --------------- + // LastSeat( lastSeat: seat ) + // --------------- + Column lastSeatColumn = new Column( 1, + lastSeatType, + null ); + + lastSeatColumn.addConstraint( getFieldBinding( lastSeatColumn, + "seat", + "lastSeat" ) ); + rule.addPattern( lastSeatColumn ); + final Declaration lastSeatDeclaration = rule.getDeclaration( "lastSeat" ); + // ------------- + // Seating( seat == lastSeat ) + // ------------- + Column seatingColumn = new Column( 2, + seatingType, + null ); + + seatingColumn.addConstraint( getBoundVariableConstraint( seatingColumn, + "seat", + lastSeatDeclaration, + integerEqualEvaluator ) ); + + rule.addPattern( seatingColumn ); + + // ------------ + // context.setName(... [truncated message content] |
From: <jbo...@li...> - 2006-01-06 22:44:40
|
Author: wrzep Date: 2006-01-06 17:44:34 -0500 (Fri, 06 Jan 2006) New Revision: 2009 Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/DownloadsPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java Log: changed way of passing properties to the plugins to fit common standards http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/Plugins.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -24,6 +24,8 @@ import java.util.HashMap; import java.util.Map; +import java.util.Properties; + import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.Projects; import org.jboss.forge.status.plugins.InvalidPluginPropertiesException; @@ -105,7 +107,8 @@ return null; } - Node pluginSpecificPropertiesNode = XmlTools.getFirstNodeWithName(pluginNode, PLUGIN_PROPERTIES_ELEMENT); + Node pluginPropertiesNode = XmlTools.getFirstNodeWithName(pluginNode, PLUGIN_PROPERTIES_ELEMENT); + Properties pluginProperties = getPluginProperties(pluginPropertiesNode); // Get plugin instance; Plugin plugin = null; @@ -113,9 +116,9 @@ plugin = (Plugin) pluginClass.newInstance(); if (scorePlugin) { - ((ScorePlugin) plugin).init(pluginId, statusPlugins, pluginSpecificPropertiesNode); + ((ScorePlugin) plugin).init(pluginId, statusPlugins, pluginProperties); } else { /* status plugin */ - ((StatusPlugin) plugin).init(pluginId, portalName, projects, pluginSpecificPropertiesNode); + ((StatusPlugin) plugin).init(pluginId, portalName, projects, pluginProperties); } } catch (InvalidPluginPropertiesException e) { @@ -132,6 +135,32 @@ return plugin; } + private Properties getPluginProperties(Node propertiesNode) { + + if (propertiesNode == null) + return null; + + Properties props = new Properties(); + NodeList nodes = propertiesNode.getChildNodes(); + + for (int i = 0; i < nodes.getLength(); i++) { + Node node = nodes.item(i); + + if ((node.getNodeType() == Node.ELEMENT_NODE) + && (node.getNodeName() == "property")){ + + String propertyName = XmlTools.getChildNodeValue(node, "name"); + String propertyValue = XmlTools.getChildNodeValue(node, "value"); + + if ((propertyName != null) && (propertyValue != null)) { + props.setProperty(propertyName, propertyValue); + } + } + } + + return props; + } + /** * @param pluginId * @return Plugin with the given <code>pluginId</code> Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/StatusDescriptor.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -28,8 +28,6 @@ import org.apache.xerces.parsers.DOMParser; import org.jboss.portal.common.context.DelegateContext; -import org.jboss.portlet.JBossRenderRequest; - import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/DownloadsPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/DownloadsPlugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/DownloadsPlugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -23,11 +23,12 @@ package org.jboss.forge.status.plugins; +import java.util.Properties; + import org.jboss.forge.common.projects.DownloadCounterTools; import org.jboss.forge.common.projects.Projects; import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.aop.Inject; -import org.w3c.dom.Node; /** * This Plugin returns sum of all downloads for given project id name. @@ -48,8 +49,8 @@ super(); } - public void init(String id, String portalName, Projects projects, Node propertiesNode) throws InvalidPluginPropertiesException { - super.init(id,portalName,projects,propertiesNode); + public void init(String id, String portalName, Projects projects, Properties properties) throws InvalidPluginPropertiesException { + super.init(id,portalName,projects,properties); this.portalName = portalName; } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/KosmosStatusPlugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -22,7 +22,6 @@ package org.jboss.forge.status.plugins; -import org.jboss.forge.common.XmlTools; import org.jboss.forge.common.projects.Projects; import org.jboss.logging.Logger; @@ -30,9 +29,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.Properties; -import org.w3c.dom.Node; - /** * @author Pawel Wrzeszcz * Superclass for kosmos-service based plugins. @@ -62,10 +60,10 @@ } public void init(String id, String portalName, Projects projects, - Node propertiesNode) throws InvalidPluginPropertiesException { - super.init(id, portalName, projects,propertiesNode); + Properties properties) throws InvalidPluginPropertiesException { + super.init(id, portalName, projects,properties); - getServiceProperty(propertiesNode); + getServiceProperty(properties); } /** @@ -74,17 +72,15 @@ * @param propertiesNode Node with plugin specyfic properties * @throws InvalidPluginPropertiesException */ - private void getServiceProperty(Node propertiesNode) + private void getServiceProperty(Properties properties) throws InvalidPluginPropertiesException { - Map<String,String> properties = - XmlTools.getMapFromNodeElements(propertiesNode); if (properties.isEmpty()) { throw new InvalidPluginPropertiesException( "Missing properties for plugin: " + getId() + "."); } - serviceURL = properties.get(getKosmosServiceProperty()); + serviceURL = properties.getProperty(getKosmosServiceProperty()); if (serviceURL == null) { throw new InvalidPluginPropertiesException( Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/Plugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -22,7 +22,7 @@ package org.jboss.forge.status.plugins; -import org.w3c.dom.Node; +import java.util.Properties; /** * @author Pawel Wrzeszcz @@ -32,21 +32,22 @@ public abstract class Plugin { /** Node from xml file which holds properties specyfic to this plugin */ - protected Node propertiesNode; + protected Properties properties; /** Plugin id */ protected String id; /** * @param id Plugin id - * @param propertiesNode Node with plugin specyfic properties + * @param properties Node with plugin specyfic properties + * or null if properties are not specified * @throws InvalidPluginPropertiesException * Thrown when properties passed in <code>propertiesNode</code> * are incorrect or missed. */ - public void init(String id, Node propertiesNode) + public void init(String id, Properties properties) throws InvalidPluginPropertiesException { - this.propertiesNode = propertiesNode; + this.properties = properties; this.id = id; } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/ScorePlugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -23,8 +23,8 @@ package org.jboss.forge.status.plugins; import java.util.Map; +import java.util.Properties; -import org.w3c.dom.Node; /** * @author Pawel Wrzeszcz @@ -35,10 +35,10 @@ protected Map<String,Plugin> plugins; public void init(String id, Map<String, Plugin> plugins, - Node propertiesNode) + Properties properties) throws InvalidPluginPropertiesException { this.plugins = plugins; - init(id, propertiesNode); + init(id, properties); } } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/StatusPlugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -22,10 +22,10 @@ package org.jboss.forge.status.plugins; +import java.util.Properties; + import org.jboss.forge.common.projects.Projects; -import org.w3c.dom.Node; - /** * @author Pawel Wrzeszcz * Superclass for the status plugins in the Status Matrix. @@ -47,9 +47,11 @@ * @param propertiesNode Node with plugin specyfic properties * @throws InvalidPluginPropertiesException */ - public void init(String id, String portalName, Projects projects, Node propertiesNode) throws InvalidPluginPropertiesException { + public void init(String id, String portalName, + Projects projects, Properties properties) + throws InvalidPluginPropertiesException { this.projects = projects; this.portalName = portalName; - init(id, propertiesNode); + init(id, properties); } } Modified: trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java 2006-01-06 21:00:44 UTC (rev 2008) +++ trunk/forge/portal-extensions/forge-status/src/java/org/jboss/forge/status/plugins/WeightedScorePlugin.java 2006-01-06 22:44:34 UTC (rev 2009) @@ -23,12 +23,12 @@ package org.jboss.forge.status.plugins; import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; +import java.util.Properties; -import org.jboss.forge.common.XmlTools; import org.jboss.logging.Logger; -import org.w3c.dom.Node; @@ -51,14 +51,22 @@ @Override - public void init(String id, Node propertiesNode) throws InvalidPluginPropertiesException { - super.init(id, propertiesNode); - Map<String,String> props = XmlTools.getMapFromNodeElements(propertiesNode); + public void init(String id, Properties props) throws InvalidPluginPropertiesException { + super.init(id, props); + properties = new Hashtable<String,Float>(props.size()); - for (String key : props.keySet()) { + + for (Iterator iter = props.keySet().iterator(); iter.hasNext();) { + String key = (String) iter.next(); + /* + * Properties=Hashtable<Object,Object>, so we can't use for(String key : properties) + * We have to cast instead :( + * -Pawel + */ + try { - Float value = Float.parseFloat(props.get(key)); - properties.put(key,value); + Float value = Float.parseFloat(props.getProperty(key)); + properties.put((String) key,value); } catch (NumberFormatException e) { Logger log = Logger.getLogger(this.getClass()); log.error("[STATUS] Incorrect weight format in xml descriptor: "+props.get(key)); |
From: <jbo...@li...> - 2006-01-06 21:00:59
|
Author: wrzep Date: 2006-01-06 16:00:44 -0500 (Fri, 06 Jan 2006) New Revision: 2008 Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/kosmos/jars/kosmos-server.jar trunk/forge/portal-extensions/forge-kosmos/to-copy/kosmos-server.war Log: the latest kosmos version - maybe it will fix the svn plugins connection problem? http://jira.jboss.com/jira/browse/JBLAB-415 Pawel Modified: trunk/forge/portal-extensions/binaries/maven-repo-addons/kosmos/jars/kosmos-server.jar =================================================================== (Binary files differ) Modified: trunk/forge/portal-extensions/forge-kosmos/to-copy/kosmos-server.war =================================================================== (Binary files differ) |