[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