Author: mkirby Date: 2012-05-04 14:03:18 -0700 (Fri, 04 May 2012) New Revision: 29119
Added: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HDialogTaskManager.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/UndoSupportImpl.java Removed: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/UndoSupportImpl.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HeadlessTaskManager.java core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/tunables/ Modified: core3/impl/trunk/work-headless-impl/pom.xml core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java Log: mkirby: Minimum work-headless-impl to get headless running. Modified: core3/impl/trunk/work-headless-impl/pom.xml =================================================================== --- core3/impl/trunk/work-headless-impl/pom.xml 2012-05-04 20:54:26 UTC (rev 29118) +++ core3/impl/trunk/work-headless-impl/pom.xml 2012-05-04 21:03:18 UTC (rev 29119) @@ -1,85 +1,95 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> +<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-alpha8-SNAPSHOT</version> - </parent> + <parent> + <artifactId>impl-parent</artifactId> + <groupId>org.cytoscape</groupId> + <version>3.0.0-alpha8-SNAPSHOT</version> + </parent> - <properties> - <bundle.symbolicName>org.cytoscape.work-headless-impl</bundle.symbolicName> - <bundle.namespace>org.cytoscape.work.internal</bundle.namespace> - </properties> + <properties> + <bundle.symbolicName>org.cytoscape.work-headless-impl</bundle.symbolicName> + <bundle.namespace>org.cytoscape.work.internal</bundle.namespace> + </properties> - <modelVersion>4.0.0</modelVersion> - <groupId>org.cytoscape</groupId> - <artifactId>work-headless-impl</artifactId> + <modelVersion>4.0.0</modelVersion> + <groupId>org.cytoscape</groupId> + <artifactId>work-headless-impl</artifactId> - <name>Cytoscape Headless Mode Impl (${project.artifactId})</name> + <name>${bundle.symbolicName}</name> - <packaging>bundle</packaging> + <packaging>bundle</packaging> - <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> - <build> - <plugins> - <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> + <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> - <dependencies> - <dependency> - <groupId>org.cytoscape</groupId> - <artifactId>work-api</artifactId> - </dependency> - <dependency> - <groupId>org.cytoscape</groupId> - <artifactId>cy-commons-cli</artifactId> - <version>1.0-SNAPSHOT</version> - </dependency> - <dependency> - <groupId>org.cytoscape</groupId> - <artifactId>cmdline-launcher</artifactId> - <version>1.0-SNAPSHOT</version> - </dependency> - </dependencies> + <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> + <dependency> + <groupId>org.cytoscape</groupId> + <artifactId>work-swing-api</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.cytoscape</groupId> + <artifactId>work-api</artifactId> + <scope>provided</scope> + </dependency> + </dependencies> </project> Modified: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java 2012-05-04 20:54:26 UTC (rev 29118) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/CyActivator.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -1,34 +1,49 @@ - -package org.cytoscape.work.internal; - -import org.cytoscape.cmdline.launcher.CommandLineProvider; - -import org.cytoscape.work.internal.UndoSupportImpl; -import org.cytoscape.work.internal.task.HeadlessTaskManager; -import org.cytoscape.work.internal.tunables.CLTunableInterceptor; -import org.cytoscape.work.UndoSupport; -import org.cytoscape.work.TaskManager; -import org.cytoscape.work.TunableInterceptor; -import org.osgi.framework.BundleContext; -import org.cytoscape.service.util.AbstractCyActivator; -import java.util.Properties; - -public class CyActivator extends AbstractCyActivator { - public CyActivator() { - super(); - } - - public void start(BundleContext bc) { - - CommandLineProvider commandLineProviderServiceRef = getService(bc,CommandLineProvider.class); - - UndoSupportImpl undoSupport = new UndoSupportImpl(); - HeadlessTaskManager headlessTaskManager = new HeadlessTaskManager(tunableInterceptor); - CLTunableInterceptor tunableInterceptor = new CLTunableInterceptor(commandLineProviderServiceRef); - - registerService(bc,headlessTaskManager,TaskManager.class, new Properties()); - registerService(bc,tunableInterceptor,TunableInterceptor.class, new Properties()); - registerService(bc,undoSupport,UndoSupport.class, new Properties()); - } -} - +package org.cytoscape.work.internal; + +import java.util.Properties; + +import org.cytoscape.service.util.AbstractCyActivator; +import org.cytoscape.work.TunableRecorder; +import org.cytoscape.work.TunableSetter; +import org.cytoscape.work.internal.sync.SyncTaskManager; +import org.cytoscape.work.internal.sync.SyncTunableMutator; +import org.cytoscape.work.internal.sync.TunableRecorderManager; +import org.cytoscape.work.internal.sync.TunableSetterImpl; +import org.cytoscape.work.internal.task.*; +import org.cytoscape.work.swing.DialogTaskManager; +import org.cytoscape.work.swing.undo.SwingUndoSupport; +import org.cytoscape.work.undo.UndoSupport; +import org.osgi.framework.BundleContext; + +public class CyActivator extends AbstractCyActivator { + public CyActivator() { + super(); + } + + + public void start(BundleContext bc) { + + UndoSupportImpl undoSupport = new UndoSupportImpl(); + + DialogTaskManager jDialogTaskManager = new HDialogTaskManager(); + + Properties undoSupportProps = new Properties(); + registerService(bc,undoSupport,UndoSupport.class, undoSupportProps); + registerService(bc,undoSupport,SwingUndoSupport.class, undoSupportProps); + + registerService(bc,jDialogTaskManager,DialogTaskManager.class, new Properties()); + + + 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()); + + + } +} \ No newline at end of file Deleted: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/UndoSupportImpl.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/UndoSupportImpl.java 2012-05-04 20:54:26 UTC (rev 29118) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/UndoSupportImpl.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -1,82 +0,0 @@ -/* - File: UndoSupportImpl.java - - Copyright (c) 2007, The Cytoscape Consortium (www.cytoscape.org) - - The Cytoscape Consortium is: - - Institute for Systems Biology - - University of California San Diego - - Memorial Sloan-Kettering Cancer Center - - Institut Pasteur - - Agilent Technologies - - This library is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1 of the License, or - any later version. - - This library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF - MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and - documentation provided hereunder is on an "as is" basis, and the - Institute for Systems Biology and the Whitehead Institute - have no obligations to provide maintenance, support, - updates, enhancements or modifications. In no event shall the - Institute for Systems Biology and the Whitehead Institute - be liable to any party for direct, indirect, special, - incidental or consequential damages, including lost profits, arising - out of the use of this software and its documentation, even if the - Institute for Systems Biology and the Whitehead Institute - have been advised of the possibility of such damage. See - the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this library; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -*/ -package org.cytoscape.work.internal; - -import javax.swing.undo.UndoManager; -import javax.swing.undo.UndoableEditSupport; -import org.cytoscape.work.undo.UndoSupport; - - -/** - * Rudimentary support for undo. To post an edit to the manager, call - * Undo.getUndoableEditSupport().postEdit(yourEdit). To handle the edits, - * you should extend this class and write actions, etc. that use the - * UndoManager. - */ -public class UndoSupportImpl implements UndoSupport { - - private UndoManager m_undoManager; - private UndoableEditSupport m_undoSupport; - - public UndoSupportImpl() { - m_undoManager = new UndoManager(); - m_undoSupport = new UndoableEditSupport(); - m_undoSupport.addUndoableEditListener( m_undoManager ); - } - - /** - * Returns the UndoManager. To preserve encapsulation and to prevent - * the wrong hands for mucking with your edit stack, don't make this - * public! Rather, extend the class and use this method with the - * class and package to set up actions, etc.. - * @return the UndoManager used for managing the edits. - */ - public UndoManager getUndoManager() { - return m_undoManager; - } - - /** - * Use this method to get the UndoableEditSupport which you should use - * to post edits: Undo.getUndoableEditSupport().postEdit(yourEdit). - * @return the UndoableEditSupport used for posting edits. - */ - public UndoableEditSupport getUndoableEditSupport() { - return m_undoSupport; - } - -} - Added: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegateTask.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/DelegatingTaskMonitor.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/LoggingTaskMonitor.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTaskManager.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableHandler.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/SyncTunableMutator.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableRecorderManager.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -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-headless-impl/src/main/java/org/cytoscape/work/internal/task/HDialogTaskManager.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HDialogTaskManager.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HDialogTaskManager.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -0,0 +1,33 @@ +package org.cytoscape.work.internal.task; + +import java.awt.Window; + +import javax.swing.JDialog; + +import org.cytoscape.work.TaskFactory; +import org.cytoscape.work.TaskIterator; +import org.cytoscape.work.swing.DialogTaskManager; + +public class HDialogTaskManager implements DialogTaskManager { + + @Override + public JDialog getConfiguration(TaskFactory factory, Object tunableContext) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setExecutionContext(Window context) { + // TODO Auto-generated method stub + + } + + @Override + public void execute(TaskIterator iterator) { + // TODO Auto-generated method stub + + } + + + +} Deleted: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HeadlessTaskManager.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HeadlessTaskManager.java 2012-05-04 20:54:26 UTC (rev 29118) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/HeadlessTaskManager.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -1,146 +0,0 @@ -package org.cytoscape.work.internal.task; - - -import java.io.PrintStream; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - - -import org.cytoscape.work.AbstractTaskManager; -import org.cytoscape.work.Task; -import org.cytoscape.work.TaskFactory; -import org.cytoscape.work.TaskIterator; -import org.cytoscape.work.TaskMonitor; -import org.cytoscape.work.TunableInterceptor; - - -/** - * Executes <code>Task</code>s and displays interfaces by - * writing to a <code>PrintStream</code>. - * - * This is better suited for applications running in headless mode. - * - * This will only periodically display information about - * <code>Task</code>s it is executing to prevent the screen from being flooded - * with messages. - * - * This cannot cancel <code>Task</code>s because it has no means for receiving - * input from the user. - */ -public class HeadlessTaskManager extends AbstractTaskManager { - private final PrintStream output; - private final ExecutorService taskExecutorService; - - public HeadlessTaskManager(final PrintStream output, final TunableInterceptor tunableInterceptor) { - super(tunableInterceptor); - this.output = output; - this.taskExecutorService = Executors.newCachedThreadPool(); - } - - /** - * Use <code>System.out</code> as the output stream. - */ - public HeadlessTaskManager(final TunableInterceptor tunableInterceptor) { - this(System.out, tunableInterceptor); - } - - @Override - public void execute(final TaskFactory factory) { - final TaskIterator taskIterator = factory.createTaskIterator(); - final Timer timer = new Timer(); - final ConsoleTaskMonitor taskMonitor = new ConsoleTaskMonitor(timer); - - Runnable runnable = new Runnable() { - public void run() { - try { - while (taskIterator.hasNext()) { - final Task task = taskIterator.next(); - - if (tunableInterceptor != null) { - // load the tunables from the object - tunableInterceptor.loadTunables(task); - - // create the UI based on the object - if (!tunableInterceptor.execUI(task)) - return; - } - - task.run(taskMonitor); - } - } catch (Exception exception) { - taskMonitor.showException(exception); - } - timer.cancel(); - } - }; - - Future<?> future = taskExecutorService.submit(runnable); - } - - class ConsoleTaskMonitor implements TaskMonitor { - static final int UPDATE_DELAY_IN_MILLISECONDS = 2000; - - final Timer timer; - String title = "Task"; - String statusMessage = ""; - int progress = 0; - boolean hasChanged = false; - - public ConsoleTaskMonitor(Timer timer) - { - this.timer = timer; - timer.scheduleAtFixedRate(new UpdateTask(), UPDATE_DELAY_IN_MILLISECONDS, UPDATE_DELAY_IN_MILLISECONDS); - } - - public void setTitle(String title) - { - if (title == null || title.length() == 0) - this.title = "Task"; - else - this.title = title; - } - - public void setProgress(double progress) - { - this.progress = (int) (progress * 100); - hasChanged = true; - } - - public void setStatusMessage(String statusMessage) - { - if (statusMessage == null) - this.statusMessage = ""; - else - this.statusMessage = statusMessage; - hasChanged = true; - } - - public void showException(Exception exception) - { - timer.cancel(); - if (exception.getMessage() == null || exception.getMessage().length() == 0) - output.println(String.format("%s has encountered an error.", title)); - else - output.println(String.format("%s has encountered an error: %s", title, exception.getMessage())); - exception.printStackTrace(output); - } - - class UpdateTask extends TimerTask - { - public void run() - { - if (!hasChanged) return; - - if (statusMessage.length() == 0) - output.println(String.format("%s is at %d%%.", title, progress)); - else - output.println(String.format("%s is at %d%%: %s", title, progress, statusMessage)); - - hasChanged = false; - } - } - } -} Added: core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/UndoSupportImpl.java =================================================================== --- core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/UndoSupportImpl.java (rev 0) +++ core3/impl/trunk/work-headless-impl/src/main/java/org/cytoscape/work/internal/task/UndoSupportImpl.java 2012-05-04 21:03:18 UTC (rev 29119) @@ -0,0 +1,79 @@ +/* + File: UndoSupportImpl.java + + Copyright (c) 2007, The Cytoscape Consortium (www.cytoscape.org) + + The Cytoscape Consortium is: + - Institute for Systems Biology + - University of California San Diego + - Memorial Sloan-Kettering Cancer Center + - Institut Pasteur + - Agilent Technologies + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, or + any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and + documentation provided hereunder is on an "as is" basis, and the + Institute for Systems Biology and the Whitehead Institute + have no obligations to provide maintenance, support, + updates, enhancements or modifications. In no event shall the + Institute for Systems Biology and the Whitehead Institute + be liable to any party for direct, indirect, special, + incidental or consequential damages, including lost profits, arising + out of the use of this software and its documentation, even if the + Institute for Systems Biology and the Whitehead Institute + have been advised of the possibility of such damage. See + the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +*/ +package org.cytoscape.work.internal.task; + +import javax.swing.undo.*; + +import org.cytoscape.work.swing.undo.SwingUndoSupport; +import org.cytoscape.work.undo.AbstractCyEdit; + +public class UndoSupportImpl implements SwingUndoSupport { + + public UndoSupportImpl() { + } + + /** + * Returns the UndoManager. To preserve encapsulation and to prevent + * the wrong hands for mucking with your edit stack, don't make this + * public! Rather, extend the class and use this method with the + * class and package to set up actions, etc.. + * @return the UndoManager used for managing the edits. + */ + public UndoManager getUndoManager() { + return null; + } + + /** + * Use this method to get the UndoableEditSupport which you should use + * to post edits: Undo.getUndoableEditSupport().postEdit(yourEdit). + * @return the UndoableEditSupport used for posting edits. + */ + public UndoableEditSupport getUndoableEditSupport() { + return null; + } + + @Override + public void reset() { + } + + @Override + public void postEdit(AbstractCyEdit edit) { + // TODO Auto-generated method stub + + } +} + -- 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.
