Author: mes
Date: 2012-03-22 13:52:23 -0700 (Thu, 22 Mar 2012)
New Revision: 28619

Added:
   core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java
   
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
   
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
   
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
   
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
   
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitorTest.java
Modified:
   
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/ImportNetworksTaskFactory.java
   
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadSession.java
   
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/loadnetwork/LoadNetworkURLTaskFactoryImpl.java
   
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/session/OpenSessionTaskFactory.java
   
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskTest.java
   
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/session/OpenSessionTaskFactoryTest.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
   
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
Log:
added a simple way for TaskFactories to provide an api with tunables configured 
from method parameters

Modified: 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/ImportNetworksTaskFactory.java
===================================================================
--- 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/ImportNetworksTaskFactory.java
      2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/ImportNetworksTaskFactory.java
      2012-03-22 20:52:23 UTC (rev 28619)
@@ -4,9 +4,10 @@
 import java.util.Set;
 
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.work.TaskIterator;
 
 public interface ImportNetworksTaskFactory {
        
-       Set<CyNetwork> loadCyNetworks(final URL url);
+       TaskIterator loadCyNetworks(final URL url);
 
 }

Modified: 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadSession.java
===================================================================
--- 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadSession.java
    2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/api/trunk/core-task-api/src/main/java/org/cytoscape/task/creation/LoadSession.java
    2012-03-22 20:52:23 UTC (rev 28619)
@@ -3,8 +3,11 @@
 import java.io.File;
 
 import org.cytoscape.session.CySession;
+import org.cytoscape.work.TaskIterator;
 
 public interface LoadSession {
        
-       CySession loadSession(final File file);
+       TaskIterator loadSession(final File file);
+
+       TaskIterator loadSession();
 }

Added: 
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java
===================================================================
--- 
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java    
                            (rev 0)
+++ 
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java    
    2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,28 @@
+
+
+package org.cytoscape.work;
+
+import java.util.Map;
+
+/**
+ * An API for setting tunable fields and methods with predetermined
+ * values in the Tasks found in the specified TaskIterator. This 
+ * interface is provided as a convenience to TaskFactory authors
+ * who also want to provide an addition API for their Task(s) that
+ * are specified with method parameters.
+ * @CyAPI.Api.Interface
+ */
+public interface TunableSetter {
+
+       /**
+        * This method takes as input a TaskIterator and a map of tunable names 
to tunable values and applies
+        * those values to any tunables found in the Tasks found in the 
TaskIterator.  The return value is
+        * a new TaskIterator containing pre-configured tasks.
+        * @param taskIterator The incoming TaskIterator which contains the 
tasks whose tunables will be set.
+        * @param tunableValues A map of names to tunable values.  The names 
must match the field or method
+        * name of the tunable in question.
+        * @return A new TaskIterator that contains Task(s) with tunable values 
already set. 
+        */
+       TaskIterator createTaskIterator(TaskIterator taskIterator, 
Map<String,Object> tunableValues);
+
+}

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
  2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/CyActivator.java
  2012-03-22 20:52:23 UTC (rev 28619)
@@ -39,6 +39,7 @@
 import org.cytoscape.task.TableTaskFactory;
 import org.cytoscape.task.creation.LoadVisualStyles;
 import org.cytoscape.task.creation.NewEmptyNetworkViewFactory;
+import org.cytoscape.task.creation.LoadSession;
 import org.cytoscape.task.internal.creation.CloneNetworkTaskFactory;
 import org.cytoscape.task.internal.creation.CreateNetworkViewTaskFactory;
 import org.cytoscape.task.internal.creation.NewEmptyNetworkTaskFactory;
@@ -110,6 +111,7 @@
 import org.cytoscape.work.SynchronousTaskManager;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.TunableSetter;
 import org.cytoscape.work.undo.UndoSupport;
 import org.osgi.framework.BundleContext;
 
@@ -155,6 +157,7 @@
                CyLayoutAlgorithmManager cyLayoutsServiceRef = 
getService(bc,CyLayoutAlgorithmManager.class);
                CyTableWriterManager cyTableWriterManagerRef = 
getService(bc,CyTableWriterManager.class);
                SynchronousTaskManager<?> synchronousTaskManagerServiceRef = 
getService(bc,SynchronousTaskManager.class);
+               TunableSetter tunableSetterServiceRef = 
getService(bc,TunableSetter.class);
                
                LoadAttributesFileTaskFactoryImpl loadAttrsFileTaskFactory = 
new LoadAttributesFileTaskFactoryImpl(cyDataTableReaderManagerServiceRef);
                LoadAttributesURLTaskFactoryImpl loadAttrsURLTaskFactory = new 
LoadAttributesURLTaskFactoryImpl(cyDataTableReaderManagerServiceRef);
@@ -165,7 +168,7 @@
                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,
 synchronousTaskManagerServiceRef);
+               LoadNetworkURLTaskFactoryImpl loadNetworkURLTaskFactory = new 
LoadNetworkURLTaskFactoryImpl(cyNetworkReaderManagerServiceRef,cyNetworkManagerServiceRef,cyNetworkViewManagerServiceRef,cyPropertyServiceRef,cyNetworkNamingServiceRef,streamUtilRef,
 synchronousTaskManagerServiceRef, tunableSetterServiceRef);
 
                SetCurrentNetworkTaskFactoryImpl setCurrentNetworkTaskFactory = 
