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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Dec 29 14:09:33 EST 2007


Author: ge0ffrey
Date: 2007-12-29 14:09:33 -0500 (Sat, 29 Dec 2007)
New Revision: 17440

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.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/WorkflowFrame.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java
Log:
constraint scores dialog

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	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -1,19 +1,27 @@
 package org.drools.solver.examples.common.business;
 
+import java.io.File;
+import java.io.FileFilter;
+import java.util.Arrays;
+import java.util.Collections;
+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;
 import org.drools.solver.core.Solver;
 import org.drools.solver.core.evaluation.EvaluationHandler;
 import org.drools.solver.core.move.Move;
+import org.drools.solver.core.score.constraint.ConstraintOccurrence;
+import org.drools.solver.core.score.constraint.DoubleConstraintOccurrence;
+import org.drools.solver.core.score.constraint.IntConstraintOccurrence;
 import org.drools.solver.core.solution.Solution;
 import org.drools.solver.examples.common.persistence.SolutionDao;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileFilter;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * @author Geoffrey De Smet
  */
@@ -80,6 +88,52 @@
         return evaluationHandler.fireAllRulesAndCalculateStepScore();
     }
 
+    public Map<String, Double> getConstraintScoreMap() {
+        Map<String, Double> constraintScoreMap = new TreeMap<String, Double>();
+        StatefulSession statefulSession = evaluationHandler.getStatefulSession();
+        if (statefulSession == null) {
+            return Collections.emptyMap();
+        }
+        Iterator<ConstraintOccurrence> it = statefulSession.iterateObjects(
+                new ClassObjectFilter(ConstraintOccurrence.class));
+        for (; 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());
+            }
+            extendedConstraintId += " " + occurrence.getRuleId();
+            Double constraintScore = constraintScoreMap.get(extendedConstraintId);
+            double occurenceScore;
+            if (occurrence instanceof IntConstraintOccurrence) {
+                occurenceScore = ((IntConstraintOccurrence) occurrence).getWeight();
+            } else if (occurrence instanceof DoubleConstraintOccurrence) {
+                occurenceScore = ((DoubleConstraintOccurrence) occurrence).getWeight();
+            } else {
+                // TODO FIXME with unweightedConstraintOccurence
+                throw new IllegalStateException("Cannot determine constraintScore of ConstraintOccurence class: "
+                        + occurrence.getClass());
+            }
+            if (constraintScore == null) {
+                constraintScore = occurenceScore;
+            } else {
+                constraintScore += occurenceScore;
+            }
+            constraintScoreMap.put(extendedConstraintId, constraintScore);
+        }
+        return constraintScoreMap;
+    }
+
     public void load(File file) {
         Solution solution = solutionDao.readSolution(file);
         evaluationHandler.setSolution(solution);

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/ConstraintScoreMapDialog.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -0,0 +1,50 @@
+package org.drools.solver.examples.common.swingui;
+
+import java.awt.GridLayout;
+import java.util.Map;
+
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.drools.solver.examples.common.business.SolutionBusiness;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ConstraintScoreMapDialog extends JDialog {
+
+    protected final transient Logger logger = LoggerFactory.getLogger(getClass());
+
+    protected WorkflowFrame workflowFrame;
+    protected SolutionBusiness solutionBusiness;
+
+    public ConstraintScoreMapDialog(WorkflowFrame workflowFrame) {
+        super(workflowFrame, "Constraint scores", true);
+        this.workflowFrame = workflowFrame;
+    }
+
+    public void setSolutionBusiness(SolutionBusiness solutionBusiness) {
+        this.solutionBusiness = solutionBusiness;
+    }
+
+    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());
+            constraintIdLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
+            panel.add(constraintIdLabel);
+            JLabel constraintScoreLabel = new JLabel(WorkflowFrame.NUMBER_FORMAT.format(scoreDetail.getValue()));
+            panel.add(constraintScoreLabel);
+        }
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        setContentPane(panel);
+        pack();
+        setLocationRelativeTo(getParent());
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -28,7 +28,7 @@
  */
 public class WorkflowFrame extends JFrame {
     
-    private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance();
+    public static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance();
 
     protected final transient Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -36,17 +36,20 @@
 
     private SolutionPanel solutionPanel;
     private JLabel resultLabel;
+    private ConstraintScoreMapDialog constraintScoreMapDialog;
 
     public WorkflowFrame(SolutionPanel solutionPanel, String exampleName) {
         super("Drools solver example " + exampleName);
         this.solutionPanel = solutionPanel;
         solutionPanel.setWorkflowFrame(this);
+        constraintScoreMapDialog = new ConstraintScoreMapDialog(this);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
 
     public void setSolutionBusiness(SolutionBusiness solutionBusiness) {
         this.solutionBusiness = solutionBusiness;
         solutionPanel.setSolutionBusiness(solutionBusiness);
+        constraintScoreMapDialog.setSolutionBusiness(solutionBusiness);
     }
 
     public void init() {
@@ -59,9 +62,7 @@
         panel.add(createButtonPanel(), BorderLayout.NORTH);
         JScrollPane solutionScrollPane = new JScrollPane(solutionPanel);
         panel.add(solutionScrollPane, BorderLayout.CENTER);
-        resultLabel = new JLabel("No solution loaded yet");
-        resultLabel.setBorder(BorderFactory.createLoweredBevelBorder());
-        panel.add(resultLabel, BorderLayout.SOUTH);
+        panel.add(createScorePanel(), BorderLayout.SOUTH);
         return panel;
     }
 
@@ -95,22 +96,6 @@
         return scrollPane;
     }
 
-    private JComponent createProcessingPanel() {
-        JPanel panel = new JPanel(new GridLayout(0, 1));
-        Action solveAction = new SolveAction();
-        panel.add(new JButton(solveAction));
-        Action saveAction = new SaveAction();
-        panel.add(new JButton(saveAction));
-        return panel;
-    }
-
-
-    public void updateScreen() {
-        solutionPanel.resetPanel();
-        validate();
-        resultLabel.setText("Score = " + NUMBER_FORMAT.format(solutionBusiness.getScore()));
-    }
-
     private class LoadAction extends AbstractAction {
 
         private File file;
@@ -127,6 +112,15 @@
 
     }
 
+    private JComponent createProcessingPanel() {
+        JPanel panel = new JPanel(new GridLayout(0, 1));
+        Action solveAction = new SolveAction();
+        panel.add(new JButton(solveAction));
+        Action saveAction = new SaveAction();
+        panel.add(new JButton(saveAction));
+        return panel;
+    }
+
     private class SolveAction extends AbstractAction {
 
         public SolveAction() {
@@ -165,4 +159,34 @@
 
     }
 
+    private JPanel createScorePanel() {
+        JPanel panel = new JPanel(new BorderLayout());
+        resultLabel = new JLabel("No solution loaded yet");
+        resultLabel.setBorder(BorderFactory.createLoweredBevelBorder());
+        panel.add(resultLabel, BorderLayout.CENTER);
+        JButton constraintScoreMapButton = new JButton(new ShowConstraintScoreMapDialogAction());
+
+        panel.add(constraintScoreMapButton, BorderLayout.EAST);
+        return panel;
+    }
+
+    private class ShowConstraintScoreMapDialogAction extends AbstractAction {
+
+        public ShowConstraintScoreMapDialogAction() {
+            super("Constraint scores");
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            constraintScoreMapDialog.resetContentPanel();
+            constraintScoreMapDialog.setVisible(true);
+        }
+
+    }
+
+    public void updateScreen() {
+        solutionPanel.resetPanel();
+        validate();
+        resultLabel.setText("Score = " + NUMBER_FORMAT.format(solutionBusiness.getScore()));
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -33,7 +33,6 @@
     private GridLayout gridLayout;
 
     public ExaminationPanel() {
-        super();
         gridLayout = new GridLayout(0, 1);
         setLayout(gridLayout);
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -28,7 +28,6 @@
 public class LessonSchedulePanel extends SolutionPanel {
 
     public LessonSchedulePanel() {
-        super();
         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -31,7 +31,6 @@
     private ImageIcon queenImageIcon;
 
     public NQueensPanel() {
-        super();
         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
         queenImageIcon = new ImageIcon(getClass().getResource(QUEEN_IMAGE_PATH));
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java	2007-12-29 18:14:33 UTC (rev 17439)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java	2007-12-29 19:09:33 UTC (rev 17440)
@@ -28,7 +28,6 @@
 public class TravelingTournamentPanel extends SolutionPanel {
 
     public TravelingTournamentPanel() {
-        super();
         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
     }
 




More information about the jboss-svn-commits mailing list