[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