new 
SetCurrentNetworkTaskFactoryImpl(cyApplicationManagerServiceRef,cyNetworkManagerServiceRef);
                DeleteSelectedNodesAndEdgesTaskFactory 
deleteSelectedNodesAndEdgesTaskFactory = new 
DeleteSelectedNodesAndEdgesTaskFactory(undoSupportServiceRef,cyApplicationManagerServiceRef,cyNetworkViewManagerServiceRef,visualMappingManagerServiceRef,cyEventHelperRef);
@@ -206,7 +209,7 @@
                FitSelectedTaskFactory fitSelectedTaskFactory = new 
FitSelectedTaskFactory(undoSupportServiceRef);
                FitContentTaskFactory fitContentTaskFactory = new 
FitContentTaskFactory(undoSupportServiceRef);
                NewSessionTaskFactory newSessionTaskFactory = new 
NewSessionTaskFactory(cySessionManagerServiceRef);
-               OpenSessionTaskFactory openSessionTaskFactory = new 
OpenSessionTaskFactory(cySessionManagerServiceRef,sessionReaderManagerServiceRef,cyApplicationManagerServiceRef,recentlyOpenedTrackerServiceRef,
 synchronousTaskManagerServiceRef);
+               OpenSessionTaskFactory openSessionTaskFactory = new 
OpenSessionTaskFactory(cySessionManagerServiceRef,sessionReaderManagerServiceRef,cyApplicationManagerServiceRef,recentlyOpenedTrackerServiceRef,
 synchronousTaskManagerServiceRef, tunableSetterServiceRef);
                SaveSessionTaskFactory saveSessionTaskFactory = new 
SaveSessionTaskFactory( sessionWriterManagerServiceRef, 
cySessionManagerServiceRef, recentlyOpenedTrackerServiceRef, cyEventHelperRef);
                SaveSessionAsTaskFactory saveSessionAsTaskFactory = new 
SaveSessionAsTaskFactory( sessionWriterManagerServiceRef, 
cySessionManagerServiceRef, recentlyOpenedTrackerServiceRef, cyEventHelperRef);
                ProxySettingsTaskFactory proxySettingsTaskFactory = new 
ProxySettingsTaskFactory(cyPropertyServiceRef, streamUtilRef);
@@ -737,6 +740,7 @@
                
openSessionTaskFactoryProps.setProperty("command","open-session");
                
openSessionTaskFactoryProps.setProperty("commandNamespace","cytoscape");
                registerService(bc,openSessionTaskFactory,TaskFactory.class, 
openSessionTaskFactoryProps);
+               registerService(bc,openSessionTaskFactory,LoadSession.class, 
openSessionTaskFactoryProps);
 
                Properties saveSessionTaskFactoryProps = new Properties();
                saveSessionTaskFactoryProps.setProperty("preferredMenu","File");

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskFactoryImpl.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskFactoryImpl.java
    2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskFactoryImpl.java
    2012-03-22 20:52:23 UTC (rev 28619)
