[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