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.