@@ -47,6 +47,7 @@
 import org.cytoscape.work.AbstractTaskFactory;
 import org.cytoscape.work.SynchronousTaskManager;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TunableSetter;
 
 
 /**
@@ -64,13 +65,14 @@
        
        private final SynchronousTaskManager<?> syncTaskManager;
        
-       private LoadNetworkURLTask task;
+       private final TunableSetter tunableSetter; 
 
        public LoadNetworkURLTaskFactoryImpl(CyNetworkReaderManager mgr,
                                             CyNetworkManager netmgr,
                                             final CyNetworkViewManager 
networkViewManager,
                                             CyProperty<Properties> cyProps, 
CyNetworkNaming cyNetworkNaming,
-                                            StreamUtil streamUtil, final 
SynchronousTaskManager<?> syncTaskManager)
+                                            StreamUtil streamUtil, final 
SynchronousTaskManager<?> syncTaskManager,
+                                                TunableSetter tunableSetter)
        {
                this.mgr = mgr;
                this.netmgr = netmgr;
@@ -78,29 +80,21 @@
                this.props = cyProps.getProperties();
                this.cyNetworkNaming = cyNetworkNaming;
                this.streamUtil = streamUtil;
-               
+               this.tunableSetter = tunableSetter;
                this.syncTaskManager = syncTaskManager;
        }
 
        public TaskIterator createTaskIterator() {
-               task = new LoadNetworkURLTask(mgr, netmgr, networkViewManager, 
props, cyNetworkNaming, streamUtil);
                // Usually we need to create view, so expected number is 2.
-               return new TaskIterator(2, task);
+               return new TaskIterator(2, new LoadNetworkURLTask(mgr, netmgr, 
networkViewManager, props, cyNetworkNaming, streamUtil));
        }
        
        @Override
-       public Set<CyNetwork> loadCyNetworks(final URL url) {
+       public TaskIterator loadCyNetworks(final URL url) {
                
                final Map<String,Object> m = new HashMap<String,Object>();
                m.put("url", url);
-               
-               syncTaskManager.setExecutionContext(m);
-               syncTaskManager.execute(createTaskIterator());
-
-               final Set<CyNetwork> networks = new HashSet<CyNetwork>();
-               for(CyNetwork network: task.getCyNetworks())
-                       networks.add(network);
-               
-               return networks;
+       
+               return tunableSetter.createTaskIterator( 
this.createTaskIterator(), m);
        }
 }

Modified: 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/session/OpenSessionTaskFactory.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/session/OpenSessionTaskFactory.java
       2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/core-task-impl/src/main/java/org/cytoscape/task/internal/session/OpenSessionTaskFactory.java
       2012-03-22 20:52:23 UTC (rev 28619)
@@ -42,6 +42,7 @@
 import org.cytoscape.work.AbstractTaskFactory;
 import org.cytoscape.work.SynchronousTaskManager;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TunableSetter;
 
 public class OpenSessionTaskFactory extends AbstractTaskFactory implements 
LoadSession {
 
@@ -52,17 +53,19 @@
        private final RecentlyOpenedTracker tracker;
 
        private final SynchronousTaskManager<?> syncTaskManager;
+       private final TunableSetter tunableSetter; 
        
        private OpenSessionTask task;
 
        public OpenSessionTaskFactory(CySessionManager mgr, final 
CySessionReaderManager rmgr,
                        final CyApplicationManager appManager, final 
RecentlyOpenedTracker tracker,
-                       final SynchronousTaskManager<?> syncTaskManager) {
+                       final SynchronousTaskManager<?> syncTaskManager, final 
TunableSetter tunableSetter) {
                this.mgr = mgr;
                this.rmgr = rmgr;
                this.appManager = appManager;
                this.tracker = tracker;
                this.syncTaskManager = syncTaskManager;
+               this.tunableSetter = tunableSetter;
        }
 
        public TaskIterator createTaskIterator() {
@@ -71,13 +74,14 @@
        }
 
        @Override
-       public CySession loadSession(File file) {
+       public TaskIterator loadSession(File file) {
                final Map<String, Object> m = new HashMap<String, Object>();
                m.put("file", file);
 
-               syncTaskManager.setExecutionContext(m);
-               syncTaskManager.execute(createTaskIterator());
+               return 
tunableSetter.createTaskIterator(this.createTaskIterator(), m); 
+       }
 
-               return task.getCySession();
+       public TaskIterator loadSession() {
+               return this.createTaskIterator();
        }
 }

Modified: 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskTest.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskTest.java
   2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/loadnetwork/LoadNetworkURLTaskTest.java
   2012-03-22 20:52:23 UTC (rev 28619)
@@ -40,6 +40,7 @@
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskIterator;
 import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.TunableSetter;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -59,9 +60,10 @@
                URLConnection con = mock(URLConnection.class);
                StreamUtil streamUtil = mock(StreamUtil.class);
                when(streamUtil.getURLConnection(url)).thenReturn(con);
+               TunableSetter ts = mock(TunableSetter.class);
 
                TaskFactory factory = new LoadNetworkURLTaskFactoryImpl(mgr, 
netmgr, networkViewManager, props, namingUtil,
-                               streamUtil, synchronousTaskManager);
+                               streamUtil, synchronousTaskManager,ts);
                assertNotNull(networkViewManager);
                TaskIterator ti = factory.createTaskIterator();
                TaskMonitor tm = mock(TaskMonitor.class);
@@ -86,9 +88,10 @@
 
                StreamUtil streamUtil = mock(StreamUtil.class);
                when(streamUtil.getURLConnection(url)).thenReturn(con);
+               TunableSetter ts = mock(TunableSetter.class);
 
                TaskFactory factory = new LoadNetworkURLTaskFactoryImpl(mgr, 
netmgr, networkViewManager, props, namingUtil,
-                               streamUtil, synchronousTaskManager);
+                               streamUtil, synchronousTaskManager,ts);
                TaskIterator ti = factory.createTaskIterator();
                TaskMonitor tm = mock(TaskMonitor.class);
                boolean first = true;
@@ -107,9 +110,10 @@
                URLConnection con = mock(URLConnection.class);
                StreamUtil streamUtil = mock(StreamUtil.class);
                when(streamUtil.getURLConnection(url)).thenReturn(con);
+               TunableSetter ts = mock(TunableSetter.class);
 
                TaskFactory factory = new LoadNetworkURLTaskFactoryImpl(mgr, 
netmgr, networkViewManager, props, namingUtil,
-                               streamUtil, synchronousTaskManager);
+                               streamUtil, synchronousTaskManager,ts);
                TaskIterator ti = factory.createTaskIterator();
                TaskMonitor tm = mock(TaskMonitor.class);
                boolean first = true;

Modified: 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/session/OpenSessionTaskFactoryTest.java
===================================================================
--- 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/session/OpenSessionTaskFactoryTest.java
   2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/core-task-impl/src/test/java/org/cytoscape/task/internal/session/OpenSessionTaskFactoryTest.java
   2012-03-22 20:52:23 UTC (rev 28619)
@@ -11,6 +11,7 @@
 import org.cytoscape.work.SynchronousTaskManager;
 import org.cytoscape.work.Task;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TunableSetter;
 import org.junit.Test;
 
 public class OpenSessionTaskFactoryTest {
@@ -22,9 +23,10 @@
                CySessionReaderManager rmgr = 
mock(CySessionReaderManager.class);
                CyApplicationManager appManager = 
mock(CyApplicationManager.class);
                RecentlyOpenedTracker tracker = 
mock(RecentlyOpenedTracker.class);
+               TunableSetter ts = mock(TunableSetter.class);
 
                SynchronousTaskManager synchronousTaskManager = 
mock(SynchronousTaskManager.class);
-               OpenSessionTaskFactory factory = new 
OpenSessionTaskFactory(mgr, rmgr, appManager, tracker, synchronousTaskManager);
+               OpenSessionTaskFactory factory = new 
OpenSessionTaskFactory(mgr, rmgr, appManager, tracker, 
synchronousTaskManager,ts);
                
                TaskIterator ti = factory.createTaskIterator();
                assertNotNull(ti);

Modified: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
       2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
       2012-03-22 20:52:23 UTC (rev 28619)
@@ -78,8 +78,8 @@
 
        private final ImportNetworksTaskFactory importNetworkFromURLTF;
        private final TaskFactory importNetworkFileTF;
-       private final NetworkTaskFactory createViewTaskFactory;
 
+
        private final DataSourceManager dsManager;
        private final Map<String, String> dataSourceMap;
 
@@ -91,14 +91,13 @@
 
        CreateNewNetworkPanel(Window parent, final BundleContext bc, final 
TaskManager guiTaskManager,
                        final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory loadTF,
-                       final NetworkTaskFactory createViewTaskFactory, final 
CyApplicationConfiguration config,
+                       final CyApplicationConfiguration config,
                        final DataSourceManager dsManager, final 
CyProperty<Properties> props) {
                this.parent = parent;
                this.bc = bc;
                this.props = props;
 
                this.importNetworkFromURLTF = loadTF;
-               this.createViewTaskFactory = createViewTaskFactory;
                this.importNetworkFileTF = importNetworkFileTF;
                this.guiTaskManager = guiTaskManager;
                this.dsManager = dsManager;
@@ -214,9 +213,7 @@
                if(layout.isSelected())
                        
props.getProperties().setProperty(CyLayoutAlgorithmManager.DEFAULT_LAYOUT_PROPERTY_NAME,
 LAYOUT_ALGORITHM);
                                
-               // TODO REFACTOR!!!!!!!!!!!!!!!!!!!
-               guiTaskManager.execute(new TaskIterator(2,
-                               new CreateNetworkViewTask(url, 
importNetworkFromURLTF, createViewTaskFactory)));
+               guiTaskManager.execute( 
importNetworkFromURLTF.loadCyNetworks(url) );
        }
 
        private int getViewThreshold(final Properties props) {
@@ -231,34 +228,7 @@
                return threshold;
        }
 
-       private final class CreateNetworkViewTask extends AbstractTask {
 
-               private final ImportNetworksTaskFactory loadNetworkFileTF;
-               private final NetworkTaskFactory createViewTaskFactory;
-
-               private final URL url;
-
-               public CreateNetworkViewTask(final URL url, final 
ImportNetworksTaskFactory loadNetworkFileTF,
-                               final NetworkTaskFactory createViewTaskFactory) 
{
-                       this.loadNetworkFileTF = loadNetworkFileTF;
-                       this.createViewTaskFactory = createViewTaskFactory;
-                       this.url = url;
-               }
-
-               @Override
-               public void run(TaskMonitor taskMonitor) throws Exception {
-                       taskMonitor.setTitle("Loading network...");
-                       taskMonitor.setStatusMessage("Loading network.  Please 
wait...");
-                       taskMonitor.setProgress(0.01d);
-
-                       final Set<CyNetwork> networks = 
this.loadNetworkFileTF.loadCyNetworks(url);
-                       taskMonitor.setProgress(1.0d);
-                       
-                       
props.getProperties().setProperty(CyLayoutAlgorithmManager.DEFAULT_LAYOUT_PROPERTY_NAME,
 CyLayoutAlgorithmManager.DEFAULT_LAYOUT_NAME);
-               }
-
-       }
-
        @Override
        public void actionPerformed(ActionEvent e) {
                try {

Modified: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
 2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
 2012-03-22 20:52:23 UTC (rev 28619)
@@ -10,6 +10,7 @@
 import org.cytoscape.service.util.AbstractCyActivator;
 import org.cytoscape.task.NetworkTaskFactory;
 import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.task.creation.LoadSession;
 import org.cytoscape.util.swing.OpenBrowser;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.swing.SubmenuTaskManager;
@@ -24,13 +25,10 @@
                CySwingApplication cytoscapeDesktop = getService(bc, 
CySwingApplication.class);
                OpenBrowser openBrowserServiceRef = getService(bc, 
OpenBrowser.class);
                RecentlyOpenedTracker recentlyOpenedTrackerServiceRef = 
getService(bc, RecentlyOpenedTracker.class);
-               TaskFactory openSessionTaskFactory = getService(bc, 
TaskFactory.class, "(id=openSessionTaskFactory)");
+               LoadSession openSessionTaskFactory = getService(bc, 
LoadSession.class);
                SubmenuTaskManager submenuTaskManagerServiceRef = 
getService(bc, SubmenuTaskManager.class);
                TaskFactory importNetworkFileTF = getService(bc, 
TaskFactory.class, "(id=loadNetworkFileTaskFactory)");
-               ImportNetworksTaskFactory importNetworkTF = getService(bc, 
ImportNetworksTaskFactory.class,
-                               "(id=loadNetworkURLTaskFactory)");
-               NetworkTaskFactory createNetworkViewTaskFactory = 
getService(bc, NetworkTaskFactory.class,
-                               "(id=createNetworkViewTaskFactory)");
+               ImportNetworksTaskFactory importNetworkTF = getService(bc, 
ImportNetworksTaskFactory.class);
                CyApplicationConfiguration cyApplicationConfigurationServiceRef 
= getService(bc,
                                CyApplicationConfiguration.class);
                DataSourceManager dsManagerServiceRef = getService(bc, 
DataSourceManager.class);
@@ -40,7 +38,7 @@
                // Show Welcome Screen
                final WelcomeScreenAction welcomeScreenAction = new 
WelcomeScreenAction(bc, cytoscapeDesktop,
                                openBrowserServiceRef, 
recentlyOpenedTrackerServiceRef, openSessionTaskFactory,
-                               submenuTaskManagerServiceRef, 
importNetworkFileTF, importNetworkTF, createNetworkViewTaskFactory,
+                               submenuTaskManagerServiceRef, 
importNetworkFileTF, importNetworkTF,
                                cyApplicationConfigurationServiceRef, 
dsManagerServiceRef, cytoscapePropertiesServiceRef);
                
                registerAllServices(bc, welcomeScreenAction, new Properties());

Modified: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
   2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
   2012-03-22 20:52:23 UTC (rev 28619)
@@ -43,12 +43,12 @@
 
        private final RecentlyOpenedTracker fileTracker;
        private final TaskManager taskManager;
-       private final TaskFactory openSessionTaskFactory;
+       private final LoadSession openSessionTaskFactory;
 
        Window parent;
 
        OpenPanel(Window parent, final RecentlyOpenedTracker fileTracker, final 
TaskManager taskManager,
-                       final TaskFactory openSessionTaskFactory) {
+                       final LoadSession openSessionTaskFactory) {
                this.fileTracker = fileTracker;
                this.parent = parent;
                this.taskManager = taskManager;
@@ -85,7 +85,7 @@
                                public void mouseClicked(MouseEvent e) {
                                         try {
                                                final File targetFile = new 
File(target.toURI());
-                                               taskManager.execute(new 
TaskIterator(new OpenSessionDirectTask(targetFile)));
+                                               
taskManager.execute(openSessionTaskFactory.loadSession(targetFile));
                                        } catch (URISyntaxException e1) {
                                                e1.printStackTrace();
                                        }
@@ -104,32 +104,10 @@
                        @Override
                        public void mouseClicked(MouseEvent e) {
                                parent.dispose();
-                               
taskManager.execute(openSessionTaskFactory.createTaskIterator());
+                               
taskManager.execute(openSessionTaskFactory.loadSession());
                        }
                });
 
                this.add(open);
        }
-
-       private final class OpenSessionDirectTask extends AbstractTask {
-               
-               private final File file;
-               
-               OpenSessionDirectTask(final File file) {
-                       this.file = file;
-               }
-               
-               @Override
-               public void run(TaskMonitor taskMonitor) throws Exception {
-                       if(openSessionTaskFactory instanceof LoadSession) {
-                               taskMonitor.setTitle("Opening Session File");
-                               taskMonitor.setProgress(0.1d);
-                               taskMonitor.setStatusMessage("Opening session 
file.  Please wait...");
-                               LoadSession loadSession = (LoadSession) 
openSessionTaskFactory;
-                               CySession session = 
loadSession.loadSession(file);
-                               taskMonitor.setProgress(1.0d);
-                       }
-               }
-
-       }
 }

Modified: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
 2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
 2012-03-22 20:52:23 UTC (rev 28619)
@@ -13,6 +13,7 @@
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.task.NetworkTaskFactory;
 import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.task.creation.LoadSession;
 import org.cytoscape.util.swing.OpenBrowser;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskManager;
@@ -35,8 +36,7 @@
        private final CyApplicationConfiguration config;
        private final DataSourceManager dsManager;
        
-       private final NetworkTaskFactory networkTaskFactory;
-       private final TaskFactory openSessionTaskFactory;
+       private final LoadSession openSessionTaskFactory;
        private final TaskFactory importNetworkFileTF;
 
        private final CySwingApplication app;
@@ -47,9 +47,11 @@
        private boolean hide = false;
 
        public WelcomeScreenAction(final BundleContext bc, final 
CySwingApplication app, 
-                       OpenBrowser openBrowserServiceRef, 
RecentlyOpenedTracker fileTracker, final TaskFactory openSessionTaskFactory, 
TaskManager guiTaskManager,
-                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworksTaskFactory, final NetworkTaskFactory 
networkTaskFactory,
-                       final CyApplicationConfiguration config, final 
DataSourceManager dsManager, final CyProperty<Properties> cyProps) {
+                       OpenBrowser openBrowserServiceRef, 
RecentlyOpenedTracker fileTracker, 
+                       final LoadSession openSessionTaskFactory, TaskManager 
guiTaskManager,
+                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworksTaskFactory, 
+                       final CyApplicationConfiguration config, final 
DataSourceManager dsManager, 
+                       final CyProperty<Properties> cyProps) {
                super(MENU_NAME);
                setPreferredMenu(PARENT_NAME);
 
@@ -57,7 +59,6 @@
                this.fileTracker = fileTracker;
                this.guiTaskManager = guiTaskManager;
                this.importNetworksTaskFactory = importNetworksTaskFactory;
-               this.networkTaskFactory = networkTaskFactory;
                this.config = config;
                this.dsManager = dsManager;
                this.app = app;
@@ -76,8 +77,7 @@
 
        @Override
        public void actionPerformed(ActionEvent ae) {
-               final WelcomeScreenDialog welcomeScreen = new 
WelcomeScreenDialog(bc,openBrowser, fileTracker, openSessionTaskFactory, 
guiTaskManager, config,
-                               importNetworkFileTF, importNetworksTaskFactory, 
networkTaskFactory, dsManager, cyProps, hide);
+               final WelcomeScreenDialog welcomeScreen = new 
WelcomeScreenDialog(bc,openBrowser, fileTracker, openSessionTaskFactory, 
guiTaskManager, config, importNetworkFileTF, importNetworksTaskFactory, 
dsManager, cyProps, hide);
                welcomeScreen.setLocationRelativeTo(app.getJFrame());
                welcomeScreen.setVisible(true);
                this.hide = welcomeScreen.getHideStatus();

Modified: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
 2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
 2012-03-22 20:52:23 UTC (rev 28619)
@@ -27,6 +27,7 @@
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.task.NetworkTaskFactory;
 import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.task.creation.LoadSession;
 import org.cytoscape.util.swing.OpenBrowser;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskManager;
@@ -53,13 +54,12 @@
 
        private final OpenBrowser openBrowserServiceRef;
        private final RecentlyOpenedTracker fileTracker;
-       private final TaskFactory openSessionTaskFactory;
+       private final LoadSession openSessionTaskFactory;
 
        private final TaskManager guiTaskManager;
 
        private final CyApplicationConfiguration config;
        private final ImportNetworksTaskFactory loadNetworkTF;
-       private final NetworkTaskFactory networkTaskFactory;
 
        private final DataSourceManager dsManager;
        
@@ -70,15 +70,16 @@
        
        final JCheckBox checkBox = new JCheckBox();
 
-       public WelcomeScreenDialog(final BundleContext bc, OpenBrowser 
openBrowserServiceRef, RecentlyOpenedTracker fileTracker, final TaskFactory 
openSessionTaskFactory,
-                       TaskManager guiTaskManager, final 
CyApplicationConfiguration config,
-                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworkTF, final NetworkTaskFactory 
networkTaskFactory,
-                       final DataSourceManager dsManager, final 
CyProperty<Properties> cyProps, final boolean hide) {
+       public WelcomeScreenDialog(final BundleContext bc, OpenBrowser 
openBrowserServiceRef, 
+                                  RecentlyOpenedTracker fileTracker, final 
LoadSession openSessionTaskFactory, 
+                                                          TaskManager 
guiTaskManager, final CyApplicationConfiguration config,
+                                  final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworkTF, 
+                                  final DataSourceManager dsManager, final 
CyProperty<Properties> cyProps, 
+                                                          final boolean hide) {
                this.openBrowserServiceRef = openBrowserServiceRef;
                this.fileTracker = fileTracker;
                this.config = config;
                this.loadNetworkTF = importNetworkTF;
-               this.networkTaskFactory = networkTaskFactory;
                this.dsManager = dsManager;
                this.openSessionTaskFactory = openSessionTaskFactory;
                this.importNetworkFileTF = importNetworkFileTF;
@@ -182,10 +183,7 @@
 
                buildHelpPanel(panel1, new OpenPanel(this, fileTracker, 
guiTaskManager, openSessionTaskFactory),
                                "Open a Recent Session");
-               buildHelpPanel(panel2,
-                               new CreateNewNetworkPanel(this, bc, 
guiTaskManager, importNetworkFileTF, loadNetworkTF, networkTaskFactory,
-                                               config, dsManager, cyProps),
-                               "Create New Network");
+               buildHelpPanel(panel2, new CreateNewNetworkPanel(this, bc, 
guiTaskManager, importNetworkFileTF, loadNetworkTF, config, dsManager, 
cyProps), "Create New Network");
                buildHelpPanel(panel3, new HelpPanel(openBrowserServiceRef, 
cyProps), "Help");
                buildHelpPanel(panel4, new LogoPanel(), "Latest News");
 

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
    2012-03-22 19:54:19 UTC (rev 28618)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
    2012-03-22 20:52:23 UTC (rev 28619)
@@ -14,12 +14,15 @@
 import org.cytoscape.work.TaskManager;
 import org.cytoscape.work.TunableHandlerFactory;
 import org.cytoscape.work.TunableRecorder;
+import org.cytoscape.work.TunableSetter;
 import org.cytoscape.work.internal.submenu.SubmenuTaskManagerImpl;
 import org.cytoscape.work.internal.submenu.SubmenuTunableHandlerImpl;
 import org.cytoscape.work.internal.submenu.SubmenuTunableMutator;
 import org.cytoscape.work.internal.sync.SyncTaskManager;
 import org.cytoscape.work.internal.sync.SyncTunableHandlerFactory;
 import org.cytoscape.work.internal.sync.SyncTunableMutator;
+import org.cytoscape.work.internal.sync.TunableSetterImpl;
+import org.cytoscape.work.internal.sync.TunableRecorderManager;
 import org.cytoscape.work.internal.task.JDialogTaskManager;
 import org.cytoscape.work.internal.task.JPanelTaskManager;
 import org.cytoscape.work.internal.tunables.BooleanHandler;
@@ -161,5 +164,11 @@
                
                
registerServiceListener(bc,submenuTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",SubmenuTunableHandlerFactory.class,
 TunableHandlerFactory.class);
                
registerServiceListener(bc,syncTunableMutator,"addTunableHandlerFactory","removeTunableHandlerFactory",SyncTunableHandlerFactory.class,
 TunableHandlerFactory.class);
+
+               TunableRecorderManager trm = new TunableRecorderManager();
+               
registerServiceListener(bc,trm,"addTunableRecorder","removeTunableRecorder",TunableRecorder.class);
+
+               TunableSetterImpl tsi = new 
TunableSetterImpl(syncTunableMutator,trm);
+               registerService(bc,tsi,TunableSetter.class, new Properties());
        }
-}
\ No newline at end of file
+}

Added: 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
===================================================================
--- 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
                              (rev 0)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
      2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,62 @@
+
+package org.cytoscape.work.internal.sync;
+
+
+import java.util.Map;
+
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.Task;
+import org.cytoscape.work.TunableRecorder;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DelegateTask extends AbstractTask {
+       private final SyncTunableMutator stm;
+       private final TunableRecorderManager trm; 
+       private final TaskIterator ti;
+       private final Map<String,Object> tunableValues;
+
+       public DelegateTask(SyncTunableMutator stm, TunableRecorderManager trm, 
TaskIterator ti, Map<String,Object> tunableValues) {
+               this.stm = stm;
+               this.trm = trm;
+               this.ti = ti;
+               this.tunableValues = tunableValues;
+       }
+
+       public void run(TaskMonitor tm) throws Exception {
+               // this ensures that we get a coherent task monitor
+               DelegatingTaskMonitor dtm = new 
DelegatingTaskMonitor(tm,ti.getNumTasks());
+
+               // this gives the tunable mutator what it needs to set
+               // the tunables as the tasks get executed 
+               stm.setConfigurationContext(tunableValues);
+       
+               while (ti.hasNext()) {
+                       final Task task = ti.next();
+                       dtm.setTask(task);
+
+                       if (!setTunables(task))
+                               return;
+
+                       task.run(dtm);
+               }
+       }
+
+       private boolean setTunables(final Object task) throws Exception {
+               if (task == null) 
+                       return true;
+               
+               boolean ret = stm.validateAndWriteBack(task);
+
+               for ( TunableRecorder ti : trm.getRecorders() ) 
+                       ti.recordTunableState(task);
+
+               return ret;
+       }
+}
+

Added: 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
===================================================================
--- 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
                             (rev 0)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
     2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,49 @@
+package org.cytoscape.work.internal.sync;
+
+
+import org.cytoscape.work.Task;
+import org.cytoscape.work.TaskMonitor;
+
+class DelegatingTaskMonitor implements TaskMonitor {
+       
+       private double expectedNumTasks; 
+       private double currentTaskNum = -1.0; // so that the first task is 
numbered 0
+
+       private TaskMonitor actualTaskMonitor;
+
+       /**
+        * Based on the expected number of tasks, this is the fraction of the 
overall
+        * task monitor that a given task is allocated. So, if there are 4 
tasks 
+        * executed with this task monitor, each task is allocated 0.25 of the 
+        * space in the progress bar.
+        */
+       private double fractionOfOverall = 1.0;
+
+       DelegatingTaskMonitor(TaskMonitor tm, int expectedNumTasks) {
+               this.actualTaskMonitor = tm;
+               this.expectedNumTasks = (double)expectedNumTasks;
+               this.fractionOfOverall = 1.0/this.expectedNumTasks;
+       }
+
+       public void setTask(final Task newTask) {
+               this.currentTaskNum += 1.0;     
+       }
+
+       public void setTitle(String title) {
+               actualTaskMonitor.setTitle(title);
+       }
+
+       public void setStatusMessage(String statusMessage) {
+               actualTaskMonitor.setStatusMessage(statusMessage);
+       }
+
+       public void setProgress(double progress) {
+               if ( progress < 0 ) {
+                       actualTaskMonitor.setProgress(-1.0);
+               } else {
+                       double completed = currentTaskNum/expectedNumTasks;
+                       double adjustedProgress = (progress * 
fractionOfOverall) + completed;
+                       actualTaskMonitor.setProgress(adjustedProgress);
+               }
+       }
+}

