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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 3 09:54:15 EST 2010


Author: eaa
Date: 2010-03-03 09:54:14 -0500 (Wed, 03 Mar 2010)
New Revision: 31911

Added:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ArgumentNotSetException.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/
   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
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/IntegerConstraintTest.java
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java
Modified:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/Constraint.java
   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/ValidationResult.java
Log:
Created IntegerConstraint and RangeConstraint implementations
Added tests for new classes


Property changes on: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint
___________________________________________________________________
Name: svn:ignore
   + target


Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml	2010-03-03 12:33:45 UTC (rev 31910)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/pom.xml	2010-03-03 14:54:14 UTC (rev 31911)
@@ -14,7 +14,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>3.8.1</version>
+      <version>4.7</version>
       <scope>test</scope>
     </dependency>
   </dependencies>

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ArgumentNotSetException.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ArgumentNotSetException.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ArgumentNotSetException.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -0,0 +1,16 @@
+package org.drools.factconstraint;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class ArgumentNotSetException extends Exception {
+
+    public ArgumentNotSetException(String message) {
+        super(message);
+    }
+
+    public ArgumentNotSetException() {
+    }
+
+}

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/Constraint.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/Constraint.java	2010-03-03 12:33:45 UTC (rev 31910)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/Constraint.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -14,6 +14,4 @@
     public ValidationResult validate(Object value);
     public String getValidationRule();
 
-    public String getMessage();
-
 }

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 12:33:45 UTC (rev 31910)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -13,11 +13,23 @@
     private String fieldName;
     private Map<String,Object> arguments = new HashMap<String, Object>();
 
-    public DefaultConstraintImpl(String factType, String fieldName) {
-        this.factType = factType;
-        this.fieldName = fieldName;
+    public DefaultConstraintImpl(){
     }
 
+    protected Object getMandatoryArgument(String key) throws ArgumentNotSetException{
+        if (!this.arguments.containsKey(key)){
+            throw new ArgumentNotSetException("The argument "+key+" doesn't exist.");
+        }
+
+        Object value = this.getArgumentValue(key);
+
+        if (value == null){
+            throw new ArgumentNotSetException("The argument "+key+" is null.");
+        }
+
+        return value;
+    }
+
     public void setFactTYpe(String factType) {
         this.factType = factType;
     }
@@ -26,6 +38,14 @@
         this.fieldName = fieldName;
     }
 
+    public String getFactType() {
+        return factType;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
     public String[] getArgumentKeys() {
         return this.arguments.keySet().toArray(new String[this.arguments.size()]);
     }
@@ -49,8 +69,5 @@
         return null;
     }
 
-    public String getMessage() {
-        return "";
-    }
 
 }

Modified: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ValidationResult.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ValidationResult.java	2010-03-03 12:33:45 UTC (rev 31910)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/ValidationResult.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -6,6 +6,7 @@
  */
 public class ValidationResult {
     private boolean success;
+    private String message;
 
     public boolean isSuccess() {
         return success;
@@ -15,5 +16,15 @@
         this.success = success;
     }
 
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
     
+
+    
 }

