Author: jm
Date: 2012-03-06 07:35:36 -0800 (Tue, 06 Mar 2012)
New Revision: 28437

Added:
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/StaticTaskFactoryProvisioner.java
Modified:
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNetworkViewTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNodeViewTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/main/java/org/cytoscape/work/TaskManager.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/test/java/org/cytoscape/work/AbstractTaskManagerTest.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/PersistImageTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/SaveGraphicsToSessionTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/action/GraphicsDetailAction.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/AddEdgeNodeViewTaskFactoryImpl.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/SwitchGraphicsDetailTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/cyannotator/tasks/DropAnnotationTaskFactory.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutSettingsDialog.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/task/CytoPanelTaskFactoryTunableAction.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuItem.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuListener.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTaskManagerImpl.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTunableMutator.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JDialogTaskManager.java
   
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JPanelTaskManager.java
Log:
Refactored ding;  Changed TaskManager.getConfiguration() to also take a tunable 
context object

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNetworkViewTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNetworkViewTaskFactory.java
       2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNetworkViewTaskFactory.java
       2012-03-06 15:35:36 UTC (rev 28437)
@@ -2,18 +2,18 @@
 package org.cytoscape.dnd;
 
 
+import java.awt.datatransfer.Transferable;
 import java.awt.geom.Point2D;
-import java.awt.datatransfer.Transferable;
 
 import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.task.NetworkViewTaskFactory;
+import org.cytoscape.work.TaskIterator;
 
 /**
  * An extension of TaskFactory that provides support for
  * tasks to deal with drag and drop.
  * @CyAPI.Spi.Interface
  */
