[jboss-svn-commits] JBL Code SVN: r18282 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common: swingui and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Feb 3 09:40:54 EST 2008


Author: ge0ffrey
Date: 2008-02-03 09:40:52 -0500 (Sun, 03 Feb 2008)
New Revision: 18282

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/ScoreDetail.java
Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.java
Log:
scoreDetail now shows numer of occurences too

Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/ScoreDetail.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/ScoreDetail.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/ScoreDetail.java	2008-02-03 14:40:52 UTC (rev 18282)
@@ -0,0 +1,93 @@
+package org.drools.solver.examples.common.business;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.solver.core.score.constraint.ConstraintType;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ScoreDetail implements Comparable<ScoreDetail> {
+
+    private String ruleId;
+    private ConstraintType constraintType;
+    private double scoreTotal = 0.0;
+    private int occurenceSize = 0;
+
+    public ScoreDetail(String ruleId, ConstraintType constraintType) {
+        this.ruleId = ruleId;
+        this.constraintType = constraintType;
+    }
+
+    public String getRuleId() {
+        return ruleId;
+    }
+
+    public void setRuleId(String ruleId) {
+        this.ruleId = ruleId;
+    }
+
+    public ConstraintType getConstraintType() {
+        return constraintType;
+    }
+
+    public void setConstraintType(ConstraintType constraintType) {
+        this.constraintType = constraintType;
+    }
+
+    public double getScoreTotal() {
+        return scoreTotal;
+    }
+
+    public void setScoreTotal(double scoreTotal) {
+        this.scoreTotal = scoreTotal;
+    }
+
+    public int getOccurenceSize() {
+        return occurenceSize;
+    }
+
+    public void setOccurenceSize(int occurenceSize) {
+        this.occurenceSize = occurenceSize;
+    }
+
+
+    public void addOccurenceScore(double occurenceScore) {
+        scoreTotal += occurenceScore;
+        occurenceSize++;
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        } else if (o instanceof ScoreDetail) {
+            ScoreDetail other = (ScoreDetail) o;
+            return new EqualsBuilder()
+                    .append(ruleId, other.ruleId)
+                    .append(constraintType, other.constraintType)
+                    .isEquals();
+        } else {
+            return false;
+        }
+    }
+
+    public int hashCode() {
+        return new HashCodeBuilder()
+                .append(ruleId)
+                .append(constraintType)
+                .toHashCode();
+    }
+
+    public int compareTo(ScoreDetail other) {
+        return new CompareToBuilder()
+                .append(constraintType, other.constraintType)
+                .append(ruleId, other.ruleId)
+                .toComparison();
+    }
+
+    public String toString() {
+        return ruleId + "/" + constraintType + "=" + scoreTotal + "(" + occurenceSize + ")";
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java	2008-02-03 11:49:57 UTC (rev 18281)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java	2008-02-03 14:40:52 UTC (rev 18282)
@@ -2,12 +2,13 @@
 
 import java.io.File;
 import java.io.FileFilter;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 import org.drools.StatefulSession;
 import org.drools.base.ClassObjectFilter;
@@ -89,32 +90,21 @@
         return evaluationHandler.fireAllRulesAndCalculateStepScore();
     }
 
