[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