[jboss-svn-commits] JBL Code SVN: r10461 - in labs/jbossrules/trunk/drools-jbrms/src: main/java/org/drools/brms/server and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Mar 22 18:11:36 EDT 2007
Author: tirelli
Date: 2007-03-22 18:11:36 -0400 (Thu, 22 Mar 2007)
New Revision: 10461
Added:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/
labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/BRXMLToDescrConverterTest.java
Modified:
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/CompositeFactPattern.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/ConnectiveConstraint.java
labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/Constraint.java
Log:
JBRULES-647: adding transformation for CompositeFactPattern
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/CompositeFactPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/CompositeFactPattern.java 2007-03-22 21:43:16 UTC (rev 10460)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/CompositeFactPattern.java 2007-03-22 22:11:36 UTC (rev 10461)
@@ -1,39 +1,42 @@
package org.drools.brms.client.modeldriven.brxml;
-
/**
* Represents first order logic like Or, Not, Exists.
*
* @author Michael Neale
*/
-public class CompositeFactPattern implements IPattern {
+public class CompositeFactPattern
+ implements
+ IPattern {
+ public static final String NOT = "not";
+ public static final String EXISTS = "exists";
+ public static final String OR = "or";
/**
* this will one of: [Not, Exist, Or]
*/
- public String type;
- public FactPattern[] patterns;
-
-
+ public String type;
+ public FactPattern[] patterns;
+
public CompositeFactPattern(String type) {
this.type = type;
}
-
- public CompositeFactPattern() {}
-
-
+
+ public CompositeFactPattern() {
+ }
+
public void addFactPattern(FactPattern pat) {
- if (this.patterns == null) this.patterns = new FactPattern[0];
-
+ if ( this.patterns == null ) this.patterns = new FactPattern[0];
+
FactPattern[] list = this.patterns;
FactPattern[] newList = new FactPattern[list.length + 1];
-
+
for ( int i = 0; i < list.length; i++ ) {
- newList[i] = list[i];
+ newList[i] = list[i];
}
- newList[list.length] = pat;
-
- this.patterns = newList;
+ newList[list.length] = pat;
+
+ this.patterns = newList;
}
-
+
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/ConnectiveConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/ConnectiveConstraint.java 2007-03-22 21:43:16 UTC (rev 10460)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/ConnectiveConstraint.java 2007-03-22 22:11:36 UTC (rev 10461)
@@ -8,6 +8,10 @@
public class ConnectiveConstraint
implements
PortableObject {
+
+ public static final int UNDEFINED_CONNECTIVE = 0;
+ public static final int OR_CONNECTIVE = 1;
+ public static final int AND_CONNECTIVE = 2;
public ConnectiveConstraint() {}
@@ -16,7 +20,9 @@
this.operator = opr;
this.value = val;
}
+ public int connectiveType;
public String operator;
public String value;
+ public int constraintType;
}
Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/Constraint.java 2007-03-22 21:43:16 UTC (rev 10460)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/brxml/Constraint.java 2007-03-22 22:11:36 UTC (rev 10461)
@@ -1,42 +1,52 @@
package org.drools.brms.client.modeldriven.brxml;
-
/**
* This represents a contraint on a fact.
* Can also include optional "connective constraints" that extend the options for matches.
* @author Michael Neale
*
*/
-public class Constraint implements PortableObject {
- public String fieldBinding;
- public String fieldName;
- public String operator;
- public String value;
+public class Constraint
+ implements
+ PortableObject {
+ public static final int UNDEFINED = 0;
+ public static final int LITERAL = 1;
+ public static final int VARIABLE = 2;
+ public static final int RET_VALUE = 3;
+ public static final int ENUM = 4;
+ public static final int PREDICATE = 5;
+
+ public String fieldBinding;
+ public String fieldName;
+ public String operator;
+ public String value;
+ public int type;
+
public ConnectiveConstraint[] connectives;
-
+
public Constraint(String field) {
this.fieldName = field;
}
-
- public Constraint() {}
-
+
+ public Constraint() {
+ }
+
/**
* This adds a new connective.
*
*/
public void addNewConnective() {
- if (connectives == null) {
- connectives = new ConnectiveConstraint[] {new ConnectiveConstraint()};
+ if ( connectives == null ) {
+ connectives = new ConnectiveConstraint[]{new ConnectiveConstraint()};
} else {
ConnectiveConstraint[] newList = new ConnectiveConstraint[connectives.length + 1];
- for ( int i = 0; i < connectives.length; i++ ) {
+ for ( int i = 0; i < connectives.length; i++ ) {
newList[i] = connectives[i];
}
newList[connectives.length] = new ConnectiveConstraint();
connectives = newList;
- }
+ }
}
-
-
+
}
Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java 2007-03-22 22:11:36 UTC (rev 10461)
@@ -0,0 +1,174 @@
+package org.drools.brms.server.converter;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
+import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
+import org.drools.brms.client.modeldriven.brxml.Constraint;
+import org.drools.brms.client.modeldriven.brxml.DSLSentence;
+import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.IPattern;
+import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
+import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.RestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+
+/**
+ * This class will convert BRXML to Descriptors, allowing to roundtrip between
+ * sipported formats (DRL, XML, CLP, etc).
+ *
+ * It will work off the RuleModel object graph, primarily.
+ *
+ * @author Edson Tirelli
+ */
+public class BRXMLToDescrConverter {
+
+ public RuleDescr toDescr(RuleModel model,
+ String ruleName) {
+ RuleDescr rule = new RuleDescr( ruleName );
+ addAttributes( rule,
+ model.attributes );
+ addLHS( rule,
+ model.lhs );
+ return rule;
+ }
+
+ private void addLHS(RuleDescr rule,
+ IPattern[] lhs) {
+ AndDescr lhsDescr = new AndDescr();
+ rule.setLhs( lhsDescr );
+ for ( int i = 0; i < lhs.length; i++ ) {
+ IPattern cond = lhs[i];
+ if ( cond instanceof DSLSentence ) {
+ // need to decide what to do with DSL sentences
+ //render((DSLSentence) cond, buf);
+ } else if ( cond instanceof FactPattern ) {
+ addFact( lhsDescr,
+ (FactPattern) cond );
+ } else if ( cond instanceof CompositeFactPattern ) {
+ addComposite( lhsDescr,
+ (CompositeFactPattern) cond );
+ }
+ }
+
+ }
+
+ private void addComposite(ConditionalElementDescr ce,
+ CompositeFactPattern pattern) {
+ ConditionalElementDescr inner = null;
+ if( CompositeFactPattern.OR.equals( pattern.type )) {
+ inner = new OrDescr();
+ } else if( CompositeFactPattern.NOT.equals( pattern.type )) {
+ inner = new NotDescr();
+ } else if( CompositeFactPattern.EXISTS.equals( pattern.type )) {
+ inner = new ExistsDescr();
+ }
+ for( int i = 0; i < pattern.patterns.length; i++ ) {
+ this.addFact( inner, pattern.patterns[i] );
+ }
+ ce.addDescr( (BaseDescr) inner );
+ }
+
+ private void addFact(ConditionalElementDescr ce,
+ FactPattern pattern) {
+ ColumnDescr column = new ColumnDescr( pattern.factType );
+ column.setIdentifier( pattern.boundName );
+ ce.addDescr( column );
+
+ for ( int i = 0; i < pattern.constraints.length; i++ ) {
+ Constraint constr = pattern.constraints[i];
+ if ( constr.fieldBinding != null ) {
+ FieldBindingDescr fieldDescr = new FieldBindingDescr( constr.fieldName,
+ constr.fieldBinding );
+ column.addDescr( fieldDescr );
+ }
+ if ( constr.type == Constraint.PREDICATE ) {
+ PredicateDescr predicateDescr = new PredicateDescr( constr.value );
+ column.addDescr( predicateDescr );
+ } else {
+ FieldConstraintDescr constrDescr = new FieldConstraintDescr( constr.fieldName );
+ constrDescr.addRestriction( this.getFieldRestriction( constr.type,
+ constr.operator,
+ constr.value ) );
+
+ if ( constr.connectives != null ) {
+ for ( int j = 0; j < constr.connectives.length; j++ ) {
+ ConnectiveConstraint conn = constr.connectives[j];
+ switch ( conn.connectiveType ) {
+ case ConnectiveConstraint.AND_CONNECTIVE :
+ RestrictionConnectiveDescr andDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
+ constrDescr.addRestriction( andDescr );
+ break;
+ case ConnectiveConstraint.OR_CONNECTIVE :
+ RestrictionConnectiveDescr orDescr = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.OR );
+ constrDescr.addRestriction( orDescr );
+ break;
+ default :
+ // TODO: handle error
+ // unknown connective... error
+ }
+ constrDescr.addRestriction( this.getFieldRestriction( conn.constraintType,
+ conn.operator,
+ conn.value ) );
+ }
+ }
+ column.addDescr( constrDescr );
+ }
+ }
+ }
+
+ /**
+ * @param constr
+ * @param constrDescr
+ */
+ private RestrictionDescr getFieldRestriction(int type,
+ String operator,
+ String value) {
+ switch ( type ) {
+ case Constraint.LITERAL :
+ LiteralRestrictionDescr lit = new LiteralRestrictionDescr( operator,
+ value );
+ return lit;
+ case Constraint.VARIABLE :
+ VariableRestrictionDescr var = new VariableRestrictionDescr( operator,
+ value );
+ return var;
+ case Constraint.ENUM :
+ LiteralRestrictionDescr enu = new LiteralRestrictionDescr( operator,
+ value,
+ true );
+ return enu;
+ case Constraint.RET_VALUE :
+ ReturnValueRestrictionDescr rvc = new ReturnValueRestrictionDescr( operator,
+ value );
+ return rvc;
+ default :
+ throw new RuntimeDroolsException( "Undefined constraint type in ROM: " + type );
+ }
+ }
+
+ private void addAttributes(RuleDescr rule,
+ RuleAttribute[] attributes) {
+ for ( int i = 0; i < attributes.length; i++ ) {
+ RuleAttribute at = attributes[i];
+ AttributeDescr attr = new AttributeDescr( at.attributeName,
+ at.value == null ? "true" : at.value );
+ rule.addAttribute( attr );
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/BRXMLToDescrConverterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/BRXMLToDescrConverterTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/BRXMLToDescrConverterTest.java 2007-03-22 22:11:36 UTC (rev 10461)
@@ -0,0 +1,93 @@
+package org.drools.brms.server.converter;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
+import org.drools.brms.client.modeldriven.brxml.Constraint;
+import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
+import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.LiteralConstraint;
+
+public class BRXMLToDescrConverterTest extends TestCase {
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testToDescr() {
+ BRXMLToDescrConverter converter = new BRXMLToDescrConverter();
+
+ RuleModel model = new RuleModel();
+
+ // adding rule's attributes
+ RuleAttribute salience = new RuleAttribute( "salience", "10" );
+ RuleAttribute noloop = new RuleAttribute( "no-loop", null );
+ model.addAttribute( salience );
+ model.addAttribute( noloop );
+
+ // adding simple pattern
+ FactPattern pat1 = new FactPattern("Cheese");
+ pat1.boundName = "cheese";
+ Constraint constr = new Constraint( "type" );
+ constr.operator = "==";
+ constr.value = "stilton";
+ constr.type = Constraint.LITERAL;
+ pat1.addConstraint( constr );
+ model.addLhsItem( pat1 );
+
+ CompositeFactPattern comp1 = new CompositeFactPattern();
+ comp1.type = CompositeFactPattern.OR;
+
+ FactPattern pat2 = new FactPattern("Person");
+ FactPattern pat3 = new FactPattern("People");
+ comp1.addFactPattern( pat2 );
+ comp1.addFactPattern( pat3 );
+
+ model.addLhsItem( comp1 );
+
+ // converting into descr
+ RuleDescr rule = converter.toDescr( model, "" );
+ // checking Attributes
+ List attributes = rule.getAttributes();
+ assertEquals( 2, attributes.size() );
+ AttributeDescr salienceDescr = (AttributeDescr) attributes.get( 0 );
+ assertEquals( salience.attributeName, salienceDescr.getName() );
+ assertEquals( salience.value, salienceDescr.getValue() );
+ AttributeDescr noloopDescr = (AttributeDescr) attributes.get( 1 );
+ assertEquals( noloop.attributeName, noloopDescr.getName() );
+ assertEquals( "true", noloopDescr.getValue() );
+
+ // checking LHS patterns
+ ColumnDescr col1 = (ColumnDescr) rule.getLhs().getDescrs().get( 0 );
+ assertEquals( pat1.boundName, col1.getIdentifier() );
+ assertEquals( pat1.factType, col1.getObjectType() );
+ FieldConstraintDescr field = (FieldConstraintDescr) col1.getDescrs().get( 0 );
+ assertEquals( pat1.constraints[0].fieldName, field.getFieldName());
+ LiteralRestrictionDescr lit = (LiteralRestrictionDescr) field.getRestrictions().get( 0 );
+ assertEquals( pat1.constraints[0].operator, lit.getEvaluator());
+ assertEquals( pat1.constraints[0].value, lit.getText());
+
+ OrDescr or1 = (OrDescr) rule.getLhs().getDescrs().get( 1 );
+ ColumnDescr col2 = (ColumnDescr) or1.getDescrs().get( 0 );
+ assertEquals( pat2.factType, col2.getObjectType() );
+
+ ColumnDescr col3 = (ColumnDescr) or1.getDescrs().get( 1 );
+ assertEquals( pat3.factType, col3.getObjectType() );
+
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-jbrms/src/test/java/org/drools/brms/server/converter/BRXMLToDescrConverterTest.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list