Author: mes
Date: 2011-11-01 17:07:15 -0700 (Tue, 01 Nov 2011)
New Revision: 27367
Added:
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadVisualStyles.java
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/SynchronousTaskManager.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
core3/impl/trunk/work-swing-impl/impl/src/test/
core3/impl/trunk/work-swing-impl/impl/src/test/java/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTaskManagerTest.java
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableHandlerTest.java
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableMutatorTest.java
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/TunableHolder.java
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactory.java
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTask.java
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTaskFactoryImpl.java
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
core3/impl/trunk/work-swing-impl/pom.xml
Log:
added support for a SynchronousTaskManager that executes tasks synchronously
and ported tasks that used to use ValuedTask to use this instead
Added:
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadVisualStyles.java
===================================================================
---
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadVisualStyles.java
(rev 0)
+++
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadVisualStyles.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,19 @@
+
+package org.cytoscape.task.creation;
+
+import org.cytoscape.view.vizmap.VisualStyle;
+import java.util.Set;
+import java.io.File;
+
+/**
+ * An interface for creating new, empty network views.
+ */
+public interface LoadVisualStyles {
+
+ /**
+ * Return a set of VisualStyle objects read from the specified file.
+ * @param f The file containing visual styles to be read.
+ * @return a set of VisualStyle objects read from the specified file.
+ */
+ Set<VisualStyle> loadStyles(File f);
+}
Added:
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/SynchronousTaskManager.java
===================================================================
---
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/SynchronousTaskManager.java
(rev 0)
+++
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/SynchronousTaskManager.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,14 @@
+
+
+package org.cytoscape.work;
+
+import java.util.Map;
+
+/**
+ * A marker interface that indicates that the TaskManager in question will
+ * execute the tasks found in the TaskFactory synchronously, rather than
+ * asynchronously.
+ */
+public interface SynchronousTaskManager<T> extends
TaskManager<T,Map<String,Object>> {
+
+}
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -17,6 +17,7 @@
import org.cytoscape.io.read.CySessionReaderManager;
import org.cytoscape.io.read.VizmapReaderManager;
import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.SynchronousTaskManager;
import org.cytoscape.property.CyProperty;
import org.cytoscape.session.CyNetworkNaming;
import org.cytoscape.io.write.CySessionWriterManager;
@@ -31,6 +32,7 @@
import org.cytoscape.io.write.VizmapWriterManager;
import org.cytoscape.io.read.CyNetworkReaderManager;
import org.cytoscape.io.util.RecentlyOpenedTracker;
+import org.cytoscape.task.creation.LoadVisualStyles;
import org.cytoscape.task.internal.export.vizmap.ExportVizmapTaskFactory;
import org.cytoscape.task.internal.table.DeleteColumnTaskFactory;
@@ -156,10 +158,11 @@
RenderingEngineManager renderingEngineManagerServiceRef =
getService(bc,RenderingEngineManager.class);
CyLayoutAlgorithmManager cyLayoutsServiceRef =
getService(bc,CyLayoutAlgorithmManager.class);
CyTableWriterManager cyTableWriterManagerRef =
getService(bc,CyTableWriterManager.class);
+ SynchronousTaskManager synchronousTaskManagerServiceRef =
getService(bc,SynchronousTaskManager.class);
LoadAttributesFileTaskFactoryImpl loadAttrsFileTaskFactory =
new
LoadAttributesFileTaskFactoryImpl(cyDataTableReaderManagerServiceRef,cyTableManagerServiceRef);
LoadAttributesURLTaskFactoryImpl loadAttrsURLTaskFactory = new
LoadAttributesURLTaskFactoryImpl(cyDataTableReaderManagerServiceRef,cyTableManagerServiceRef);
- LoadVizmapFileTaskFactoryImpl loadVizmapFileTaskFactory = new
LoadVizmapFileTaskFactoryImpl(vizmapReaderManagerServiceRef,visualMappingManagerServiceRef);
+ LoadVizmapFileTaskFactoryImpl loadVizmapFileTaskFactory = new
LoadVizmapFileTaskFactoryImpl(vizmapReaderManagerServiceRef,visualMappingManagerServiceRef,synchronousTaskManagerServiceRef);
LoadNetworkFileTaskFactoryImpl loadNetworkFileTaskFactory = new
LoadNetworkFileTaskFactoryImpl(cyNetworkReaderManagerServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyPropertyServiceRef,cyNetworkNamingServiceRef);
LoadNetworkURLTaskFactoryImpl loadNetworkURLTaskFactory = new
LoadNetworkURLTaskFactoryImpl(cyNetworkReaderManagerServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyPropertyServiceRef,cyNetworkNamingServiceRef,streamUtilRef);
SetCurrentNetworkTaskFactoryImpl setCurrentNetworkTaskFactory =
new
SetCurrentNetworkTaskFactoryImpl(cyApplicationManagerServiceRef,cyNetworkManagerServiceRef);
@@ -183,7 +186,7 @@
UnHideAllTaskFactory unHideAllTaskFactory = new
UnHideAllTaskFactory(undoSupportServiceRef,cyEventHelperRef);
UnHideAllNodesTaskFactory unHideAllNodesTaskFactory = new
UnHideAllNodesTaskFactory(undoSupportServiceRef,cyEventHelperRef);
UnHideAllEdgesTaskFactory unHideAllEdgesTaskFactory = new
UnHideAllEdgesTaskFactory(undoSupportServiceRef,cyEventHelperRef);
- NewEmptyNetworkTaskFactory newEmptyNetworkTaskFactory = new
NewEmptyNetworkTaskFactory(cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,taskManagerServiceRef);
+ NewEmptyNetworkTaskFactory newEmptyNetworkTaskFactory = new
NewEmptyNetworkTaskFactory(cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,synchronousTaskManagerServiceRef);
CloneNetworkTaskFactory cloneNetworkTaskFactory = new
CloneNetworkTaskFactory(cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,visualMappingManagerServiceRef,cyNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkNamingServiceRef,cyEventHelperRef);
NewNetworkSelectedNodesEdgesTaskFactory
newNetworkSelectedNodesEdgesTaskFactory = new
NewNetworkSelectedNodesEdgesTaskFactory(undoSupportServiceRef,cyRootNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,visualMappingManagerServiceRef,cyApplicationManagerServiceRef,cyEventHelperRef);
NewNetworkSelectedNodesOnlyTaskFactory
newNetworkSelectedNodesOnlyTaskFactory = new
NewNetworkSelectedNodesOnlyTaskFactory(undoSupportServiceRef,cyRootNetworkFactoryServiceRef,cyNetworkViewFactoryServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyNetworkNamingServiceRef,visualMappingManagerServiceRef,cyApplicationManagerServiceRef,cyEventHelperRef);
@@ -246,6 +249,7 @@
loadVizmapFileTaskFactoryProps.setProperty("menuGravity","3.0");
loadVizmapFileTaskFactoryProps.setProperty("title","Vizmap
File...");
registerService(bc,loadVizmapFileTaskFactory,TaskFactory.class,
loadVizmapFileTaskFactoryProps);
+
registerService(bc,loadVizmapFileTaskFactory,LoadVisualStyles.class, new
Properties());
Properties loadAttrsFileTaskFactoryProps = new Properties();
loadAttrsFileTaskFactoryProps.setProperty("preferredMenu","File.Import.Table");
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTask.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -38,7 +38,7 @@
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.work.TaskMonitor;
-import org.cytoscape.work.ValuedTask;
+import org.cytoscape.work.AbstractTask;
import org.cytoscape.session.CyNetworkNaming;
@@ -46,7 +46,7 @@
* Create an empty network with view.
*
*/
-public class NewEmptyNetworkTask implements ValuedTask<CyNetworkView> {
+public class NewEmptyNetworkTask extends AbstractTask {
private final CyNetworkFactory cnf;
private final CyNetworkViewFactory cnvf;
@@ -55,6 +55,8 @@
private final CyNetworkViewManager networkViewManager;
private boolean cancel = false;
+ private CyNetworkView view;
+
public NewEmptyNetworkTask(CyNetworkFactory cnf, CyNetworkViewFactory
cnvf, CyNetworkManager netmgr,
final CyNetworkViewManager
networkViewManager, final CyNetworkNaming namingUtil) {
this.networkManager = netmgr;
@@ -64,17 +66,20 @@
this.namingUtil = namingUtil;
}
- public CyNetworkView run(TaskMonitor tm) {
+ public void run(TaskMonitor tm) {
final CyNetwork newNet = cnf.getInstance();
newNet.getCyRow().set(CyTableEntry.NAME,
namingUtil.getSuggestedNetworkTitle("Network"));
- final CyNetworkView view = cnvf.getNetworkView(newNet);
+ view = cnvf.getNetworkView(newNet);
networkManager.addNetwork(newNet);
networkViewManager.addNetworkView(view);
- return view;
}
@Override
public void cancel() {
cancel = true;
}
+
+ public CyNetworkView getView() {
+ return view;
+ }
}
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactory.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactory.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/creation/NewEmptyNetworkTaskFactory.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -32,7 +32,7 @@
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.work.TaskFactory;
import org.cytoscape.work.TaskIterator;
-import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.SynchronousTaskManager;
import org.cytoscape.work.ValuedTaskExecutor;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.view.model.CyNetworkViewFactory;
@@ -47,33 +47,29 @@
private final CyNetworkManager netmgr;
private final CyNetworkViewManager networkViewManager;
private final CyNetworkNaming namingUtil;
- private final TaskManager taskManager;
+ private final SynchronousTaskManager syncTaskMgr;
private ValuedTaskExecutor<CyNetworkView> resultHolder;
+ private NewEmptyNetworkTask task;
- public NewEmptyNetworkTaskFactory(final CyNetworkFactory cnf, final
CyNetworkViewFactory cnvf, final CyNetworkManager netmgr, final
CyNetworkViewManager networkViewManager, final CyNetworkNaming namingUtil,
final TaskManager taskManager)
+ public NewEmptyNetworkTaskFactory(final CyNetworkFactory cnf, final
CyNetworkViewFactory cnvf, final CyNetworkManager netmgr, final
CyNetworkViewManager networkViewManager, final CyNetworkNaming namingUtil,
final SynchronousTaskManager syncTaskMgr)
{
this.cnf = cnf;
this.cnvf = cnvf;
this.netmgr = netmgr;
this.networkViewManager = networkViewManager;
this.namingUtil = namingUtil;
- this.taskManager = taskManager;
+ this.syncTaskMgr = syncTaskMgr;
}
public TaskIterator getTaskIterator() {
- resultHolder = new ValuedTaskExecutor<CyNetworkView>(
- new NewEmptyNetworkTask(cnf, cnvf, netmgr,
networkViewManager,namingUtil));
-
- return new TaskIterator(resultHolder);
+ task = new NewEmptyNetworkTask(cnf, cnvf, netmgr,
networkViewManager,namingUtil);
+ return new TaskIterator(task);
}
public CyNetworkView createNewEmptyNetworkView() {
- taskManager.execute(this);
- CyNetworkView view = null;
- try {
- view = resultHolder.get();
- } catch (Exception ie) { ie.printStackTrace(); return null; }
- return view;
+ // no tunables, so no need to set the execution context
+ syncTaskMgr.execute(this);
+ return task.getView();
}
}
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTask.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTask.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTask.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -18,6 +18,7 @@
private final VisualMappingManager vmMgr;
private final VizmapReaderManager vizmapReaderMgr;
+ private AddVisualStylesTask addVSTask;
public LoadVizmapFileTask(VizmapReaderManager vizmapReaderMgr,
VisualMappingManager vmMgr) {
this.vizmapReaderMgr = vizmapReaderMgr;
@@ -26,20 +27,29 @@
@Override
public void run(final TaskMonitor taskMonitor) throws Exception {
- if (file == null) throw new NullPointerException("No file
specified!");
+ if (file == null)
+ throw new NullPointerException("No file specified!");
VizmapReader reader = vizmapReaderMgr.getReader(file.toURI(),
file.getName());
- if (reader == null) throw new NullPointerException("Failed to
find appropriate reader for file: " + file);
+ if (reader == null)
+ throw new NullPointerException("Failed to find
appropriate reader for file: " + file);
- insertTasksAfterCurrentTask(reader, new
AddVisualStylesTask(reader, vmMgr));
+ addVSTask = new AddVisualStylesTask(reader, vmMgr);
+
+ insertTasksAfterCurrentTask(reader, addVSTask);
}
+
+ public Set<VisualStyle> getStyles() {
+ return addVSTask.getStyles();
+ }
}
class AddVisualStylesTask extends AbstractTask {
private final VizmapReader reader;
private final VisualMappingManager vmMgr;
+ private Set<VisualStyle> styles;
public AddVisualStylesTask(VizmapReader reader, VisualMappingManager
vmMgr) {
this.reader = reader;
@@ -49,7 +59,7 @@
@Override
public void run(TaskMonitor taskMonitor) throws Exception {
taskMonitor.setTitle("Loading visual styles...");
- final Set<VisualStyle> styles = reader.getVisualStyles();
+ styles = reader.getVisualStyles();
if (styles != null) {
int count = 1;
@@ -73,4 +83,8 @@
}
}
}
+
+ public Set<VisualStyle> getStyles() {
+ return styles;
+ }
}
Modified:
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTaskFactoryImpl.java
===================================================================
---
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTaskFactoryImpl.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadvizmap/LoadVizmapFileTaskFactoryImpl.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -2,23 +2,47 @@
import org.cytoscape.io.read.VizmapReaderManager;
import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.work.TaskFactory;
import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.SynchronousTaskManager;
+import org.cytoscape.task.creation.LoadVisualStyles;
+import java.util.Set;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.File;
-public class LoadVizmapFileTaskFactoryImpl implements TaskFactory {
+public class LoadVizmapFileTaskFactoryImpl implements TaskFactory,
LoadVisualStyles {
+
private final VizmapReaderManager vizmapReaderMgr;
private final VisualMappingManager vmMgr;
+ private final SynchronousTaskManager syncTaskManager;
+
+ private LoadVizmapFileTask task;
- public LoadVizmapFileTaskFactoryImpl(VizmapReaderManager
vizmapReaderMgr, VisualMappingManager vmMgr) {
+ public LoadVizmapFileTaskFactoryImpl(VizmapReaderManager
vizmapReaderMgr, VisualMappingManager vmMgr, SynchronousTaskManager
syncTaskManager) {
this.vizmapReaderMgr = vizmapReaderMgr;
this.vmMgr = vmMgr;
+ this.syncTaskManager = syncTaskManager;
}
@Override
public TaskIterator getTaskIterator() {
- return new TaskIterator(new LoadVizmapFileTask(vizmapReaderMgr,
vmMgr));
+ task = new LoadVizmapFileTask(vizmapReaderMgr, vmMgr);
+ return new TaskIterator(task);
}
+ public Set<VisualStyle> loadStyles(File f) {
+ // Set up map containing values to be assigned to tunables.
+ // The name "file" is the name of the tunable field in
LoadVizmapFileTask.
+ Map<String,Object> m = new HashMap<String,Object>();
+ m.put("file",f);
+
+ syncTaskManager.setExecutionContext(m);
+ syncTaskManager.execute(this);
+
+ return task.getStyles();
+ }
}
Modified:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
2011-11-02 00:02:29 UTC (rev 27366)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -8,6 +8,7 @@
import org.cytoscape.util.swing.FileUtil;
import org.cytoscape.property.bookmark.BookmarksUtil;
+import org.cytoscape.work.internal.sync.*;
import org.cytoscape.work.internal.task.*;
import org.cytoscape.work.internal.tunables.*;
import org.cytoscape.work.internal.submenu.*;
@@ -16,6 +17,7 @@
import org.cytoscape.work.swing.BasicGUITunableHandlerFactory;
import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.SynchronousTaskManager;
import org.cytoscape.work.undo.UndoSupport;
import org.cytoscape.work.swing.GUITunableHandlerFactory;
import org.cytoscape.work.TunableHandlerFactory;
@@ -75,6 +77,10 @@
BasicGUITunableHandlerFactory
listMultipleSelectionHandlerFactory = new
BasicGUITunableHandlerFactory(ListMultipleHandler.class,ListMultipleSelection.class);
URLHandlerFactory urlHandlerFactory = new
URLHandlerFactory(bookmarkServiceRef,bookmarksUtilServiceRef);
FileHandlerFactory fileHandlerFactory = new
FileHandlerFactory(fileUtilRef,supportedFileTypesManager);
+
+ SyncTunableMutator syncTunableMutator = new
SyncTunableMutator();
+ SyncTunableHandlerFactory syncTunableHandlerFactory = new
SyncTunableHandlerFactory();
+ SyncTaskManager syncTaskManager = new
SyncTaskManager(syncTunableMutator);
registerService(bc,undoSupport,UndoSupport.class, new
Properties());
@@ -101,15 +107,19 @@
registerService(bc,listMultipleSelectionHandlerFactory,GUITunableHandlerFactory.class,
new Properties());
registerService(bc,fileHandlerFactory,GUITunableHandlerFactory.class, new
Properties());
registerService(bc,urlHandlerFactory,GUITunableHandlerFactory.class, new
Properties());
+
registerService(bc,syncTaskManager,SynchronousTaskManager.class, new
Properties());
+
registerService(bc,syncTunableHandlerFactory,TunableHandlerFactory.class, new
Properties());
registerServiceListener(bc,supportedFileTypesManager,"addInputStreamTaskFactory","removeInputStreamTaskFactory",InputStreamTaskFactory.class);
registerServiceListener(bc,supportedFileTypesManager,"addCyWriterTaskFactory","removeCyWriterTaskFactory",CyWriterFactory.class);
registerServiceListener(bc,jDialogTaskManager,"addTunableRecorder","removeTunableRecorder",TunableRecorder.class);
+
registerServiceListener(bc,syncTaskManager,"addTunableRecorder","removeTunableRecorder",TunableRecorder.class);
registerServiceListener(bc,jPanelTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",GUITunableHandlerFactory.class,
TunableHandlerFactory.class);
registerServiceListener(bc,jDialogTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",GUITunableHandlerFactory.class,
TunableHandlerFactory.class);
registerServiceListener(bc,submenuTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",SubmenuTunableHandlerFactory.class,
TunableHandlerFactory.class);
+
registerServiceListener(bc,syncTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",SyncTunableHandlerFactory.class,
TunableHandlerFactory.class);
}
}
Added:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,41 @@
+
+package org.cytoscape.work.internal.sync;
+
+
+import org.cytoscape.work.Task;
+import org.cytoscape.work.TaskMonitor;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+class LoggingTaskMonitor implements TaskMonitor {
+
+ private static final Logger logger =
LoggerFactory.getLogger(LoggingTaskMonitor.class);
+
+ private Task task;
+
+ public LoggingTaskMonitor() {
+ }
+
+ public void setTask(final Task newTask) {
+ this.task = newTask;
+ }
+
+ public void setTitle(String title) {
+ logger.info("Task (" + task.toString() + ") title: " + title);
+ }
+
+ public void setStatusMessage(String statusMessage) {
+ logger.info("Task (" + task.toString() + ") status: " +
statusMessage);
+ }
+
+ public void setProgress(double progress) {
+ int prog = (int) Math.floor(progress * 100);
+ logger.info("Task (" + task.toString() + ") progress: " + prog
+ "%");
+ }
+
+ public void showException(Exception exception) {
+ logger.error("Exception executing task!", exception);
+ }
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,88 @@
+package org.cytoscape.work.internal.sync;
+
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import org.cytoscape.work.AbstractTaskManager;
+import org.cytoscape.work.SynchronousTaskManager;
+import org.cytoscape.work.Task;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TunableMutator;
+import org.cytoscape.work.TunableRecorder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Uses Swing components to create a user interface for the <code>Task</code>.
+ *
+ * This will not work if the application is running in headless mode.
+ */
+public class SyncTaskManager extends
AbstractTaskManager<Object,Map<String,Object>> implements
SynchronousTaskManager<Object> {
+
+ private static final Logger logger =
LoggerFactory.getLogger(SyncTaskManager.class);
+
+
+ private final SyncTunableMutator syncTunableMutator;
+
+ /**
+ * Construct with default behavior.
+ */
+ public SyncTaskManager(final SyncTunableMutator tunableMutator) {
+ super(tunableMutator);
+ this.syncTunableMutator = tunableMutator;
+ }
+
+
+ @Override
+ public void setExecutionContext(final Map<String,Object> o) {
+ syncTunableMutator.setConfigurationContext(o);
+ }
+
+
+ @Override
+ public Object getConfiguration(TaskFactory tf) {
+ throw new UnsupportedOperationException("There is no
configuration available for a SyncrhonousTaskManager");
+ }
+
+
+ @Override
+ public void execute(final TaskFactory factory) {
+ final LoggingTaskMonitor taskMonitor = new LoggingTaskMonitor();
+
+ try {
+
+ if ( !displayTunables(factory) )
+ return;
+
+ TaskIterator taskIterator = factory.getTaskIterator();
+
+ // now execute all subsequent tasks
+ while (taskIterator.hasNext()) {
+ final Task task = taskIterator.next();
+ taskMonitor.setTask(task);
+
+ if (!displayTunables(task))
+ return;
+
+ task.run(taskMonitor);
+ }
+
+ } catch (Exception exception) {
+ taskMonitor.showException(exception);
+ }
+ }
+
+
+ private boolean displayTunables(final Object task) throws Exception {
+ boolean ret = syncTunableMutator.validateAndWriteBack(task);
+
+ for ( TunableRecorder ti : tunableRecorders )
+ ti.recordTunableState(task);
+
+ return ret;
+ }
+}
+
Added:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,41 @@
+
+package org.cytoscape.work.internal.sync;
+
+import org.cytoscape.work.AbstractTunableHandler;
+import org.cytoscape.work.Tunable;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.swing.SubmenuTunableHandler;
+import org.cytoscape.work.swing.DialogTaskManager;
+import org.cytoscape.work.util.ListSingleSelection;
+
+import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Map;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+
+public class SyncTunableHandler extends AbstractTunableHandler {
+
+ private Map<String,Object> valueMap;
+
+ public SyncTunableHandler(final Field field, final Object instance,
final Tunable tunable) {
+ super(field,instance,tunable);
+ }
+
+ public SyncTunableHandler(final Method getter, final Method setter,
final Object instance, final Tunable tunable) {
+ super(getter,setter,instance,tunable);
+ }
+
+ public void handle() {
+ try {
+ setValue( valueMap.get(getName()) );
+ } catch (Exception e) {
+ throw new RuntimeException("Exception setting tunable
value.", e);
+ }
+ }
+
+ public void setValueMap(Map<String,Object> valueMap) {
+ this.valueMap = valueMap;
+ }
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,22 @@
+
+
+package org.cytoscape.work.internal.sync;
+
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.cytoscape.work.Tunable;
+import org.cytoscape.work.TunableHandlerFactory;
+
+
+public class SyncTunableHandlerFactory implements
TunableHandlerFactory<SyncTunableHandler> {
+
+ public SyncTunableHandler getHandler(final Field field, final Object
instance, final Tunable tunable) {
+ return new SyncTunableHandler(field,instance,tunable);
+ }
+
+ public SyncTunableHandler getHandler(final Method getter, final Method
setter, final Object instance, final Tunable tunable) {
+ return new SyncTunableHandler(getter,setter,instance,tunable);
+ }
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,33 @@
+
+
+package org.cytoscape.work.internal.sync;
+
+import org.cytoscape.work.TunableMutator;
+import org.cytoscape.work.TunableHandler;
+import org.cytoscape.work.AbstractTunableInterceptor;
+
+import java.util.Map;
+
+public class SyncTunableMutator<S> extends
AbstractTunableInterceptor<SyncTunableHandler> implements
TunableMutator<SyncTunableHandler, S> {
+
+ private Map<String,Object> map;
+
+ public void setConfigurationContext(Object o) {
+ if ( o != null && o instanceof Map )
+ map = (Map<String,Object>)o;
+ }
+
+ public S buildConfiguration(Object o) {
+ return null;
+ }
+
+ public boolean validateAndWriteBack(Object o) {
+ Map<String,SyncTunableHandler> handlers = getHandlers(o);
+ for ( SyncTunableHandler handler : handlers.values() ) {
+ handler.setValueMap(map);
+ handler.handle();
+ }
+ return true;
+ }
+}
+
Added:
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTaskManagerTest.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTaskManagerTest.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTaskManagerTest.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,43 @@
+package org.cytoscape.work.internal.sync;
+
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import org.cytoscape.work.*;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class SyncTaskManagerTest {
+
+ @Test
+ public void testTaskManager() {
+ SyncTunableMutator stm = new SyncTunableMutator();
+ stm.addTunableHandlerFactory( new SyncTunableHandlerFactory(),
new Properties() );
+ SyncTaskManager taskManager = new SyncTaskManager(stm);
+
+ Map<String,Object> map = new HashMap<String,Object>();
+ map.put("tstring","hello");
+
+ taskManager.setExecutionContext(map);
+
+ TestTaskFactory tf = new TestTaskFactory();
+
+ taskManager.execute(tf);
+ }
+
+ public class TestTaskFactory implements TaskFactory {
+ public TaskIterator getTaskIterator() { return new
TaskIterator( new TestTask() ); }
+ }
+
+ public class TestTask extends AbstractTask {
+ @Tunable(description="asdf")
+ public String tstring = "goodbye";
+
+ public void run(TaskMonitor tm) {
+ assertEquals("hello",tstring);
+ }
+ }
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableHandlerTest.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableHandlerTest.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableHandlerTest.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,36 @@
+package org.cytoscape.work.internal.sync;
+
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import org.cytoscape.work.Tunable;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class SyncTunableHandlerTest {
+
+
+ @Test
+ public void testSyncTunableHandler() throws Exception {
+ TunableHolder th = new TunableHolder();
+
+ final Field stringField = th.getClass().getField("tstring");
+ final Tunable tun = stringField.getAnnotation(Tunable.class);
+ SyncTunableHandler syncHandler = new SyncTunableHandler(stringField,
th, tun);
+
+ Map<String,Object> map = new HashMap<String,Object>();
+ map.put("tstring","hello");
+
+ syncHandler.setValueMap(map);
+
+ assertEquals("goodbye",th.tstring);
+
+ syncHandler.handle();
+
+ assertEquals("hello",th.tstring);
+ }
+
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableMutatorTest.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableMutatorTest.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/SyncTunableMutatorTest.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,33 @@
+package org.cytoscape.work.internal.sync;
+
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import org.cytoscape.work.Tunable;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+public class SyncTunableMutatorTest {
+
+ @Test
+ public void testTunableMutator() {
+ SyncTunableMutator stm = new SyncTunableMutator();
+ stm.addTunableHandlerFactory( new SyncTunableHandlerFactory(),
new Properties() );
+
+ Map<String,Object> map = new HashMap<String,Object>();
+ map.put("tstring","hello");
+
+ stm.setConfigurationContext(map);
+
+ TunableHolder th = new TunableHolder();
+
+ assertEquals("goodbye",th.tstring);
+
+ stm.validateAndWriteBack(th);
+
+ assertEquals("hello",th.tstring);
+ }
+}
Added:
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/TunableHolder.java
===================================================================
---
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/TunableHolder.java
(rev 0)
+++
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/TunableHolder.java
2011-11-02 00:07:15 UTC (rev 27367)
@@ -0,0 +1,9 @@
+package org.cytoscape.work.internal.sync;
+
+import org.cytoscape.work.Tunable;
+
+
+public class TunableHolder {
+ @Tunable(description="something")
+ public String tstring = "goodbye";
+}
Modified: core3/impl/trunk/work-swing-impl/pom.xml
===================================================================
--- core3/impl/trunk/work-swing-impl/pom.xml 2011-11-02 00:02:29 UTC (rev
27366)
+++ core3/impl/trunk/work-swing-impl/pom.xml 2011-11-02 00:07:15 UTC (rev
27367)
@@ -132,5 +132,10 @@
<artifactId>event-api</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
--
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.