[jboss-svn-commits] JBL Code SVN: r5200 - labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 20 12:28:30 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-07-20 12:28:28 -0400 (Thu, 20 Jul 2006)
New Revision: 5200

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
Log:
JBRULES-333 Allow && and || connectives for field constraints
-Hooking up new Restriction descrs

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-07-20 16:24:31 UTC (rev 5199)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-07-20 16:28:28 UTC (rev 5200)
@@ -413,19 +413,10 @@
             if ( object instanceof FieldBindingDescr ) {
                 build( column,
                        (FieldBindingDescr) object );
-            } else if ( object instanceof LiteralDescr ) {
+            } else if ( object instanceof FieldConstraintDescr ) {
                 build( column,
-                       (LiteralDescr) object );
-            } else if ( object instanceof VariableDescr ) {
-                build( column,
-                       (VariableDescr) object );
-            } else if ( object instanceof ReturnValueDescr ) {
-                build( column,
-                       (ReturnValueDescr) object );
-            } else if ( object instanceof PredicateDescr ) {
-                build( column,
-                       (PredicateDescr) object );
-            }
+                       (FieldConstraintDescr) object );
+            } 
         }
         return column;
     }
@@ -436,16 +427,19 @@
         for ( final Iterator it = fieldConstraintDescr.getRestrictions().iterator(); it.hasNext(); ) {
             final Object object = it.next();
             if ( object instanceof FieldBindingDescr ) {
-                build( fieldConstraintDescr,
+                build( column,
                        (FieldBindingDescr) object );
             } else if ( object instanceof LiteralRestrictionDescr ) {
-                build( fieldConstraintDescr,
+                build( column,
+                       fieldConstraintDescr,
                        (LiteralRestrictionDescr) object );
             } else if ( object instanceof VariableRestrictionDescr ) {
-                build( fieldConstraintDescr,
+                build( column,
+                       fieldConstraintDescr,
                        (VariableRestrictionDescr) object );
             } else if ( object instanceof ReturnValueRestrictionDescr ) {
-                build( fieldConstraintDescr,
+                build( column,
+                       fieldConstraintDescr,
                        (ReturnValueRestrictionDescr) object );
             } //else if ( object instanceof PredicateDescr ) {
 //                build( column,
@@ -488,38 +482,39 @@
         }
     }
 
-    private void build(final FieldConstraintDescr fieldConstraintDescr,
+    private void build(final Column column,
+                       final FieldConstraintDescr fieldConstraintDescr,
                        final VariableRestrictionDescr variableRestrictionDescr) {
-        if ( variableDescr.getIdentifier() == null || variableDescr.getIdentifier().equals( "" ) ) {
+        if ( variableRestrictionDescr.getIdentifier() == null || variableRestrictionDescr.getIdentifier().equals( "" ) ) {
             this.errors.add( new RuleError( this.rule,
-                                            variableDescr,
+                                            variableRestrictionDescr,
                                             null,
-                                            "Identifier not defined for binding field '" + variableDescr.getFieldName() + "'" ) );
+                                            "Identifier not defined for binding field '" + fieldConstraintDescr.getFieldName() + "'" ) );
             return;
         }
 
         final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
 
-        final FieldExtractor extractor = getFieldExtractor( variableDescr,
+        final FieldExtractor extractor = getFieldExtractor( variableRestrictionDescr,
                                                             clazz,
-                                                            variableDescr.getFieldName() );
+                                                            fieldConstraintDescr.getFieldName() );
         if ( extractor == null ) {
             return;
         }
 
-        final Declaration declaration = (Declaration) this.declarations.get( variableDescr.getIdentifier() );
+        final Declaration declaration = (Declaration) this.declarations.get( variableRestrictionDescr.getIdentifier() );
 
         if ( declaration == null ) {
             this.errors.add( new RuleError( this.rule,
-                                            variableDescr,
+                                            variableRestrictionDescr,
                                             null,
-                                            "Unable to return Declaration for identifier '" + variableDescr.getIdentifier() + "'" ) );
+                                            "Unable to return Declaration for identifier '" + variableRestrictionDescr.getIdentifier() + "'" ) );
             return;
         }
 
-        final Evaluator evaluator = getEvaluator( variableDescr,
+        final Evaluator evaluator = getEvaluator( variableRestrictionDescr,
                                                   extractor.getObjectType().getValueType(),
-                                                  variableDescr.getEvaluator() );
+                                                  variableRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return;
         }
@@ -529,54 +524,55 @@
                                                            evaluator ) );
     }
 
