[jboss-svn-commits] JBL Code SVN: r31939 - labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Mar 4 10:23:13 EST 2010


Author: eaa
Date: 2010-03-04 10:23:13 -0500 (Thu, 04 Mar 2010)
New Revision: 31939

Modified:
   labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java
Log:
Added project dependency to drools-verifier
Added test cases that use verifier.
Fixed available constraints to generate well-formed verifier's rules

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-04 14:15:56 UTC (rev 31938)
+++ labs/jbossrules/branches/factsConstraints_baunax_esteban/drools-factconstraint/src/main/java/org/drools/factconstraint/DefaultConstraintImpl.java	2010-03-04 15:23:13 UTC (rev 31939)
@@ -13,68 +13,121 @@
 
     private String factType;
     private String fieldName;
-    private Map<String,Object> arguments = new HashMap<String, Object>();
+    private Map<String, Object> arguments = new HashMap<String, Object>();
+    protected String verifierPackageTemplate = "";
+    protected String verifierImportsTemplate = "";
+    protected String verifierGlobalsTemplate = "";
+    protected String verifierRuleNameTemplate = "";
+    protected String verifierRuleWhenTemplate = "";
+    protected String verifierFieldPatternTemplate = "";
+    protected String verifierRestrictiondPatternTemplate = "";
+    protected String verifierRuleThenTemplate = "";
+    protected String verifierActionTemplate = "";
+    protected String verifierRuleEndTemplate = "";
 
-    private String verifierRuleTemplate;
+    /**
+     * Fills the rule's template sections. Subclasses of DefaultConstraintImpl
+     * can modify these templates, use the ${} or both.
+     */
+    public DefaultConstraintImpl() {
 
-    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";
+        this.verifierPackageTemplate += "package org.drools.verifier.consequence\n";
+
+        this.verifierImportsTemplate += "import org.drools.verifier.components.*;\n";
+        this.verifierImportsTemplate += "import java.util.Map;\n";
+        this.verifierImportsTemplate += "import java.util.HashMap;\n";
+        this.verifierImportsTemplate += "import org.drools.verifier.report.components.VerifierMessage;\n";
+        this.verifierImportsTemplate += "import org.drools.verifier.data.VerifierReport;\n";
+        this.verifierImportsTemplate += "import org.drools.verifier.report.components.Severity;\n";
+        this.verifierImportsTemplate += "import org.drools.verifier.report.components.MessageType;\n";
+
+
+        this.verifierGlobalsTemplate += "global VerifierReport result;\n";
+
+
+        this.verifierRuleNameTemplate += "rule \"${ruleName}\"\n";
+
+        this.verifierRuleWhenTemplate += "  when\n";
+
+        this.verifierFieldPatternTemplate += "      $field :Field(\n";
+        this.verifierFieldPatternTemplate += "          objectTypeName == \"${factType}\",\n";
+        this.verifierFieldPatternTemplate += "          name == \"${fieldName}\"\n";
+        this.verifierFieldPatternTemplate += "      )\n";
+
+        this.verifierRestrictiondPatternTemplate += "      $restriction :LiteralRestriction(\n";
+        this.verifierRestrictiondPatternTemplate += "            fieldGuid == $field.guid,\n";
+        this.verifierRestrictiondPatternTemplate += "            ${constraints}\n";
+        this.verifierRestrictiondPatternTemplate += "      )\n";
+
+        this.verifierRuleThenTemplate += "  then\n";
+
+        this.verifierActionTemplate += "      Map<String,String> impactedRules = new HashMap<String,String>();\n";
+        this.verifierActionTemplate += "      impactedRules.put( $restriction.getRuleGuid(), $restriction.getRuleName());\n";
+        this.verifierActionTemplate += "      result.add(new VerifierMessage(\n";
+        //this.verifierActionTemplate += "                        impactedRules,\n";
+        this.verifierActionTemplate += "                        Severity.ERROR,\n";
+        this.verifierActionTemplate += "                        MessageType.NOT_SPECIFIED,\n";
+        this.verifierActionTemplate += "                        $restriction,\n";
+        this.verifierActionTemplate += "                        \"${message}\" ) );\n";
+
+        //this.verifierActionTemplate += "      System.out.println(\"doubleValue= \"+$restriction.getDoubleValue());\n";
+        //this.verifierActionTemplate += "      System.out.println(\"intValue= \"+$restriction.getIntValue());\n";
+
+        this.verifierRuleEndTemplate += "end\n";
     }
 
-    protected String createVerifierRuleTemplate(String ruleName, List<String> constraints, String message){
-        if (ruleName == null){
-            ruleName = "Constraint_rule_";
-        }
-        ruleName+=UUID.randomUUID().toString();
+    private String concatRule() {
+        StringBuilder rule = new StringBuilder();
 
-        if (constraints == null || constraints.isEmpty()){
-            //if there are no constraints, no rule should be generated.
-            return null;
-        }
+        rule.append(verifierPackageTemplate);
+        rule.append(verifierImportsTemplate);
+        rule.append(verifierGlobalsTemplate);
+        rule.append(verifierRuleNameTemplate);
+        rule.append(verifierRuleWhenTemplate);
+        rule.append(verifierFieldPatternTemplate);
+        rule.append(verifierRestrictiondPatternTemplate);
+        rule.append(verifierRuleThenTemplate);
+        rule.append(verifierActionTemplate);
+        rule.append(verifierRuleEndTemplate);
 
-        String constraintsTxt = "";
-        String delimiter = "";
-        for (String c : constraints) {
-            constraintsTxt+=delimiter+c+"\n";
-            if (delimiter.equals("")){
-                delimiter = ",";
-            }
+        return rule.toString();
+
+    }
+
+    protected String createVerifierRuleTemplate(String ruleName, List<String> constraints, String message) {
+        if (ruleName == null) {
+            ruleName = "Constraint_rule_";
         }
+        ruleName += UUID.randomUUID().toString();
 
-        String rule = this.verifierRuleTemplate.replace("${ruleName}", ruleName);
+        String rule = this.concatRule().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);
+        if (constraints != null && !constraints.isEmpty()) {
+            String constraintsTxt = "";
+            String delimiter = "";
+            for (String c : constraints) {
+                constraintsTxt += delimiter + c + "\n";
+                if (delimiter.equals("")) {
+                    delimiter = ",";
+                }
+            }
+            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.");
+    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.");
+        if (value == null) {
+            throw new ArgumentNotSetException("The argument " + key + " is null.");
         }
 
         return value;
@@ -118,6 +171,4 @@
     public String getVerifierRule() {
         return null;
     }
-
-
 }



More information about the jboss-svn-commits mailing list