Added: 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	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/IntegerConstraint.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -0,0 +1,70 @@
+package org.drools.factconstraint.predefined;
+
+import java.util.UUID;
+import org.drools.factconstraint.DefaultConstraintImpl;
+import org.drools.factconstraint.ValidationResult;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class IntegerConstraint extends DefaultConstraintImpl {
+
+    private String validationRule;
+
+    public IntegerConstraint(){
+    }
+
+    @Override
+    public String getValidationRule() {
+        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();
+        }
+        return this.validationRule;
+    }
+
+    @Override
+    public ValidationResult validate(Object value) {
+        ValidationResult result = new ValidationResult();
+
+        if (value == null){
+            result.setSuccess(false);
+            result.setMessage("The value is null"); //TODO: I18N
+        }else if (value instanceof Integer){
+            result.setSuccess(true);
+        }else if (value instanceof String){
+            try{
+                Integer.parseInt((String)value);
+                result.setSuccess(true);
+            } catch(NumberFormatException ex){
+                result.setSuccess(false);
+                result.setMessage(ex.getMessage()); //TODO: I18N
+            }
+        }else{
+            result.setSuccess(false);
+            result.setMessage("Invalid value type "+value.getClass().getName()); //TODO: I18N
+        }
+
+        return result;
+    }
+    
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/predefined/RangeConstraint.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -0,0 +1,79 @@
+package org.drools.factconstraint.predefined;
+
+import java.util.UUID;
+import org.drools.factconstraint.DefaultConstraintImpl;
+import org.drools.factconstraint.ValidationResult;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class RangeConstraint extends DefaultConstraintImpl {
+
+    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
+        this.setArgumentValue(RANGE_CONSTRAINT_MIN, 0);
+        this.setArgumentValue(RANGE_CONSTRAINT_MAX, 0);
+    }
+
+    @Override
+    public String getValidationRule() {
+        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();
+        }
+        return this.validationRule;
+    }
+
+    @Override
+    public ValidationResult validate(Object value) {
+        ValidationResult result = new ValidationResult();
+
+        try{
+            if (value == null || !(value instanceof Number || value instanceof String )){
+                result.setSuccess(false);
+                if (value == null) {
+                    result.setMessage("The value is null"); //TODO: I18N
+                }else{
+                    result.setMessage("Invalid value type "+value.getClass().getName()); //TODO: I18N
+                }
+            }else{
+                double min = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MIN).toString());
+                double max = Double.parseDouble(this.getMandatoryArgument(RANGE_CONSTRAINT_MAX).toString());
+                double d = Double.parseDouble(value.toString());
+                result.setSuccess((d > min && d < max));
+                if (!result.isSuccess()){
+                    result.setMessage("The value should be between "+min+" and "+max); //TODO: I18N
+                }
+            }
+        }catch (Throwable t){
+            result.setSuccess(false);
+            result.setMessage(t.getMessage()); //TODO: I18N
+        }
+
+        return result;
+    }
+}

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

Added: labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java
===================================================================
--- labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java	                        (rev 0)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/test/java/org/drools/factconstraint/RangeConstraintTest.java	2010-03-03 14:54:14 UTC (rev 31911)
@@ -0,0 +1,85 @@
+package org.drools.factconstraint;
+
+import org.drools.factconstraint.predefined.RangeConstraint;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author esteban.aliverti at gmail.com
+ */
+public class RangeConstraintTest {
+
+    @Test
+    public void testValidConstraint(){
+
+        Constraint cons = new RangeConstraint();
+        cons.setFactTYpe("some.fact.Type");
+        cons.setFieldName("someField");
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, -0.5);
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 100);
+
+        System.out.println("Validation Rule:\n"+cons.getValidationRule()+"\n\n");
+
+        ValidationResult result = cons.validate(12);
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(new Integer("12"));
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate("12");
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(0.6);
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate(new Float("-0.3"));
+        Assert.assertTrue(result.isSuccess());
+
+        result = cons.validate("90.76");
+        Assert.assertTrue(result.isSuccess());
+
+    }
+
+    @Test
+    public void testInvalidConstraint(){
+
+        Constraint cons = new RangeConstraint();
+        cons.setFactTYpe("some.fact.Type");
+        cons.setFieldName("someField");
+
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MIN, -0.5);
+        cons.setArgumentValue(RangeConstraint.RANGE_CONSTRAINT_MAX, 100);
+
+        ValidationResult result = cons.validate(new Object());
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate(null);
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate("");
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate("ABC");
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate(new Long("-100"));
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate(-0.5);
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+        result = cons.validate(100);
+        Assert.assertFalse(result.isSuccess());
+        System.out.println("Message: "+result.getMessage());
+
+
+    }
+
+}



More information about the jboss-svn-commits mailing list