[jboss-svn-commits] JBL Code SVN: r32851 - in labs/jbossrules/trunk/drools-planner: drools-planner-examples/src/main/java/org/drools/planner/examples/common/business and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 13 06:32:23 EDT 2010


Author: ge0ffrey
Date: 2010-05-13 06:32:22 -0400 (Thu, 13 May 2010)
New Revision: 32851

Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/constraint/ConstraintOccurrence.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/ScoreDetail.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/swingui/ConstraintScoreMapDialog.java
Log:
examples should be able to show the constraintOccurrences

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/constraint/ConstraintOccurrence.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/constraint/ConstraintOccurrence.java	2010-05-13 09:08:14 UTC (rev 32850)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/constraint/ConstraintOccurrence.java	2010-05-13 10:32:22 UTC (rev 32851)
@@ -3,13 +3,14 @@
 import java.util.Arrays;
 import java.io.Serializable;
 
+import org.apache.commons.lang.builder.CompareToBuilder;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 
 /**
  * @author Geoffrey De Smet
  */
-public abstract class ConstraintOccurrence implements Serializable {
+public abstract class ConstraintOccurrence implements Comparable<ConstraintOccurrence>, Serializable {
 
     protected String ruleId;
     protected ConstraintType constraintType;
@@ -60,6 +61,14 @@
                 .toHashCode();
     }
 
+    public int compareTo(ConstraintOccurrence other) {
+        return new CompareToBuilder()
+                .append(ruleId, other.ruleId)
+                .append(constraintType, other.constraintType)
+                .append(causes, other.causes)
+                .toComparison();
+    }
+
     public String toString() {
         return ruleId + "/" + constraintType + ":" + Arrays.toString(causes);
     }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/ScoreDetail.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/ScoreDetail.java	2010-05-13 09:08:14 UTC (rev 32850)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/ScoreDetail.java	2010-05-13 10:32:22 UTC (rev 32851)
@@ -1,19 +1,31 @@
 package org.drools.planner.examples.common.business;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.planner.core.score.constraint.ConstraintOccurrence;
 import org.drools.planner.core.score.constraint.ConstraintType;
+import org.drools.planner.core.score.constraint.DoubleConstraintOccurrence;
+import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
+import org.drools.planner.core.score.constraint.UnweightedConstraintOccurrence;
 
 /**
+ * TODO Replace this class with the ConstraintOccurrenceTotal class: https://jira.jboss.org/jira/browse/JBRULES-2510
  * @author Geoffrey De Smet
  */
 public class ScoreDetail implements Comparable<ScoreDetail> {
 
     private String ruleId;
     private ConstraintType constraintType;
+
+    private Set<ConstraintOccurrence> constraintOccurrenceSet = new HashSet<ConstraintOccurrence>();
     private double scoreTotal = 0.0;
-    private int occurrenceSize = 0;
 
     public ScoreDetail(String ruleId, ConstraintType constraintType) {
         this.ruleId = ruleId;
@@ -24,38 +36,40 @@
         return ruleId;
     }
 
-    public void setRuleId(String ruleId) {
-        this.ruleId = ruleId;
-    }
-
     public ConstraintType getConstraintType() {
         return constraintType;
     }
 
-    public void setConstraintType(ConstraintType constraintType) {
-        this.constraintType = constraintType;
+    public Set<ConstraintOccurrence> getConstraintOccurrenceSet() {
+        return constraintOccurrenceSet;
     }
 
-    public double getScoreTotal() {
-        return scoreTotal;
-    }
-
-    public void setScoreTotal(double scoreTotal) {
-        this.scoreTotal = scoreTotal;
-    }
-
     public int getOccurrenceSize() {
-        return occurrenceSize;
+        return constraintOccurrenceSet.size();
     }
 
-    public void setOccurrenceSize(int occurrenceSize) {
-        this.occurrenceSize = occurrenceSize;
+    public double getScoreTotal() {
+        return scoreTotal;
     }
 
-
-    public void addOccurrenceScore(double occurrenceScore) {
+    public void addConstraintOccurrence(ConstraintOccurrence constraintOccurrence) {
+        boolean added = constraintOccurrenceSet.add(constraintOccurrence);
+        if (!added) {
+            throw new IllegalArgumentException("Add the same constraintOccurrence (" + constraintOccurrence
+                    + ") twice.");
+        }
+        double occurrenceScore;
+        if (constraintOccurrence instanceof IntConstraintOccurrence) {
+            occurrenceScore = ((IntConstraintOccurrence) constraintOccurrence).getWeight();
+        } else if (constraintOccurrence instanceof DoubleConstraintOccurrence) {
+            occurrenceScore = ((DoubleConstraintOccurrence) constraintOccurrence).getWeight();
+        } else if (constraintOccurrence instanceof UnweightedConstraintOccurrence) {
+            occurrenceScore = 1.0;
+        } else {
+            throw new IllegalStateException("Cannot determine occurrenceScore of ConstraintOccurrence class: "
+                    + constraintOccurrence.getClass());
+        }
         scoreTotal += occurrenceScore;
-        occurrenceSize++;
     }
 
     public boolean equals(Object o) {
@@ -87,7 +101,17 @@
     }
 
     public String toString() {
-        return ruleId + "/" + constraintType + "=" + scoreTotal + "(" + occurrenceSize + ")";
+        return ruleId + "/" + constraintType + " (" + getOccurrenceSize() + ") = " + scoreTotal;
     }
 
+    public String buildConstraintOccurrenceListText() {
+        List<ConstraintOccurrence> constraintOccurrenceList = new ArrayList(constraintOccurrenceSet);
+        Collections.sort(constraintOccurrenceList);
+        StringBuilder text = new StringBuilder(constraintOccurrenceList.size() * 80);
+        for (ConstraintOccurrence constraintOccurrence : constraintOccurrenceList) {
+            text.append(constraintOccurrence.toString()).append("\n");
+        }
+        return text.toString();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java	2010-05-13 09:08:14 UTC (rev 32850)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java	2010-05-13 10:32:22 UTC (rev 32851)
@@ -18,9 +18,6 @@
 import org.drools.planner.core.localsearch.LocalSearchSolverScope;
 import org.drools.planner.core.move.Move;
 import org.drools.planner.core.score.constraint.ConstraintOccurrence;
-import org.drools.planner.core.score.constraint.DoubleConstraintOccurrence;
-import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
-import org.drools.planner.core.score.constraint.UnweightedConstraintOccurrence;
 import org.drools.planner.core.score.Score;
 import org.drools.planner.core.solution.Solution;
 import org.drools.planner.examples.common.persistence.AbstractSolutionExporter;
@@ -160,24 +157,13 @@
         Iterator<ConstraintOccurrence> it = (Iterator<ConstraintOccurrence>) workingMemory.iterateObjects(
                 new ClassObjectFilter(ConstraintOccurrence.class));
         while (it.hasNext()) {
-            ConstraintOccurrence occurrence = it.next();
-            ScoreDetail scoreDetail = scoreDetailMap.get(occurrence.getRuleId());
+            ConstraintOccurrence constraintOccurrence = it.next();
+            ScoreDetail scoreDetail = scoreDetailMap.get(constraintOccurrence.getRuleId());
             if (scoreDetail == null) {
-                scoreDetail = new ScoreDetail(occurrence.getRuleId(), occurrence.getConstraintType());
-                scoreDetailMap.put(occurrence.getRuleId(), scoreDetail);
+                scoreDetail = new ScoreDetail(constraintOccurrence.getRuleId(), constraintOccurrence.getConstraintType());
+                scoreDetailMap.put(constraintOccurrence.getRuleId(), scoreDetail);
             }
-            double occurrenceScore;
-            if (occurrence instanceof IntConstraintOccurrence) {
-                occurrenceScore = ((IntConstraintOccurrence) occurrence).getWeight();
-            } else if (occurrence instanceof DoubleConstraintOccurrence) {
-                occurrenceScore = ((DoubleConstraintOccurrence) occurrence).getWeight();
-            } else if (occurrence instanceof UnweightedConstraintOccurrence) {
-                occurrenceScore = 1.0;
-            } else {
-                throw new IllegalStateException("Cannot determine occurrenceScore of ConstraintOccurrence class: "
-                        + occurrence.getClass());
-            }
-            scoreDetail.addOccurrenceScore(occurrenceScore);
+            scoreDetail.addConstraintOccurrence(constraintOccurrence);
         }
         List<ScoreDetail> scoreDetailList = new ArrayList<ScoreDetail>(scoreDetailMap.values());
         Collections.sort(scoreDetailList);

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/swingui/ConstraintScoreMapDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/swingui/ConstraintScoreMapDialog.java	2010-05-13 09:08:14 UTC (rev 32850)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/swingui/ConstraintScoreMapDialog.java	2010-05-13 10:32:22 UTC (rev 32851)
@@ -1,12 +1,20 @@
 package org.drools.planner.examples.common.swingui;
 
+import java.awt.BorderLayout;
+import java.awt.Component;
 import java.awt.Dimension;
 import java.util.List;
 
+import javax.swing.JButton;
 import javax.swing.JDialog;
+import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
 import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellRenderer;
 
 import org.drools.planner.examples.common.business.ScoreDetail;
 import org.drools.planner.examples.common.business.SolutionBusiness;
@@ -33,11 +41,29 @@
     }
 
     public void resetContentPanel() {
-        List<ScoreDetail> scoreDetailList = solutionBusiness.getScoreDetailList();
-        JTable table = new JTable(new ScoreDetailTableModel(scoreDetailList));
-        JScrollPane scrollpane = new JScrollPane(table);
-        scrollpane.setPreferredSize(new Dimension(700, 300));
-        setContentPane(scrollpane);
+        final List<ScoreDetail> scoreDetailList = solutionBusiness.getScoreDetailList();
+        JPanel contentPane = new JPanel(new BorderLayout());
+        final JTable table = new JTable(new ScoreDetailTableModel(scoreDetailList));
+        JScrollPane tableScrollPane = new JScrollPane(table);
+        tableScrollPane.setPreferredSize(new Dimension(700, 300));
+        contentPane.add(tableScrollPane, BorderLayout.CENTER);
+        final JTextArea detailTextArea = new JTextArea(10, 80);
+        JScrollPane detailScrollPane = new JScrollPane(detailTextArea);
+        contentPane.add(detailScrollPane, BorderLayout.SOUTH);
+        table.getSelectionModel().addListSelectionListener(
+                new ListSelectionListener() {
+                    public void valueChanged(ListSelectionEvent event) {
+                        int selectedRow = table.getSelectedRow();
+                        if (selectedRow < 0) {
+                            detailTextArea.setText("");
+                        } else {
+                            ScoreDetail scoreDetail = scoreDetailList.get(selectedRow);
+                            detailTextArea.setText(scoreDetail.buildConstraintOccurrenceListText());
+                        }
+                    }
+                }
+        );
+        setContentPane(contentPane);
         pack();
         setLocationRelativeTo(getParent());
     }
@@ -105,4 +131,13 @@
         }
     }
 
+    private static class ShowButtonTableRenderer implements TableCellRenderer {
+
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+                int row, int column) {
+            return (JButton) value;
+        }
+
+    }
+
 }



More information about the jboss-svn-commits mailing list