-    public Map<String, Double> getConstraintScoreMap() {
-        Map<String, Double> constraintScoreMap = new TreeMap<String, Double>();
+    public List<ScoreDetail> getConstraintScoreMap() {
+        Map<String, ScoreDetail> scoreDetailMap = new HashMap<String, ScoreDetail>();
         StatefulSession statefulSession = evaluationHandler.getStatefulSession();
         if (statefulSession == null) {
-            return Collections.emptyMap();
+            return Collections.emptyList();
         }
         Iterator<ConstraintOccurrence> it = statefulSession.iterateObjects(
                 new ClassObjectFilter(ConstraintOccurrence.class));
-        for (; it.hasNext();) {
+        while (it.hasNext()) {
             ConstraintOccurrence occurrence = it.next();
-            String extendedConstraintId;
-            switch (occurrence.getConstraintType()) {
-                case NEGATIVE_HARD:
-                    extendedConstraintId = "HARD";
-                    break;
-                case NEGATIVE_SOFT:
-                    extendedConstraintId = "SOFT";
-                    break;
-                case POSITIVE:
-                    extendedConstraintId = "POSITIVE";
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown ConstraintType: " + occurrence.getConstraintType());
+            ScoreDetail scoreDetail = scoreDetailMap.get(occurrence.getRuleId());
+            if (scoreDetail == null) {
+                scoreDetail = new ScoreDetail(occurrence.getRuleId(), occurrence.getConstraintType());
+                scoreDetailMap.put(occurrence.getRuleId(), scoreDetail);
             }
-            extendedConstraintId += " " + occurrence.getRuleId();
-            Double constraintScore = constraintScoreMap.get(extendedConstraintId);
             double occurenceScore;
             if (occurrence instanceof IntConstraintOccurrence) {
                 occurenceScore = ((IntConstraintOccurrence) occurrence).getWeight();
@@ -123,17 +113,14 @@
             } else if (occurrence instanceof UnweightedConstraintOccurrence) {
                 occurenceScore = 1.0;
             } else {
-                throw new IllegalStateException("Cannot determine constraintScore of ConstraintOccurence class: "
+                throw new IllegalStateException("Cannot determine occurenceScore of ConstraintOccurence class: "
                         + occurrence.getClass());
             }
-            if (constraintScore == null) {
-                constraintScore = occurenceScore;
-            } else {
-                constraintScore += occurenceScore;
-            }
-            constraintScoreMap.put(extendedConstraintId, constraintScore);
+            scoreDetail.addOccurenceScore(occurenceScore);
         }
-        return constraintScoreMap;
+        List<ScoreDetail> scoreDetailList = new ArrayList<ScoreDetail>(scoreDetailMap.values());
+        Collections.sort(scoreDetailList);
+        return scoreDetailList;
     }
 
     public void load(File file) {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.java	2008-02-03 11:49:57 UTC (rev 18281)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.java	2008-02-03 14:40:52 UTC (rev 18282)
@@ -1,13 +1,14 @@
 package org.drools.solver.examples.common.swingui;
 
 import java.awt.GridLayout;
-import java.util.Map;
+import java.util.List;
 
 import javax.swing.BorderFactory;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
+import org.drools.solver.examples.common.business.ScoreDetail;
 import org.drools.solver.examples.common.business.SolutionBusiness;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,12 +34,15 @@
 
     public void resetContentPanel() {
         JPanel panel = new JPanel(new GridLayout(0, 2));
-        Map<String, Double> scoreDetails = solutionBusiness.getConstraintScoreMap();
-        for (Map.Entry<String, Double> scoreDetail : scoreDetails.entrySet()) {
-            JLabel constraintIdLabel = new JLabel(scoreDetail.getKey());
+        List<ScoreDetail> scoreDetailList = solutionBusiness.getConstraintScoreMap();
+        for (ScoreDetail scoreDetail : scoreDetailList) {
+            JLabel constraintIdLabel = new JLabel(
+                    scoreDetail.getRuleId() + " (" + scoreDetail.getConstraintType() + ")");
             constraintIdLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
             panel.add(constraintIdLabel);
-            JLabel constraintScoreLabel = new JLabel(WorkflowFrame.NUMBER_FORMAT.format(scoreDetail.getValue()));
+            JLabel constraintScoreLabel = new JLabel(
+                    WorkflowFrame.NUMBER_FORMAT.format(scoreDetail.getScoreTotal())
+                    + " (" + WorkflowFrame.NUMBER_FORMAT.format(scoreDetail.getOccurenceSize()) + ")");
             panel.add(constraintScoreLabel);
         }
         panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));




More information about the jboss-svn-commits mailing list