[jboss-svn-commits] JBL Code SVN: r31917 - in labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src: main/java/org/drools/factconstraint/predefined and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 3 13:44:25 EST 2010


Author: eaa
Date: 2010-03-03 13:44:24 -0500 (Wed, 03 Mar 2010)
New Revision: 31917

Added:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java
Modified:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/IntegerConstraint.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java
Log:
Fixed generated Verifier rule.
DefaultConstraintImpl is now abstract
DefaultConstraintImpl now has a template of the Verifier rule that subclasses can use.
Implemented new NotNull Constraint 

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java	2010-03-03 17:13:55 UTC (rev 31916)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java	2010-03-03 18:44:24 UTC (rev 31917)
@@ -1,21 +1,71 @@
 package org.drools.factconstraint;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 /**
  *
  * @author esteban.aliverti at gmail.com
  */
-public class DefaultConstraintImpl implements Constraint {
+public abstract class DefaultConstraintImpl implements Constraint {
 
     private String factType;
     private String fieldName;
     private Map<String,Object> arguments = new HashMap<String, Object>();
 
+    private String verifierRuleTemplate;
+
     public DefaultConstraintImpl(){
+        this.verifierRuleTemplate = "";
+        this.verifierRuleTemplate += "rule \"${ruleName}\"\n";
+        this.verifierRuleTemplate += "  when\n";
+        this.verifierRuleTemplate += "      $restriction :Restriction(\n";
+        this.verifierRuleTemplate += "        objectTypeName == \"${factType}\",\n";
+        this.verifierRuleTemplate += "        name == \"${fieldName}\",\n";
+        this.verifierRuleTemplate += "        ${constraints}\n";
+        this.verifierRuleTemplate += "      )\n";
+        this.verifierRuleTemplate += "  then\n";
+        this.verifierRuleTemplate += "      Map<String,String> impactedRules = new HashMap<String,String>();\n";
+        this.verifierRuleTemplate += "      impactedRules.put( $restriction.getRuleGuid(), $restriction.getRuleName());\n";
+        this.verifierRuleTemplate += "      result.add(new VerifierMessage(\n";
+        this.verifierRuleTemplate += "                        impactedRules,\n";
+        this.verifierRuleTemplate += "                        Severity.WARNING,\n";
+        this.verifierRuleTemplate += "                        $restriction,\n";
+        this.verifierRuleTemplate += "                        \"${message}\" ) );\n";
+        this.verifierRuleTemplate += "end\n";
     }
 
+    protected String createVerifierRuleTemplate(String ruleName, List<String> constraints, String message){
+        if (ruleName == null){
+            ruleName = "Constraint_rule_";
+        }
+        ruleName+=UUID.randomUUID().toString();
+
+        if (constraints == null || constraints.isEmpty()){
+            //if there are no constraints, no rule should be generated.
+            return null;
+        }
+
+        String constraintsTxt = "";
+        String delimiter = "";
+        for (String c : constraints) {
+            constraintsTxt+=delimiter+c+"\n";
+            if (delimiter.equals("")){
+                delimiter = ",";
+            }
+        }
+
+        String rule = this.verifierRuleTemplate.replace("${ruleName}", ruleName);
+        rule = rule.replace("${factType}", this.getFactType());
+        rule = rule.replace("${fieldName}", this.getFieldName());
+        rule = rule.replace("${constraints}", constraintsTxt);
+        rule = rule.replace("${message}", (message == null || message.equals(""))?"Invalid Value":message);
+
+        return rule;
+    }
+
     protected Object getMandatoryArgument(String key) throws ArgumentNotSetException{
         if (!this.arguments.containsKey(key)){
             throw new ArgumentNotSetException("The argument "+key+" doesn't exist.");

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/IntegerConstraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/IntegerConstraint.java	2010-03-03 17:13:55 UTC (rev 31916)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/IntegerConstraint.java	2010-03-03 18:44:24 UTC (rev 31917)
@@ -1,6 +1,7 @@
 package org.drools.factconstraint.predefined;
 
-import java.util.UUID;
+import java.util.ArrayList;
+import java.util.List;
 import org.drools.factconstraint.DefaultConstraintImpl;
 import org.drools.factconstraint.ValidationResult;
 
@@ -10,36 +11,16 @@
  */
 public class IntegerConstraint extends DefaultConstraintImpl {
 
-    private String validationRule;
 
     public IntegerConstraint(){
     }
 
     @Override
     public String getVerifierRule() {
-        if (this.validationRule == null) {
-            StringBuilder builder = new StringBuilder();
-            builder.append("rule \"Integer Constraint ");
-            builder.append(this.getFactType());
-            builder.append(".");
-            builder.append(this.getFieldName());
-            builder.append(".");
-            builder.append(UUID.randomUUID().toString());
-            builder.append("\"\n");
-            builder.append("\t at verifying_scopes(knowledge-package, decision-table)\n");
-            builder.append("\twhen\n");
+        List<String> constraints = new ArrayList<String>();
+        constraints.add("valueType != Field.INT");
 
-            
-            builder.append("\t\t$f :Field( fieldType == Field.INT )\n");
-
-            builder.append("\tthen\n");
-
-            
-            builder.append("end\n");
-
-            this.validationRule = builder.toString();
-        }
-        return this.validationRule;
+        return this.createVerifierRuleTemplate("Integer_Field_Constraint", constraints, "The value must be an integer"); //I18N
     }
 
     @Override

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/NotNullConstraint.java	2010-03-03 18:44:24 UTC (rev 31917)
@@ -0,0 +1,40 @@
+package org.drools.factconstraint.predefined;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.drools.factconstraint.DefaultConstraintImpl;
+import org.drools.factconstraint.ValidationResult;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class NotNullConstraint extends DefaultConstraintImpl {
+
+
+    public NotNullConstraint(){
+    }
+
+    @Override
+    public String getVerifierRule() {
+        List<String> constraints = new ArrayList<String>();
+        constraints.add("value == null");
+
+        return this.createVerifierRuleTemplate("Not_null_Field_Constraint", constraints, "The value could not be null"); //I18N
+    }
+
+    @Override
+    public ValidationResult validate(Object value) {
+        ValidationResult result = new ValidationResult();
+
+        if (value == null){
+            result.setSuccess(false);
+            result.setMessage("The value could not be null"); //TODO: I18N
+        }else {
+            result.setSuccess(true);
+        }
+
+        return result;
+    }
+    
+}

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java	2010-03-03 17:13:55 UTC (rev 31916)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java	2010-03-03 18:44:24 UTC (rev 31917)
@@ -1,6 +1,8 @@
 package org.drools.factconstraint.predefined;
 
-import java.util.UUID;
+import java.util.ArrayList;
+import java.util.List;
+import org.drools.factconstraint.ArgumentNotSetException;
 import org.drools.factconstraint.DefaultConstraintImpl;
 import org.drools.factconstraint.ValidationResult;
 
@@ -13,7 +15,6 @@
     public static final String RANGE_CONSTRAINT_MIN = "Min. value";
     public static final String RANGE_CONSTRAINT_MAX = "Max. value";
 
-    private String validationRule;
 
     public RangeConstraint(){
         //set default values
@@ -23,29 +24,16 @@
 
     @Override
     public String getVerifierRule() {
-        if (this.validationRule == null) {
-            StringBuilder builder = new StringBuilder();
-            builder.append("rule \"Integer Constraint ");
-            builder.append(this.getFactType());
-            builder.append(".");
-            builder.append(this.getFieldName());
-            builder.append(".");
-            builder.append(UUID.randomUUID().toString());
-            builder.append("\"\n");
-            builder.append("\t at verifying_scopes(knowledge-package, decision-table)\n");
-            builder.append("\twhen\n");
 
-
-            builder.append("\t\t$f :Field( fieldType == Field.INT )\n");
-
-            builder.append("\tthen\n");
-
-
-            builder.append("end\n");
-
-            this.validationRule = builder.toString();
+        try {
+            double min = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MIN).toString());
+            double max = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MAX).toString());
+            List<String> constraints = new ArrayList<String>();
+            constraints.add("value < " + min + " || > " + max);
+            return this.createVerifierRuleTemplate("Range_Field_Constraint", constraints, "The value must be an integer"); //I18N
+        } catch (ArgumentNotSetException ex) {
+            throw new IllegalStateException("Some arguments are missing");
         }
-        return this.validationRule;
     }
 
     @Override

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/NotNullConstraintTest.java	2010-03-03 18:44:24 UTC (rev 31917)
@@ -0,0 +1,59 @@
+package org.drools.factconstraint;
+
+import org.drools.factconstraint.predefined.IntegerConstraint;
+import org.drools.factconstraint.predefined.NotNullConstraint;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class NotNullConstraintTest {
+
+    @Test
+    public void testValidConstraint(){
+
+        Constraint cons = new NotNullConstraint();
+        cons.setFactTYpe("some.fact.Type");
+        cons.setFieldName("someField");
+
+        System.out.println("Validation Rule:\n"+cons.getVerifierRule()+"\n\n");
+
+
+        ValidationResult result = cons.validate(new Object());
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate("");
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate("ABC");
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(new Long("12"));
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(12L);
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(12.8);
+        Assert.assertTrue(result.isSuccess());
+
+
+
+    }
+
+    @Test
+    public void testInvalidConstraint(){
+
+        Constraint cons = new IntegerConstraint();
+        cons.setFactTYpe("some.fact.Type");
+        cons.setFieldName("someField");
+
+        ValidationResult result = cons.validate(null);
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+    }
+
+}



More information about the jboss-svn-commits mailing list