-    private void build(final FieldConstraintDescr fieldConstraintDescr,
+    private void build(final Column column,
+                       final FieldConstraintDescr fieldConstraintDescr,
                        final LiteralRestrictionDescr literalRestrictionDescr) {
 
         final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
 
-        final FieldExtractor extractor = getFieldExtractor( literalDescr,
+        final FieldExtractor extractor = getFieldExtractor( literalRestrictionDescr,
                                                             clazz,
-                                                            literalDescr.getFieldName() );
+                                                            fieldConstraintDescr.getFieldName() );
         if ( extractor == null ) {
             return;
         }
 
         FieldValue field = null;
-        if ( literalDescr.isStaticFieldValue() ) {
-            final int lastDot = literalDescr.getText().lastIndexOf( '.' );
-            final String className = literalDescr.getText().substring( 0,
+        if ( literalRestrictionDescr.isStaticFieldValue() ) {
+            final int lastDot = literalRestrictionDescr.getText().lastIndexOf( '.' );
+            final String className = literalRestrictionDescr.getText().substring( 0,
                                                                        lastDot );
-            final String fieldName = literalDescr.getText().substring( lastDot + 1 );
+            final String fieldName = literalRestrictionDescr.getText().substring( lastDot + 1 );
             try {
                 final Class staticClass = this.typeResolver.resolveType( className );
                 field = new FieldImpl( staticClass.getField( fieldName ).get( null ) );
             } catch ( final ClassNotFoundException e ) {
                 this.errors.add( new RuleError( this.rule,
-                                                literalDescr,
+                                                literalRestrictionDescr,
                                                 e,
                                                 e.getMessage() ) );
             } catch ( final Exception e ) {
                 this.errors.add( new RuleError( this.rule,
-                                                literalDescr,
+                                                literalRestrictionDescr,
                                                 e,
-                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalDescr.getText() + "'" ) );
+                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
             }
 
         } else {
             try {
-                field = FieldFactory.getFieldValue( literalDescr.getText(),
+                field = FieldFactory.getFieldValue( literalRestrictionDescr.getText(),
                                                     extractor.getObjectType().getValueType() );
             } catch ( final Exception e ) {
                 this.errors.add( new RuleError( this.rule,
-                                                literalDescr,
+                                                literalRestrictionDescr,
                                                 e,
-                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalDescr.getText() + "'" ) );
+                                                "Unable to create a Field value of type  '" + extractor.getObjectType().getValueType() + "' and value '" + literalRestrictionDescr.getText() + "'" ) );
             }
         }
 
-        final Evaluator evaluator = getEvaluator( literalDescr,
+        final Evaluator evaluator = getEvaluator( literalRestrictionDescr,
                                                   extractor.getObjectType().getValueType(),
-                                                  literalDescr.getEvaluator() );
+                                                  literalRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return;
         }
@@ -587,12 +583,13 @@
     }
 
     private void build(final Column column,
-                       final ReturnValueDescr returnValueDescr) {
+                       final FieldConstraintDescr fieldConstraintDescr,
+                       final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
         final String classMethodName = "returnValue" + this.counter++;
-        returnValueDescr.setClassMethodName( classMethodName );
+        returnValueRestrictionDescr.setClassMethodName( classMethodName );
 
-        final List[] usedIdentifiers = getUsedIdentifiers( returnValueDescr,
-                                                           returnValueDescr.getText() );
+        final List[] usedIdentifiers = getUsedIdentifiers( returnValueRestrictionDescr,
+                                                           returnValueRestrictionDescr.getText() );
 
         final Declaration[] declarations = new Declaration[usedIdentifiers[0].size()];
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -600,16 +597,16 @@
         }
 
         final Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
-        final FieldExtractor extractor = getFieldExtractor( returnValueDescr,
+        final FieldExtractor extractor = getFieldExtractor( returnValueRestrictionDescr,
                                                             clazz,
-                                                            returnValueDescr.getFieldName() );
+                                                            fieldConstraintDescr.getFieldName() );
         if ( extractor == null ) {
             return;
         }
 
-        final Evaluator evaluator = getEvaluator( returnValueDescr,
+        final Evaluator evaluator = getEvaluator( returnValueRestrictionDescr,
                                                   extractor.getObjectType().getValueType(),
-                                                  returnValueDescr.getEvaluator() );
+                                                  returnValueRestrictionDescr.getEvaluator() );
         if ( evaluator == null ) {
             return;
         }
@@ -624,12 +621,12 @@
         setStringTemplateAttributes( st,
                                      declarations,
                                      (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ),
-                                     returnValueDescr.getText() );
+                                     returnValueRestrictionDescr.getText() );
 
         st.setAttribute( "methodName",
                          classMethodName );
 
-        final String returnValueText = RuleBuilder.functionFixer.fix( returnValueDescr.getText() );
+        final String returnValueText = RuleBuilder.functionFixer.fix( returnValueRestrictionDescr.getText() );
         st.setAttribute( "text",
                          returnValueText );
 
@@ -649,7 +646,7 @@
         setStringTemplateAttributes( st,
                                      declarations,
                                      (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ),
-                                     returnValueDescr.getText() );
+                                     returnValueRestrictionDescr.getText() );
 
         st.setAttribute( "hashCode",
                          returnValueText.hashCode() );
@@ -660,7 +657,7 @@
         this.invokerLookups.put( invokerClassName,
                                  returnValueConstraint );
         this.descrLookups.put( invokerClassName,
-                               returnValueDescr );
+                               returnValueRestrictionDescr );
     }
 
     private void build(final Column column,




More information about the jboss-svn-commits mailing list