Added: 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
===================================================================
--- 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
                            (rev 0)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
    2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,31 @@
+
+package org.cytoscape.work.internal.sync;
+
+
+import java.util.Collections;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.cytoscape.work.TunableRecorder;
+
+
+/**
+ */
+public class TunableRecorderManager {  
+       private List<TunableRecorder> recorders = new 
ArrayList<TunableRecorder>();
+
+       public void addTunableRecorder(TunableRecorder tr, Map props) {
+               if ( !recorders.contains(tr) )
+                       recorders.add(tr);
+       }
+
+       public void removeTunableRecorder(TunableRecorder tr, Map props) {
+               recorders.remove(tr);
+       }
+
+       public List<TunableRecorder> getRecorders() {
+               return Collections.unmodifiableList(recorders);
+       }
+}
+

Added: 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
===================================================================
--- 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
                         (rev 0)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
 2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,28 @@
+
+package org.cytoscape.work.internal.sync;
+
+
+import java.util.Map;
+
+import org.cytoscape.work.TunableSetter;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskFactory;
+
+
+/**
+ */
+public class TunableSetterImpl implements TunableSetter {  
+
+       private final SyncTunableMutator stm;
+       private final TunableRecorderManager trm; 
+
+       public TunableSetterImpl(SyncTunableMutator stm, TunableRecorderManager 
trm) {
+               this.stm = stm;
+               this.trm = trm;
+       }
+
+       public TaskIterator createTaskIterator(TaskIterator ti, 
Map<String,Object> tunableValues) {
+               return new TaskIterator(ti.getNumTasks(), new 
DelegateTask(stm,trm,ti,tunableValues) );
+       }
+}
+