-public interface DropNetworkViewTaskFactory extends NetworkViewTaskFactory {
+public interface DropNetworkViewTaskFactory<T> {
 
        /**
         * Sets the drop information for a TaskFactory. 
@@ -21,5 +21,9 @@
         * @param javaPt The raw Java point at which the object was dropped.
         * @param xformPt The drop point transformed into Cytoscape coordinates.
         */
-       public void setDropInformation (Transferable t, Point2D javaPt, Point2D 
xformPt);
+       TaskIterator createTaskIterator(T tunableContext, CyNetworkView 
networkView, Transferable t, Point2D javaPt, Point2D xformPt);
+       
+       boolean isReady(T tunableContext, CyNetworkView networkView, 
Transferable t, Point2D javaPt, Point2D xformPt);
+
+       T createTunableContext();
 }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNodeViewTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNodeViewTaskFactory.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/dnd-api/src/main/java/org/cytoscape/dnd/DropNodeViewTaskFactory.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -2,17 +2,20 @@
 package org.cytoscape.dnd;
 
 
+import java.awt.datatransfer.Transferable;
 import java.awt.geom.Point2D;
-import java.awt.datatransfer.Transferable;
 
-import org.cytoscape.task.NodeViewTaskFactory;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.work.TaskIterator;
 
 /**
  * An extension of TaskFactory that provides support for
  * tasks to deal with drag and drop.
  * @CyAPI.Spi.Interface
  */
-public interface DropNodeViewTaskFactory extends NodeViewTaskFactory {
+public interface DropNodeViewTaskFactory<T> {
 
        /**
         * Sets the drop information for a TaskFactory. 
@@ -20,5 +23,9 @@
         * @param javaPt The raw coordinate point at which the object was 
dropped.
         * @param xformPt The drop point transformed into Cytoscape 
coordinates. 
         */
-       public void setDropInformation (Transferable t, Point2D javaPt, Point2D 
xformPt);
+       TaskIterator createTaskIterator(T tunableContext, View<CyNode> 
nodeView, CyNetworkView networkView, Transferable t, Point2D javaPt, Point2D 
xformPt);
+       
+       boolean isReady(T tunableContext, View<CyNode> nodeView, CyNetworkView 
networkView, Transferable t, Point2D javaPt, Point2D xformPt);
+
+       T createTunableContext();
 }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/main/java/org/cytoscape/work/TaskManager.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/main/java/org/cytoscape/work/TaskManager.java
    2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/main/java/org/cytoscape/work/TaskManager.java
    2012-03-06 15:35:36 UTC (rev 28437)
@@ -14,7 +14,7 @@
         * @return a configuration object generated from the Tunables
         * read from the TaskFactory.
         */
-        T getConfiguration(TaskFactory factory);
+        T getConfiguration(TaskFactory factory, Object tunableContext);
 
        /**
         * Allows a user of a TaskManager to set the execution context for

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/test/java/org/cytoscape/work/AbstractTaskManagerTest.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/test/java/org/cytoscape/work/AbstractTaskManagerTest.java
        2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/api/work-api/src/test/java/org/cytoscape/work/AbstractTaskManagerTest.java
        2012-03-06 15:35:36 UTC (rev 28437)
@@ -66,7 +66,7 @@
                public void execute(TaskIterator iterator, Object 
tunableContext) { }
                
                @Override
-               public T getConfiguration(TaskFactory tf) { return null; }
+               public T getConfiguration(TaskFactory factory, Object 
tunableContext) { return null; }
        }
 
        @Test

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
        2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/CustomGraphicsManagerImpl.java
        2012-03-06 15:35:36 UTC (rev 28437)
@@ -83,7 +83,7 @@
                this.isUsedCustomGraphics.put(NULL, false);
 
                final RestoreImageTaskFactory taskFactory = new 
RestoreImageTaskFactory(imageHomeDirectory, this, eventHelper);
-               taskManager.execute(taskFactory);
+               taskManager.execute(taskFactory.createTaskIterator());
        }
 
        /**
@@ -236,7 +236,7 @@
                try {
 
                        // FIXME how this section can wait until everything is 
done?
-                       taskManager.execute(factory);
+                       taskManager.execute(factory.createTaskIterator());
                } catch (Exception e1) {
                        logger.error("Could not save images to disk.", e1);
                }
@@ -253,7 +253,7 @@
                final SaveGraphicsToSessionTaskFactory factory = new 
SaveGraphicsToSessionTaskFactory(imageHomeDirectory, this, e);
 
                try {
-                       taskManager.execute(factory);
+                       taskManager.execute(factory.createTaskIterator());
                } catch (Exception ex) {
                        logger.error("Could not save images to .", ex);
                }
@@ -275,7 +275,7 @@
                                        // get parent directory
                                        final File parent = 
files.get(0).getParentFile();
                                        final RestoreImageTaskFactory 
taskFactory = new RestoreImageTaskFactory(parent, this, eventHelper);
-                                       taskManager.execute(taskFactory);
+                                       
taskManager.execute(taskFactory.createTaskIterator());
                                }
                        }
                }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/PersistImageTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/PersistImageTaskFactory.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/PersistImageTaskFactory.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -3,10 +3,10 @@
 import java.io.File;
 
 import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
-import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.SimpleTaskFactory;
 import org.cytoscape.work.TaskIterator;
 
-public class PersistImageTaskFactory implements TaskFactory {
+public class PersistImageTaskFactory extends SimpleTaskFactory {
 
        private final File location;
        private final CustomGraphicsManager manager;

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/RestoreImageTaskFactory.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -3,10 +3,10 @@
 import java.io.File;
 
 import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.SimpleTaskFactory;
 import org.cytoscape.work.TaskIterator;
 
-public class RestoreImageTaskFactory implements TaskFactory {
+public class RestoreImageTaskFactory extends SimpleTaskFactory {
        
        private final File imageLocation;
        private final CustomGraphicsManagerImpl manager;

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/SaveGraphicsToSessionTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/SaveGraphicsToSessionTaskFactory.java
 2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-customgraphics-manager-impl/src/main/java/org/cytoscape/ding/customgraphicsmgr/internal/SaveGraphicsToSessionTaskFactory.java
 2012-03-06 15:35:36 UTC (rev 28437)
@@ -4,10 +4,10 @@
 
 import org.cytoscape.ding.customgraphics.CustomGraphicsManager;
 import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
-import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.SimpleTaskFactory;
 import org.cytoscape.work.TaskIterator;
 
-public class SaveGraphicsToSessionTaskFactory implements TaskFactory {
+public class SaveGraphicsToSessionTaskFactory extends SimpleTaskFactory {
 
        private final File location;
        private final CustomGraphicsManager manager;

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/action/GraphicsDetailAction.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/action/GraphicsDetailAction.java
   2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/action/GraphicsDetailAction.java
   2012-03-06 15:35:36 UTC (rev 28437)
@@ -51,7 +51,7 @@
        public void actionPerformed(ActionEvent ev) {
                
                SwitchGraphicsDetailTaskFactory tf = new 
SwitchGraphicsDetailTaskFactory(applicationManager, defaultProps);
-               taskManagerServiceRef.execute(tf);              
+               taskManagerServiceRef.execute(tf.createTaskIterator());         
        } 
 
        /**

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/AddEdgeNodeViewTaskFactoryImpl.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/AddEdgeNodeViewTaskFactoryImpl.java
   2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/AddEdgeNodeViewTaskFactoryImpl.java
   2012-03-06 15:35:36 UTC (rev 28437)
@@ -12,34 +12,30 @@
 import org.cytoscape.work.TaskIterator;
 
 
-public class AddEdgeNodeViewTaskFactoryImpl implements DropNodeViewTaskFactory 
{
-       private View<CyNode> nv;
-       private CyNetworkView view;
-       private Point2D xformPt;
-       private Point2D javaPt;
+public class AddEdgeNodeViewTaskFactoryImpl implements 
DropNodeViewTaskFactory<Object> {
        private final CyNetworkManager netMgr;
 
        public AddEdgeNodeViewTaskFactoryImpl(CyNetworkManager netMgr) {
                this.netMgr = netMgr;
        }
 
-       public void setNodeView(View<CyNode> nv, CyNetworkView view) {
-               this.view = view;
-               this.nv = nv;
-       }
-
-       public void setDropInformation(Transferable t, Point2D javaPt, Point2D 
xformPt) {
-               this.javaPt = javaPt;
-               this.xformPt = xformPt;
-
+       public TaskIterator createTaskIterator(Object tunableContext, 
View<CyNode> nv, CyNetworkView view, Transferable t, Point2D javaPt, Point2D 
xformPt) {
                AddEdgeStateMonitor.setSourcePoint(view,javaPt);
 
                // Because the transferable may be null, we leave that
                // tracking to the AddEdgeStateMonitor.
                AddEdgeStateMonitor.setTransferable(view,t);
-       }
-
-       public TaskIterator createTaskIterator() {
+               
                return new TaskIterator(new AddEdgeTask(nv, view, 
AddEdgeStateMonitor.getTransferable(view)));
        }
+       
+       @Override
+       public boolean isReady(Object tunableContext, View<CyNode> nodeView, 
CyNetworkView networkView, Transferable t, Point2D javaPt, Point2D xformPt) {
+               return true;
+       }
+       
+       @Override
+       public Object createTunableContext() {
+               return null;
+       }
 }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/PopupMenuHelper.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -46,8 +46,8 @@
 import org.cytoscape.dnd.DropNetworkViewTaskFactory;
 import org.cytoscape.dnd.DropNodeViewTaskFactory;
 import org.cytoscape.model.CyEdge;
-import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
 import org.cytoscape.task.EdgeViewTaskFactory;
 import org.cytoscape.task.NetworkViewTaskFactory;
 import org.cytoscape.task.NodeViewTaskFactory;
@@ -56,7 +56,6 @@
 import org.cytoscape.view.model.View;
 import org.cytoscape.view.model.VisualProperty;
 import org.cytoscape.work.TaskFactory;
-import org.cytoscape.work.TaskFactoryPredicate;
 import org.cytoscape.work.swing.DynamicSubmenuListener;
 
 
@@ -76,9 +75,12 @@
        // the component we should create the popup menu on
        private Component invoker;
 
+       private StaticTaskFactoryProvisioner factoryProvisioner;
+
        PopupMenuHelper(DGraphView v, Component inv) {
                m_view = v;
                invoker = inv;
+               factoryProvisioner = new StaticTaskFactoryProvisioner();
        }
 
        /**
@@ -97,8 +99,8 @@
                                JMenuTracker tracker = new JMenuTracker(menu);
 
                                for ( EdgeViewTaskFactory evtf : usableTFs ) {
-                                       evtf.setEdgeView(ev,m_view);
-                                       createMenuItem(ev, menu, evtf, tracker, 
m_view.edgeViewTFs.get(evtf) );
+                                       TaskFactory provisioner = 
factoryProvisioner.createFor(evtf, ev, m_view);
+                                       createMenuItem(ev, menu, provisioner, 
tracker, m_view.edgeViewTFs.get(evtf) );
                                }
 
                                menu.show(invoker, x, y);
@@ -106,8 +108,8 @@
                        // execute the task directly if only one factory exists
                        } else if ( usableTFs.size() == 1) {
                                EdgeViewTaskFactory tf  = 
usableTFs.iterator().next();
-                               tf.setEdgeView(ev,m_view);
-                               executeTask(tf);
+                               Object context = tf.createTunableContext();
+                               
m_view.manager.execute(tf.createTaskIterator(context, ev, m_view), context);
                        }
                }
        }
@@ -127,9 +129,8 @@
                                JMenuTracker tracker = new JMenuTracker(menu);
 
                                for ( DropNodeViewTaskFactory nvtf : usableTFs 
) {
-                                       nvtf.setNodeView(nv,m_view);
-                                       
nvtf.setDropInformation(t,rawPt,xformPt);
-                                       createMenuItem(nv, menu, nvtf, tracker, 
m_view.dropNodeViewTFs.get( nvtf ));
+                                       TaskFactory provisioner = 
factoryProvisioner.createFor(nvtf, nv, m_view, t, rawPt, xformPt);
+                                       createMenuItem(nv, menu, provisioner, 
tracker, m_view.dropNodeViewTFs.get( nvtf ));
                                }
 
                                menu.show(invoker, (int)(rawPt.getX()), 
(int)(rawPt.getY()));
@@ -137,9 +138,8 @@
                        // execute the task directly if only one factory exists
                        } else if ( usableTFs.size() == 1) {
                                DropNodeViewTaskFactory tf  = 
usableTFs.iterator().next();
-                               tf.setNodeView(nv,m_view);
-                               tf.setDropInformation(t,rawPt,xformPt);
-                               executeTask(tf);
+                               Object context = tf.createTunableContext();
+                               
m_view.manager.execute(tf.createTaskIterator(context, nv, m_view, t, rawPt, 
xformPt), context);
                        }
                }
        }
@@ -159,8 +159,8 @@
                                JMenuTracker tracker = new JMenuTracker(menu);
 
                                for ( NodeViewTaskFactory nvtf : usableTFs ) {
-                                       nvtf.setNodeView(nv, m_view);
-                                       createMenuItem(nv, menu, nvtf, tracker, 
m_view.nodeViewTFs.get( nvtf ));
+                                       TaskFactory<?> provisioner = 
factoryProvisioner.createFor(nvtf, nv, m_view);
+                                       createMenuItem(nv, menu, provisioner, 
tracker, m_view.nodeViewTFs.get( nvtf ));
                                }
 
                                menu.show(invoker, x, y);
@@ -168,8 +168,8 @@
                        // execute the task directly if only one factory exists
                        } else if ( usableTFs.size() == 1) {
                                NodeViewTaskFactory tf  = 
usableTFs.iterator().next();
-                               tf.setNodeView(nv, m_view);
-                               executeTask(tf);
+                               Object context = tf.createTunableContext();
+                               
m_view.manager.execute(tf.createTaskIterator(context, nv, m_view), context);
                        }
                }
        }
@@ -184,17 +184,15 @@
                        JPopupMenu menu = new JPopupMenu("Double Click Menu: 
empty");
                        JMenuTracker tracker = new JMenuTracker(menu);
                        for ( DropNetworkViewTaskFactory nvtf : usableTFs ) {
-                               nvtf.setNetworkView(m_view);
-                               nvtf.setDropInformation(t,rawPt,xformPt);
-                               createMenuItem(null, menu, nvtf, tracker, 
m_view.dropEmptySpaceTFs.get( nvtf ) );
+                               TaskFactory provisioner = 
factoryProvisioner.createFor(nvtf, m_view, t, rawPt, xformPt);
+                               createMenuItem(null, menu, provisioner, 
tracker, m_view.dropEmptySpaceTFs.get( nvtf ) );
                        }
                        menu.show(invoker, (int)(rawPt.getX()), 
(int)(rawPt.getY()));
                // execute the task directly if only one factory exists
                } else if ( usableTFs.size() == 1) {
                        DropNetworkViewTaskFactory tf = 
usableTFs.iterator().next();
-                       tf.setNetworkView(m_view);
-                       tf.setDropInformation(t,rawPt,xformPt);
-                       executeTask(tf);
+                       Object context = tf.createTunableContext();
+                       m_view.manager.execute(tf.createTaskIterator(context, 
m_view, t, rawPt, xformPt), context);
                }
        }
        /**
@@ -207,15 +205,15 @@
                        final JPopupMenu menu = new JPopupMenu("Double Click 
Menu: empty");
                        final JMenuTracker tracker = new JMenuTracker(menu);
                        for ( NetworkViewTaskFactory nvtf : usableTFs ) {
-                               nvtf.setNetworkView(m_view);
-                               createMenuItem(null, menu, nvtf, tracker, 
m_view.emptySpaceTFs.get( nvtf ) );
+                               TaskFactory provisioner = 
factoryProvisioner.createFor(nvtf, m_view);
+                               createMenuItem(null, menu, provisioner, 
tracker, m_view.emptySpaceTFs.get( nvtf ) );
                        }
                        menu.show(invoker, x, y);
                // execute the task directly if only one factory exists
                } else if ( usableTFs.size() == 1) {
                        NetworkViewTaskFactory tf = usableTFs.iterator().next();
-                       tf.setNetworkView(m_view);
-                       executeTask(tf);
+                       Object context = tf.createTunableContext();
+                       m_view.manager.execute(tf.createTaskIterator(context, 
m_view), context);
                }
        }
 
@@ -231,12 +229,14 @@
                String pref = (String)(props.get("preferredMenu"));
                String toolTip = (String) (props.get("tooltip"));
 
+               Object context = tf.createTunableContext();
+               
                // check if the menus are created dynamically, and if so add 
the listener
                final Object preferredTaskManager = 
props.get("preferredTaskManager");
                if ( preferredTaskManager != null && 
preferredTaskManager.toString().equals("menu")) {
                        if ( title == null )
                                title = "Dynamic";
-                       DynamicSubmenuListener submenu = 
m_view.menuTaskManager.getConfiguration(tf);
+                       DynamicSubmenuListener submenu = 
m_view.menuTaskManager.getConfiguration(tf, context);
                submenu.setMenuTitle(title);
                        popup.addPopupMenuListener( submenu );
                        return;
@@ -279,11 +279,11 @@
                // no title and no preferred menu
                if ( title == null && pref == null ) {
                        title = "Unidentified Task: " + 
Integer.toString(tf.hashCode());
-                       popup.add( createMenuItem(tf, title, 
useCheckBoxMenuItem, toolTip) );
+                       popup.add( createMenuItem(tf, context, title, 
useCheckBoxMenuItem, toolTip) );
 
                // title, but no preferred menu
                } else if ( title != null && pref == null ) {
-                       popup.add( createMenuItem(tf, title, 
useCheckBoxMenuItem, toolTip) );
+                       popup.add( createMenuItem(tf, context, title, 
useCheckBoxMenuItem, toolTip) );
 
                // no title, but preferred menu
                } else if ( title == null && pref != null ) {
@@ -294,7 +294,7 @@
                                title = pref.substring(last + 1);
                                pref = pref.substring(0, last);
                                final GravityTracker gravityTracker = 
tracker.getGravityTracker(pref);
-                               final JMenuItem item = createMenuItem(tf, 
title,useCheckBoxMenuItem, toolTip);
+                               final JMenuItem item = createMenuItem(tf, 
context, title,useCheckBoxMenuItem, toolTip);
                                if (useCheckBoxMenuItem) {
                                        final JCheckBoxMenuItem checkBox = 
(JCheckBoxMenuItem)item; 
                                        checkBox.setSelected(isSelected);
@@ -303,26 +303,25 @@
                        // otherwise just use the preferred menu as the 
menuitem name
                        } else {
                                title = pref;
-                               popup.add( createMenuItem(tf, title, 
useCheckBoxMenuItem, toolTip) );
+                               popup.add( createMenuItem(tf, context, title, 
useCheckBoxMenuItem, toolTip) );
                        }
 
                // title and preferred menu
                } else {
                        final GravityTracker gravityTracker = 
tracker.getGravityTracker(pref);
-                       gravityTracker.addMenuItem(createMenuItem(tf, 
title,useCheckBoxMenuItem, toolTip), ++largeValue);
+                       gravityTracker.addMenuItem(createMenuItem(tf, context, 
title,useCheckBoxMenuItem, toolTip), ++largeValue);
                }
        }
 
-       private JMenuItem createMenuItem(TaskFactory tf, String title, boolean 
useCheckBoxMenuItem, String toolTipText) {
+       private JMenuItem createMenuItem(TaskFactory tf, Object tunableContext, 
String title, boolean useCheckBoxMenuItem, String toolTipText) {
                JMenuItem item;
-               PopupAction action = new PopupAction(tf,title);
+               PopupAction action = new PopupAction(tf, tunableContext, title);
                if ( useCheckBoxMenuItem )
                        item = new JCheckBoxMenuItem(action);
                else
                        item = new JMenuItem(action);
 
-               if ( tf instanceof TaskFactoryPredicate )
-                       item.setEnabled( ((TaskFactoryPredicate)tf).isReady() );
+               item.setEnabled(tf.isReady(tunableContext));
 
                item.setToolTipText(toolTipText);
                return item;
@@ -353,20 +352,15 @@
         */
        private class PopupAction extends AbstractAction {
                TaskFactory tf;
-               PopupAction(TaskFactory tf, String title) {
+               Object tunableContext;
+               PopupAction(TaskFactory tf, Object context, String title) {
                        super( title );
                        this.tf = tf;
+                       this.tunableContext = context;
                }
 
                public void actionPerformed(ActionEvent ae) {
-                       executeTask(tf);
+                       
m_view.manager.execute(tf.createTaskIterator(tunableContext), tunableContext);
                }
        }
-
-       /**
-        * A place to capture the common task execution behavior.
-        */
-       private void executeTask(TaskFactory tf) {
-               m_view.manager.execute(tf);
-       }
 }

Added: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/StaticTaskFactoryProvisioner.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/StaticTaskFactoryProvisioner.java
                             (rev 0)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/StaticTaskFactoryProvisioner.java
     2012-03-06 15:35:36 UTC (rev 28437)
@@ -0,0 +1,125 @@
+package org.cytoscape.ding.impl;
+
+import java.awt.datatransfer.Transferable;
+import java.awt.geom.Point2D;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+
+import org.cytoscape.dnd.DropNetworkViewTaskFactory;
+import org.cytoscape.dnd.DropNodeViewTaskFactory;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.task.EdgeViewTaskFactory;
+import org.cytoscape.task.NetworkViewTaskFactory;
+import org.cytoscape.task.NodeViewTaskFactory;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
+
+public class StaticTaskFactoryProvisioner {
+       public <T> TaskFactory<T> createFor(final NetworkViewTaskFactory<T> 
factory, CyNetworkView networkView) {
+               final Reference<CyNetworkView> reference = new 
WeakReference<CyNetworkView>(networkView);
+               return new ProvisioningTaskFactory<T>() {
+                       public TaskIterator createTaskIterator(T 
tunableContext) {
+                               return 
factory.createTaskIterator(tunableContext, reference.get());
+                       }
+                       
+                       public boolean isReady(T tunableContext) {
+                               return factory.isReady(tunableContext, 
reference.get());
+                       }
+                       
+                       @Override
+                       public T createTunableContext() {
+                               return factory.createTunableContext();
+                       }
+               };
+       }
+       
+       public <T> TaskFactory<T> createFor(final DropNetworkViewTaskFactory<T> 
factory, CyNetworkView networkView, final Transferable transferable, final 
Point2D point, final Point2D transformedPoint) {
+               final Reference<CyNetworkView> reference = new 
WeakReference<CyNetworkView>(networkView);
+               return new ProvisioningTaskFactory<T>() {
+                       public TaskIterator createTaskIterator(T 
tunableContext) {
+                               return 
factory.createTaskIterator(tunableContext, reference.get(), transferable, 
point, transformedPoint);
+                       }
+                       
+                       public boolean isReady(T tunableContext) {
+                               return factory.isReady(tunableContext, 
reference.get(), transferable, point, transformedPoint);
+                       }
+                       
+                       @Override
+                       public T createTunableContext() {
+                               return factory.createTunableContext();
+                       }
+               };
+       }
+
+       public <T> TaskFactory<T> createFor(final NodeViewTaskFactory<T> 
factory, View<CyNode> nodeView, CyNetworkView networkView) {
+               final Reference<View<CyNode>> nodeReference = new 
WeakReference<View<CyNode>>(nodeView);
+               final Reference<CyNetworkView> networkReference = new 
WeakReference<CyNetworkView>(networkView);
+               return new ProvisioningTaskFactory<T>() {
+                       public TaskIterator createTaskIterator(T 
tunableContext) {
+                               return 
factory.createTaskIterator(tunableContext, nodeReference.get(), 
networkReference.get());
+                       }
+                       
+                       public boolean isReady(T tunableContext) {
+                               return factory.isReady(tunableContext, 
nodeReference.get(), networkReference.get());
+                       }
+                       
+                       @Override
+                       public T createTunableContext() {
+                               return factory.createTunableContext();
+                       }
+               };
+       }
+
+       public <T> TaskFactory<T> createFor(final EdgeViewTaskFactory<T> 
factory, View<CyEdge> edgeView, CyNetworkView networkView) {
+               final Reference<View<CyEdge>> edgeReference = new 
WeakReference<View<CyEdge>>(edgeView);
+               final Reference<CyNetworkView> networkReference = new 
WeakReference<CyNetworkView>(networkView);
+               return new ProvisioningTaskFactory<T>() {
+                       public TaskIterator createTaskIterator(T 
tunableContext) {
+                               return 
factory.createTaskIterator(tunableContext, edgeReference.get(), 
networkReference.get());
+                       }
+                       
+                       public boolean isReady(T tunableContext) {
+                               return factory.isReady(tunableContext, 
edgeReference.get(), networkReference.get());
+                       }
+                       
+                       @Override
+                       public T createTunableContext() {
+                               return factory.createTunableContext();
+                       }
+               };
+       }
+
+       public <T> TaskFactory<T> createFor(final DropNodeViewTaskFactory<T> 
factory, View<CyNode> nodeView, CyNetworkView networkView, final Transferable 
transferable, final Point2D point, final Point2D transformedPoint) {
+               final Reference<View<CyNode>> nodeReference = new 
WeakReference<View<CyNode>>(nodeView);
+               final Reference<CyNetworkView> networkReference = new 
WeakReference<CyNetworkView>(networkView);
+               return new ProvisioningTaskFactory<T>() {
+                       public TaskIterator createTaskIterator(T 
tunableContext) {
+                               return 
factory.createTaskIterator(tunableContext, nodeReference.get(), 
networkReference.get(), transferable, point, transformedPoint);
+                       }
+                       
+                       public boolean isReady(T tunableContext) {
+                               return factory.isReady(tunableContext, 
nodeReference.get(), networkReference.get(), transferable, point, 
transformedPoint);
+                       }
+                       
+                       @Override
+                       public T createTunableContext() {
+                               return factory.createTunableContext();
+                       }
+               };
+       }
+
+       static abstract class ProvisioningTaskFactory<T> implements 
TaskFactory<T> {
+               @Override
+               public TaskIterator createTaskIterator() {
+                       return createTaskIterator(null);
+               }
+               
+               @Override
+               public boolean isReady() {
+                       return isReady(null);
+               }
+       }
+}

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/SwitchGraphicsDetailTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/SwitchGraphicsDetailTaskFactory.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/SwitchGraphicsDetailTaskFactory.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -5,11 +5,11 @@
 
 import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.property.CyProperty;
-import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.SimpleTaskFactory;
 import org.cytoscape.work.TaskIterator;
 
 
-public class SwitchGraphicsDetailTaskFactory implements TaskFactory {
+public class SwitchGraphicsDetailTaskFactory extends SimpleTaskFactory {
        private final CyApplicationManager appManager;
        private final CyProperty<Properties> defaultProps;
 

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/cyannotator/tasks/DropAnnotationTaskFactory.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/cyannotator/tasks/DropAnnotationTaskFactory.java
      2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/cyannotator/tasks/DropAnnotationTaskFactory.java
      2012-03-06 15:35:36 UTC (rev 28437)
@@ -10,11 +10,7 @@
 import org.cytoscape.ding.impl.cyannotator.create.AnnotationFactory; 
 
 
-public class DropAnnotationTaskFactory implements DropNetworkViewTaskFactory {
-       private CyNetworkView view;
-       private Transferable t;
-       private Point2D javaPt;
-       private Point2D xformPt;
+public class DropAnnotationTaskFactory implements 
DropNetworkViewTaskFactory<Object> {
        private final BasicGraphicalEntity bge; 
        private final AnnotationFactory annotationFactory;
        
@@ -23,17 +19,18 @@
                this.annotationFactory = annotationFactory;
        }
 
-       public void setNetworkView(CyNetworkView view) {
-               this.view = view;
+       @Override
+       public TaskIterator createTaskIterator(Object tunableContext, 
CyNetworkView view, Transferable t, Point2D javaPt, Point2D xformPt) {
+               return new TaskIterator(new DropAnnotationTask(view, t, 
xformPt, bge, annotationFactory));
        }
-
-       public void setDropInformation(Transferable t, Point2D javaPt, Point2D 
xformPt) {
-               this.t = t;
-               this.javaPt = javaPt;
-               this.xformPt = xformPt;
+       
+       @Override
+       public boolean isReady(Object tunableContext, CyNetworkView 
networkView, Transferable t, Point2D javaPt, Point2D xformPt) {
+               return true;
        }
-
-       public TaskIterator createTaskIterator() {
-               return new TaskIterator(new DropAnnotationTask(view, t, 
xformPt, bge, annotationFactory));
+       
+       @Override
+       public Object createTunableContext() {
+               return null;
        }
 }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
       2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutMenuPopulator.java
       2012-03-06 15:35:36 UTC (rev 28437)
@@ -95,10 +95,10 @@
                //       That class provides submenu bits that the framework 
needs so
                //       Implementors of CyLayoutAlgorithm would need to mimic 
that
                //       somehow if they choose to implement from scratch.
-               UndoSupportTaskFactory<?> taskFactory = new 
UndoSupportTaskFactory<T>((AbstractLayoutAlgorithm<T>) layout, undo, 
eventHelper);
-               TaskFactory<?> provisioner = 
factoryProvisioner.createFor(taskFactory);
+               UndoSupportTaskFactory<T> taskFactory = new 
UndoSupportTaskFactory<T>((AbstractLayoutAlgorithm<T>) layout, undo, 
eventHelper);
+               TaskFactory<T> provisioner = 
factoryProvisioner.createFor(taskFactory);
                // get the submenu listener from the task manager
-               DynamicSubmenuListener submenu = 
tm.getConfiguration(provisioner);
+               DynamicSubmenuListener submenu = 
tm.getConfiguration(provisioner, provisioner.createTunableContext());
                submenu.setMenuTitle(menuName);
 
                // now wrap it in a menulistener that sets the current network 
view for the layout

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutSettingsDialog.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutSettingsDialog.java
      2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/layout/ui/LayoutSettingsDialog.java
      2012-03-06 15:35:36 UTC (rev 28437)
@@ -70,6 +70,7 @@
 public class LayoutSettingsDialog extends JDialog implements ActionListener {
        private final static long serialVersionUID = 1202339874277105L;
        private TaskFactory currentLayout = null;
+       private Object currentTunableContext;
 
        // Dialog components
        private JLabel titleLabel; // Our title
@@ -129,8 +130,7 @@
                if (command.equals("done"))
                        setVisible(false);
                else if (command.equals("execute")) {
-                       Object context = currentLayout.createTunableContext();
-                       
taskManager.execute(currentLayout.createTaskIterator(context), context);
+                       
taskManager.execute(currentLayout.createTaskIterator(currentTunableContext), 
currentTunableContext);
                } else {
                        // OK, initialize and display
                        initialize();
@@ -357,7 +357,8 @@
                        if (!(o instanceof String)) {
                                final CyLayoutAlgorithm<?> newLayout = 
(CyLayoutAlgorithm<?>)o;
                                TaskFactory<?> provisioner = 
factoryProvisioner.createFor(newLayout);
-                               JPanel tunablePanel = 
taskManager.getConfiguration(provisioner);
+                               Object context = 
provisioner.createTunableContext();
+                               JPanel tunablePanel = 
taskManager.getConfiguration(provisioner, context);
 
                                if (tunablePanel == null){
                                        
JOptionPane.showMessageDialog(LayoutSettingsDialog.this, "Can not change 
setting for this algorithm, because tunable info is not avialable!", "Warning", 
JOptionPane.WARNING_MESSAGE);
@@ -368,6 +369,7 @@
                                        algorithmPanel.add(tunablePanel);       
                                
                                }
                                currentLayout = provisioner;
+                               currentTunableContext = context;
                                LayoutSettingsDialog.this.pack();
                        }
                }

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/task/CytoPanelTaskFactoryTunableAction.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/task/CytoPanelTaskFactoryTunableAction.java
      2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/swing-application-impl/src/main/java/org/cytoscape/internal/task/CytoPanelTaskFactoryTunableAction.java
      2012-03-06 15:35:36 UTC (rev 28437)
@@ -30,31 +30,27 @@
 package org.cytoscape.internal.task;
 
 
+import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-
 import java.util.Map;
 import java.util.Properties;
 
+import javax.swing.Icon;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.Icon;
-import java.awt.Component;
 
 import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.application.swing.CySwingApplication;
-import org.cytoscape.application.swing.CytoPanel;
+import org.cytoscape.application.swing.AbstractCyAction;
 import org.cytoscape.application.swing.CytoPanelComponent;
 import org.cytoscape.application.swing.CytoPanelName;
-import org.cytoscape.application.swing.AbstractCyAction;
+import org.cytoscape.service.util.CyServiceRegistrar;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TunableValidator;
 import org.cytoscape.work.TunableValidator.ValidationState;
 import org.cytoscape.work.swing.PanelTaskManager;
-import org.cytoscape.service.util.CyServiceRegistrar;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -110,6 +106,7 @@
 
        final private static CytoPanelName DEFAULT_CYTOPANEL = 
CytoPanelName.WEST;
        final private TaskFactory factory;
+       final private Object context;
        final private PanelTaskManager manager;
        final private Map<String, String> serviceProps;
        final private CytoPanelName cytoPanelName;
@@ -129,6 +126,7 @@
                this.serviceProps = serviceProps;
                this.registrar = registrar;
                this.cytoPanelName = getCytoPanelName(); 
+               this.context = factory.createTunableContext();
        }
 
        private CytoPanelName getCytoPanelName() {
@@ -150,7 +148,7 @@
         *  Creates a new CytoPanel component and adds it to a CytoPanel.
         */
        public void actionPerformed(final ActionEvent a) {
-               final JPanel innerPanel = manager.getConfiguration(factory);
+               final JPanel innerPanel = manager.getConfiguration(factory, 
context);
                if (innerPanel == null)
                        return;
 

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuItem.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuItem.java
      2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuItem.java
      2012-03-06 15:35:36 UTC (rev 28437)
@@ -1,18 +1,16 @@
 
 package org.cytoscape.work.internal.submenu;
 
-import org.cytoscape.work.TaskIterator;
-import org.cytoscape.work.TunableMutator;
-import org.cytoscape.work.AbstractTaskManager;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JMenuItem;
+
 import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
 import org.cytoscape.work.swing.DialogTaskManager;
 import org.cytoscape.work.swing.SubmenuTunableHandler;
 
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
 class SubmenuItem extends JMenuItem implements ActionListener {
 
        private final DialogTaskManager dtm;

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuListener.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuListener.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuListener.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -1,69 +1,72 @@
 
 package org.cytoscape.work.internal.submenu;
 
-import org.cytoscape.work.TaskFactory;
-import org.cytoscape.work.swing.DynamicSubmenuListener;
-
+import javax.swing.JMenu;
 import javax.swing.JMenuItem;
-import javax.swing.JMenu;
 import javax.swing.JPopupMenu;
-import javax.swing.event.MenuListener;
 import javax.swing.event.MenuEvent;
-import javax.swing.event.PopupMenuListener;
 import javax.swing.event.PopupMenuEvent;
 
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.swing.DynamicSubmenuListener;
+
 class SubmenuListener implements DynamicSubmenuListener {
 
-       private final TaskFactory tf;
        private final SubmenuTunableMutator stm;
 
        private String menuName;
        private JMenuItem lastMenuItem;
        private boolean enableState;
+       private Object tunableContext;
 
-       SubmenuListener(SubmenuTunableMutator stm, TaskFactory tf) {
+       SubmenuListener(SubmenuTunableMutator stm, TaskFactory<?> tf, Object 
tunableContext) {
                this.stm = stm;
-               this.tf = tf;
                this.menuName = "None Specified";
-               this.enableState = true; 
+               this.enableState = true;
+               this.tunableContext = tunableContext;
+               stm.registerTunableContext(tf, tunableContext);
        }
 
        @Override
        public void popupMenuCanceled(PopupMenuEvent e) {
+               stm.unregisterTunableContext(tunableContext);
                removePopupMenuItem((JPopupMenu)(e.getSource()));
        }
 
        @Override
        public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+               stm.unregisterTunableContext(tunableContext);
                removePopupMenuItem((JPopupMenu)(e.getSource()));
        }
 
        @Override
        public void popupMenuWillBecomeVisible(PopupMenuEvent e)  {
                JPopupMenu parentMenu = (JPopupMenu)(e.getSource());
-               lastMenuItem = stm.buildConfiguration(tf);
+               lastMenuItem = stm.buildConfiguration(tunableContext);
                if ( lastMenuItem != null ) {
                        if ( lastMenuItem instanceof JMenu )
                                lastMenuItem.setText(menuName);
                        lastMenuItem.setEnabled(enableState);
                        parentMenu.add( lastMenuItem );
-               } 
+               }
        }
 
        @Override
        public void menuCanceled(MenuEvent e) { 
+               stm.unregisterTunableContext(tunableContext);
                removeMenuItem((JMenu)(e.getSource()));
        }
 
        @Override
        public void menuDeselected(MenuEvent e) { 
+               stm.unregisterTunableContext(tunableContext);
                removeMenuItem((JMenu)(e.getSource()));
        }
 
        @Override
        public void menuSelected(MenuEvent e)  {
                JMenu parentMenu = (JMenu)(e.getSource());
-               lastMenuItem = stm.buildConfiguration(tf);
+               lastMenuItem = stm.buildConfiguration(tunableContext);
                if ( lastMenuItem != null ) {
                        String title = lastMenuItem.getText(); 
                        if (title == null || title.isEmpty()) {

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTaskManagerImpl.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTaskManagerImpl.java
   2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTaskManagerImpl.java
   2012-03-06 15:35:36 UTC (rev 28437)
@@ -19,8 +19,8 @@
                this.dialogTaskManager = dialogTaskManager;
        }
 
-       public DynamicSubmenuListener getConfiguration(TaskFactory tf) {
-               SubmenuListener listener = new SubmenuListener(stm,tf); 
+       public DynamicSubmenuListener getConfiguration(TaskFactory factory, 
Object tunableContext) {
+               SubmenuListener listener = new SubmenuListener(stm, factory, 
tunableContext);   
                return listener; 
        }
 

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTunableMutator.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTunableMutator.java
    2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/submenu/SubmenuTunableMutator.java
    2012-03-06 15:35:36 UTC (rev 28437)
@@ -1,23 +1,27 @@
 
 package org.cytoscape.work.internal.submenu;
 
-import org.cytoscape.work.TunableMutator;
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+import javax.swing.JMenuItem;
+
 import org.cytoscape.work.AbstractTunableInterceptor;
 import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TunableMutator;
 import org.cytoscape.work.swing.DialogTaskManager;
 import org.cytoscape.work.swing.SubmenuTunableHandler;
 
-import java.util.List;
-import java.util.Map;
-import javax.swing.JMenuItem;
-
 public class SubmenuTunableMutator extends 
AbstractTunableInterceptor<SubmenuTunableHandler> 
        implements TunableMutator<SubmenuTunableHandler,JMenuItem> {
        
        private final DialogTaskManager dtm;
 
+       private final Map<Object, TaskFactory<?>> taskFactoriesByContext;
+       
        public SubmenuTunableMutator(DialogTaskManager dtm) {
                this.dtm = dtm;
+               taskFactoriesByContext = new IdentityHashMap<Object, 
TaskFactory<?>>();
        }
 
        public void setConfigurationContext(Object o) {
@@ -25,13 +29,12 @@
        }
 
        public JMenuItem buildConfiguration(Object objectWithTunables) {
-               TaskFactory tf;
-               if ( objectWithTunables instanceof TaskFactory )
-                       tf = (TaskFactory)objectWithTunables;
-               else
+               TaskFactory<?> tf = 
taskFactoriesByContext.get(objectWithTunables);
+               if (tf == null) {
                        return null;
+               }
 
-               Map<String,SubmenuTunableHandler> handlers = getHandlers(tf);
+               Map<String,SubmenuTunableHandler> handlers = 
getHandlers(objectWithTunables);
                for ( SubmenuTunableHandler handler : handlers.values() ) {
                        handler.setExecutionParams(dtm,tf);
                        handler.handle();
@@ -44,5 +47,12 @@
                return true;    
        }
 
+       void registerTunableContext(TaskFactory<?> factory, Object 
tunableContext) {
+               taskFactoriesByContext.put(tunableContext, factory);
+       }
+       
+       void unregisterTunableContext(Object tunableContext) {
+               taskFactoriesByContext.remove(tunableContext);
+       }
 }
 

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
     2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
     2012-03-06 15:35:36 UTC (rev 28437)
@@ -42,7 +42,7 @@
 
 
        @Override 
-       public Object getConfiguration(TaskFactory tf) {
+       public Object getConfiguration(TaskFactory factory, Object context) {
                throw new UnsupportedOperationException("There is no 
configuration available for a SyncrhonousTaskManager");    
        }
 

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JDialogTaskManager.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JDialogTaskManager.java
  2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JDialogTaskManager.java
  2012-03-06 15:35:36 UTC (rev 28437)
@@ -124,14 +124,14 @@
 
 
        @Override 
-       public JDialog getConfiguration(TaskFactory tf) {
+       public JDialog getConfiguration(TaskFactory factory, Object 
tunableContext) {
                throw new UnsupportedOperationException("There is no 
configuration available for a DialogTaskManager"); 
        }
 
 
        @Override
        public void execute(final TaskIterator iterator) {
-               execute(iterator, true);
+               execute(iterator, null);
        }
 
        /**

Modified: 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JPanelTaskManager.java
===================================================================
--- 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JPanelTaskManager.java
   2012-03-06 01:46:33 UTC (rev 28436)
+++ 
csplugins/trunk/toronto/jm/cy3-stateless-taskfactory-alt1/impl/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/task/JPanelTaskManager.java
   2012-03-06 15:35:36 UTC (rev 28437)
@@ -38,8 +38,8 @@
        }
 
        @Override 
-       public JPanel getConfiguration(TaskFactory tf) {
-               return panelTunableMutator.buildConfiguration(tf);
+       public JPanel getConfiguration(TaskFactory factory, Object 
tunableContext) {
+               return panelTunableMutator.buildConfiguration(tunableContext);
        }
 
        @Override

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to