[jboss-svn-commits] JBL Code SVN: r26403 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common: business and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 6 15:06:42 EDT 2009
Author: ge0ffrey
Date: 2009-05-06 15:06:42 -0400 (Wed, 06 May 2009)
New Revision: 26403
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/app/CommonApp.java
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
Log:
examples now support cancel solving
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/app/CommonApp.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/app/CommonApp.java 2009-05-06 17:29:53 UTC (rev 26402)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/app/CommonApp.java 2009-05-06 19:06:42 UTC (rev 26403)
@@ -17,12 +17,11 @@
private WorkflowFrame workflowFrame;
public CommonApp() {
- workflowFrame = new WorkflowFrame(createSolutionPanel(), getExampleDirName());
- workflowFrame.setSolutionBusiness(createSolutionBusiness());
- workflowFrame.init();
+ workflowFrame = new WorkflowFrame(createSolutionBusiness(), createSolutionPanel(), getExampleDirName());
}
public void init() {
+ workflowFrame.init();
workflowFrame.setVisible(true);
}
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 2009-05-06 17:29:53 UTC (rev 26402)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java 2009-05-06 19:06:42 UTC (rev 26403)
@@ -38,7 +38,8 @@
private File unsolvedDataDir;
private File solvedDataDir;
- private Solver solver;
+ // volatile because the solve method doesn't come from the event thread (like every other method call)
+ private volatile Solver solver;
private LocalSearchSolverScope localSearchSolverScope;
public void setSolutionDao(SolutionDao solutionDao) {
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 2009-05-06 17:29:53 UTC (rev 26402)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java 2009-05-06 19:06:42 UTC (rev 26403)
@@ -5,6 +5,10 @@
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.io.File;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.List;
+import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.Action;
@@ -16,6 +20,7 @@
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import org.drools.solver.examples.common.business.SolutionBusiness;
@@ -34,24 +39,24 @@
private SolutionPanel solutionPanel;
private JLabel resultLabel;
private ConstraintScoreMapDialog constraintScoreMapDialog;
+
+ private List<Action> loadUnsolvedActionList;
+ private List<Action> loadSolvedActionList;
private Action cancelSolvingAction;
private Action solveAction;
private Action saveAction;
- public WorkflowFrame(SolutionPanel solutionPanel, String exampleName) {
+ public WorkflowFrame(SolutionBusiness solutionBusiness, SolutionPanel solutionPanel, String exampleName) {
super("Drools solver example " + exampleName);
+ this.solutionBusiness = solutionBusiness;
this.solutionPanel = solutionPanel;
+ solutionPanel.setSolutionBusiness(solutionBusiness);
solutionPanel.setWorkflowFrame(this);
constraintScoreMapDialog = new ConstraintScoreMapDialog(this);
+ constraintScoreMapDialog.setSolutionBusiness(solutionBusiness);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
- public void setSolutionBusiness(SolutionBusiness solutionBusiness) {
- this.solutionBusiness = solutionBusiness;
- solutionPanel.setSolutionBusiness(solutionBusiness);
- constraintScoreMapDialog.setSolutionBusiness(solutionBusiness);
- }
-
public void init() {
setContentPane(createContentPane());
pack();
@@ -75,10 +80,12 @@
}
private JComponent createLoadUnsolvedPanel() {
+ loadUnsolvedActionList = new ArrayList<Action>();
JPanel panel = new JPanel(new GridLayout(0, 1));
for (File file : solutionBusiness.getUnsolvedFileList()) {
- Action action = new LoadAction(file);
- panel.add(new JButton(action));
+ Action loadUnsolvedAction = new LoadAction(file);
+ loadUnsolvedActionList.add(loadUnsolvedAction);
+ panel.add(new JButton(loadUnsolvedAction));
}
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.getVerticalScrollBar().setUnitIncrement(25);
@@ -87,10 +94,12 @@
}
private JComponent createLoadSolvedPanel() {
+ loadSolvedActionList = new ArrayList<Action>();
JPanel panel = new JPanel(new GridLayout(0, 1));
for (File file : solutionBusiness.getSolvedFileList()) {
- Action action = new LoadAction(file);
- panel.add(new JButton(action));
+ Action loadSolvedAction = new LoadAction(file);
+ loadSolvedActionList.add(loadSolvedAction);
+ panel.add(new JButton(loadSolvedAction));
}
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.getVerticalScrollBar().setUnitIncrement(25);
@@ -130,17 +139,42 @@
return panel;
}
+ private void setEnabledSolving(boolean solving) {
+ for (Action action : loadUnsolvedActionList) {
+ action.setEnabled(!solving);
+ }
+ for (Action action : loadSolvedActionList) {
+ action.setEnabled(!solving);
+ }
+ solveAction.setEnabled(!solving);
+ cancelSolvingAction.setEnabled(solving);
+ saveAction.setEnabled(!solving);
+ solutionPanel.setEnabled(!solving);
+ }
+
private class SolveAction extends AbstractAction {
+
+ // This should be replaced with a java 6 SwingWorker once drools's hudson is on JDK 1.6
+ private ExecutorService solvingExecutor = Executors.newFixedThreadPool(1);
public SolveAction() {
super("Solve!");
}
public void actionPerformed(ActionEvent e) {
- cancelSolvingAction.setEnabled(true);
- solutionBusiness.solve();
- cancelSolvingAction.setEnabled(false);
- updateScreen();
+ setEnabledSolving(true);
+ // This should be replaced with a java 6 SwingWorker once drools's hudson is on JDK 1.6
+ solvingExecutor.submit(new Runnable() {
+ public void run() {
+ solutionBusiness.solve();
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ setEnabledSolving(false);
+ updateScreen();
+ }
+ });
+ }
+ });
}
}
@@ -148,7 +182,7 @@
private class CancelSolvingAction extends AbstractAction {
public CancelSolvingAction() {
- super("Cancel solving (coming soon)");
+ super("Cancel solving");
}
public void actionPerformed(ActionEvent e) {
More information about the jboss-svn-commits
mailing list