Added: 
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitorTest.java
===================================================================
--- 
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitorTest.java
                         (rev 0)
+++ 
core3/impl/trunk/work-swing-impl/impl/src/test/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitorTest.java
 2012-03-22 20:52:23 UTC (rev 28619)
@@ -0,0 +1,101 @@
+
+package org.cytoscape.work.internal.sync;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.AbstractTaskFactory;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.Tunable;
+import org.junit.Test;
+
+public class DelegatingTaskMonitorTest {
+
+       TestTaskMonitor ttm;
+       DelegatingTaskMonitor dtm;
+
+       private void setup(int numTasks) {
+               ttm = new TestTaskMonitor();
+               dtm = new DelegatingTaskMonitor(ttm, numTasks);
+       }
+
+       @Test
+       public void testSetTitle() {
+               setup(1);
+               dtm.setTitle("hello");
+               assertEquals( "hello", ttm.getTitle());
+       }
+
+       @Test
+       public void testSetMessage() {
+               setup(1);
+               dtm.setStatusMessage("goodbye");
+               assertEquals( "goodbye", ttm.getStatusMessage());
+       }
+
+       @Test
+       public void testProgressTwo() {
+               setup(2);
+               dtm.setTask(null);
+               dtm.setProgress(0.5);
+               dequals(0.25,ttm.getProgress());
+               dtm.setProgress(1.0);
+               dequals(0.5,ttm.getProgress());
+               dtm.setTask(null);
+               dtm.setProgress(0.5);
+               dequals(0.75,ttm.getProgress());
+               dtm.setProgress(1.0);
+               dequals(1.0,ttm.getProgress());
+       }
+
+       @Test
+       public void testProgressOne() {
+               setup(1);
+               dtm.setTask(null);
+               dtm.setProgress(0.5);
+               dequals(0.5,ttm.getProgress());
+               dtm.setProgress(1.0);
+               dequals(1.0,ttm.getProgress());
+       }
+
+       @Test
+       public void testProgressFour() {
+               setup(4);
+               dtm.setTask(null);
+               dtm.setProgress(1.0);
+               dequals(0.25,ttm.getProgress());
+
+               dtm.setTask(null);
+               dtm.setProgress(1.0);
+               dequals(0.5,ttm.getProgress());
+
+               dtm.setTask(null);
+               dtm.setProgress(1.0);
+               dequals(0.75,ttm.getProgress());
+
+               dtm.setTask(null);
+               dtm.setProgress(1.0);
+               dequals(1.0,ttm.getProgress());
+       }
+
+       private void dequals(double a, double b) {
+               assertTrue((Math.abs(a-b) < 0.0000001));
+       }
+
+       private class TestTaskMonitor implements TaskMonitor {
+               private String title;
+               private String msg;
+               private double progress;
+               public void setTitle(String t) { title = t;     }
+               public void setStatusMessage(String m) { msg = m; }
+               public void setProgress(double p) { progress = p; }
+               public String getTitle() { return title; }
+               public String getStatusMessage() { return msg; }
+               public double getProgress() { return progress; }
+       }
+}

-- 
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