Author: mkirby
Date: 2012-05-11 00:39:04 -0700 (Fri, 11 May 2012)
New Revision: 29226

Added:
   core3/impl/trunk/work-impl/pom.xml
   core3/impl/trunk/work-impl/src/
   core3/impl/trunk/work-impl/src/main/
   core3/impl/trunk/work-impl/src/main/java/
   core3/impl/trunk/work-impl/src/main/java/org/
   core3/impl/trunk/work-impl/src/main/java/org/cytoscape/
   core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/
   core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
   core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
Modified:
   core3/impl/trunk/work-impl/
Log:
mkirby: Moved work-impl into its own package, out of headless-work-impl.


Property changes on: core3/impl/trunk/work-impl
___________________________________________________________________
Added: svn:ignore
   + .settings
target
.classpath
.project


Added: core3/impl/trunk/work-impl/pom.xml
===================================================================
--- core3/impl/trunk/work-impl/pom.xml                          (rev 0)
+++ core3/impl/trunk/work-impl/pom.xml  2012-05-11 07:39:04 UTC (rev 29226)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+       <parent>
+               <artifactId>impl-parent</artifactId>
+               <groupId>org.cytoscape</groupId>
+               <version>3.0.0-alpha9-SNAPSHOT</version>
+       </parent>
+
+       <properties>
+               
<bundle.symbolicName>org.cytoscape.work-impl</bundle.symbolicName>
+               <bundle.namespace>org.cytoscape.work.internal</bundle.namespace>
+       </properties>
+
+       <modelVersion>4.0.0</modelVersion>
+       <groupId>org.cytoscape</groupId>
+       <artifactId>work-impl</artifactId>
+
+       <name>${bundle.symbolicName}</name>
+
+       <packaging>bundle</packaging>
+
+
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                               
<version>${maven-surefire-plugin.version}</version>
+                               <configuration>
+                                       
<redirectTestOutputToFile>true</redirectTestOutputToFile>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               
<version>${maven-bundle-plugin.version}</version>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               
<Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
+                                               
<Bundle-Version>${project.version}</Bundle-Version>
+                        <Export-Package>!${bundle.namespace}.*</Export-Package>
+                        
<Private-Package>${bundle.namespace}.*</Private-Package>
+                        
<Bundle-Activator>${bundle.namespace}.CyActivator</Bundle-Activator>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+
+       <repositories>
+               <repository>
+                       <id>cytoscape_snapshots</id>
+                       <snapshots>
+                               <enabled>true</enabled>
+                       </snapshots>
+                       <releases>
+                               <enabled>false</enabled>
+                       </releases>
+                       <name>Cytoscape Snapshots</name>
+                       
<url>http://code.cytoscape.org/nexus/content/repositories/snapshots/</url>
+               </repository>
+               <repository>
+                       <id>cytoscape_releases</id>
+                       <snapshots>
+                               <enabled>false</enabled>
+                       </snapshots>
+                       <releases>
+                               <enabled>true</enabled>
+                       </releases>
+                       <name>Cytoscape Releases</name>
+                       
<url>http://code.cytoscape.org/nexus/content/repositories/releases/</url>
+               </repository>
+       </repositories>
+
+
+       <dependencies>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>work-api</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+       </dependencies>
+</project>

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
                               (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java
       2012-05-11 07:39:04 UTC (rev 29226)
@@ -0,0 +1,39 @@
+package org.cytoscape.work.internal;
+
+import java.util.Properties;
+
+import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.work.TunableHandlerFactory;
+import org.cytoscape.work.TunableSetter;
+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.TunableRecorderManager;
+import org.cytoscape.work.internal.sync.TunableSetterImpl;
+import org.osgi.framework.BundleContext;
+
+public class CyActivator extends AbstractCyActivator {
+       public CyActivator() {
+               super();
+       }
+
+
+       public void start(BundleContext bc) {
+               
+               SyncTunableMutator syncTunableMutator = new 
SyncTunableMutator();
+               SyncTaskManager syncTaskManager = new 
SyncTaskManager(syncTunableMutator);
+               
+               registerAllServices(bc,syncTaskManager, new Properties());
+               
+               TunableRecorderManager trm = new TunableRecorderManager();
+
+               TunableSetterImpl tsi = new 
TunableSetterImpl(syncTunableMutator,trm);
+               registerService(bc,tsi,TunableSetter.class, new Properties());
+               
+               SyncTunableHandlerFactory syncTunableHandlerFactory = new 
SyncTunableHandlerFactory();
+               Properties syncFactoryProp = new Properties();
+               registerService(bc,syncTunableHandlerFactory, 
TunableHandlerFactory.class, syncFactoryProp);
+               
syncTunableMutator.addTunableHandlerFactory(syncTunableHandlerFactory, 
syncFactoryProp);
+               
+       }
+}
\ No newline at end of file

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
                         (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java
 2012-05-11 07:39:04 UTC (rev 29226)
@@ -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-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
                                (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java
        2012-05-11 07:39:04 UTC (rev 29226)
@@ -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-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
                           (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java
   2012-05-11 07:39:04 UTC (rev 29226)
@@ -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-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
                              (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java
      2012-05-11 07:39:04 UTC (rev 29226)
@@ -0,0 +1,82 @@
+package org.cytoscape.work.internal.sync;
+
+
+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.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 factory, Object context) {
+               throw new UnsupportedOperationException("There is no 
configuration available for a SyncrhonousTaskManager");    
+       }
+
+
+       @Override
+       public void execute(final TaskIterator taskIterator) {
+               final LoggingTaskMonitor taskMonitor = new LoggingTaskMonitor();
+               
+               try {
+                       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 {
+               if (task == null) {
+                       return true;
+               }
+               boolean ret = syncTunableMutator.validateAndWriteBack(task);
+
+               for ( TunableRecorder ti : tunableRecorders ) 
+                       ti.recordTunableState(task);
+
+               return ret;
+       }
+}
+

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
                           (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java
   2012-05-11 07:39:04 UTC (rev 29226)
@@ -0,0 +1,34 @@
+package org.cytoscape.work.internal.sync;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+import org.cytoscape.work.AbstractTunableHandler;
+import org.cytoscape.work.Tunable;
+
+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);
+       }
+
+       @Override
+       public void handle() {
+               try {
+                       setValue(valueMap.get(getName()));
+               } catch (Exception e) {
+                       throw new RuntimeException("Exception setting tunable 
value.", e);
+               }
+       }
+
+       public void setValueMap(final Map<String, Object> valueMap) {
+               this.valueMap = valueMap;
+       }
+}

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
                            (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandlerFactory.java
    2012-05-11 07:39:04 UTC (rev 29226)
@@ -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 createTunableHandler(final Field field, final 
Object instance, final Tunable tunable) {
+               return new SyncTunableHandler(field,instance,tunable);
+       }
+
+       public SyncTunableHandler createTunableHandler(final Method getter, 
final Method setter, final Object instance, final Tunable tunable) {
+               return new SyncTunableHandler(getter,setter,instance,tunable);
+       }
+}

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
                           (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java
   2012-05-11 07:39:04 UTC (rev 29226)
@@ -0,0 +1,37 @@
+package org.cytoscape.work.internal.sync;
+
+import java.util.Map;
+
+import org.cytoscape.work.AbstractTunableInterceptor;
+import org.cytoscape.work.TunableMutator;
+
+public class SyncTunableMutator<S> extends 
AbstractTunableInterceptor<SyncTunableHandler> implements
+               TunableMutator<SyncTunableHandler, S> {
+
+       private Map<String, Object> map;
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public void setConfigurationContext(final Object configContext) {
+               if (configContext != null && configContext instanceof Map)
+                       map = (Map<String, Object>) configContext;
+       }
+
+       
+       @Override
+       public S buildConfiguration(Object objectWithTunables) {
+               // This method should not be called.
+               return null;
+       }
+
+       
+       @Override
+       public boolean validateAndWriteBack(Object o) {
+               
+               for (SyncTunableHandler handler : getHandlers(o)) {
+                       handler.setValueMap(map);
+                       handler.handle();
+               }
+               return true;
+       }
+}

Added: 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
                               (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java
       2012-05-11 07:39:04 UTC (rev 29226)
@@ -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-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
                            (rev 0)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
    2012-05-11 07:39:04 UTC (rev 29226)
@@ -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) );
+       }
+}
+

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