[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