Author: jm
Date: 2012-08-20 07:33:45 -0700 (Mon, 20 Aug 2012)
New Revision: 30223

Added:
   
core3/impl/trunk/work-impl/src/test/java/org/cytoscape/work/internal/sync/TunableSetterTest.java
Modified:
   core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java
   
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
Log:
References #1373: Added TunableSetter.applyTunables so that tunables can be set 
for arbitrary objects.

Modified: 
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    
    2012-08-20 00:00:41 UTC (rev 30222)
+++ 
core3/api/trunk/work-api/src/main/java/org/cytoscape/work/TunableSetter.java    
    2012-08-20 14:33:45 UTC (rev 30223)
@@ -27,4 +27,12 @@
         */
        TaskIterator createTaskIterator(TaskIterator taskIterator, 
Map<String,Object> tunableValues);
 
+       /**
+        * Applies each value from the key-value pairs in tunableValues to the 
tunable in the
+        * given object whose name matches the corresponding key.
+        * @param object The object 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.
+        */
+       void applyTunables(Object object, Map<String,Object> tunableValues);
 }

Modified: 
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
    2012-08-20 00:00:41 UTC (rev 30222)
+++ 
core3/impl/trunk/work-impl/src/main/java/org/cytoscape/work/internal/sync/TunableSetterImpl.java
    2012-08-20 14:33:45 UTC (rev 30223)
@@ -24,5 +24,11 @@
        public TaskIterator createTaskIterator(TaskIterator ti, 
Map<String,Object> tunableValues) {
                return new TaskIterator(ti.getNumTasks(), new 
DelegateTask(stm,trm,ti,tunableValues) );
        }
+       
+       @Override
+       public void applyTunables(Object object, Map<String, Object> 
tunableValues) {
+               stm.setConfigurationContext(tunableValues);
+               stm.validateAndWriteBack(object);
+       }
 }
 

Added: 
core3/impl/trunk/work-impl/src/test/java/org/cytoscape/work/internal/sync/TunableSetterTest.java
===================================================================
--- 
core3/impl/trunk/work-impl/src/test/java/org/cytoscape/work/internal/sync/TunableSetterTest.java
                            (rev 0)
+++ 
core3/impl/trunk/work-impl/src/test/java/org/cytoscape/work/internal/sync/TunableSetterTest.java
    2012-08-20 14:33:45 UTC (rev 30223)
@@ -0,0 +1,97 @@
+package org.cytoscape.work.internal.sync;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import junit.framework.Assert;
+
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.Tunable;
+import org.cytoscape.work.TunableSetter;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TunableSetterTest {
+       private TunableSetter setter;
+
+       private SyncTunableMutator<?> createMutator() {
+               SyncTunableMutator<?> mutator = new 
SyncTunableMutator<Object>();               
+               mutator.addTunableHandlerFactory(new 
SyncTunableHandlerFactory(), new Properties());
+               return mutator;
+       }
+       
+       @Before
+       public void setUp() {
+               TunableRecorderManager recorderManager = new 
TunableRecorderManager();
+               SyncTunableMutator<?> mutator = createMutator();
+               setter = new TunableSetterImpl(mutator, recorderManager);
+       }
+       
+       @Test
+       public void testApplyTunables() {
+               TestObject object = new TestObject();
+               Assert.assertEquals(5D, object.score);
+               
+               Map<String, Object> settings = new HashMap<String, Object>();
+               settings.put("score", 10D);
+               
+               setter.applyTunables(object, settings);
+               
+               Assert.assertEquals(10D, object.score);         
+       }
+       
+       @Test
+       public void testCreateTaskIterator() {
+               TunableTask[] tasks = new TunableTask[] { new FirstTask(), new 
LastTask() };
+               TaskIterator taskIterator = new TaskIterator(tasks);
+               
+               Map<String, Object> settings = new HashMap<String, Object>();
+               settings.put("firstTask", "new value1");
+               settings.put("lastTask", "new value2");
+               TaskIterator taskIterator2 = 
setter.createTaskIterator(taskIterator, settings);
+               
+               SyncTunableMutator<?> mutator = createMutator();
+               SyncTaskManager taskManager = new SyncTaskManager(mutator);
+               taskManager.execute(taskIterator2);
+               
+               
+               // Ensure tasks were actually run
+               for (TunableTask task : tasks) {
+                       Assert.assertTrue(task.result);
+               }
+       }
+       
+       public static class TestObject {
+               @Tunable
+               public Double score = 5D;
+       }
+       
+       public static abstract class TunableTask extends AbstractTask {
+               boolean result;
+       }
+       
+       public static class FirstTask extends TunableTask {
+               @Tunable
+               public String firstTask = "old value";
+               
+               @Override
+               public void run(TaskMonitor taskMonitor) throws Exception {
+                       Assert.assertEquals("new value1", firstTask);
+                       result = true;
+               }
+       }
+
+       public static class LastTask extends TunableTask {
+               @Tunable
+               public String lastTask = "old value";
+               
+               @Override
+               public void run(TaskMonitor taskMonitor) throws Exception {
+                       Assert.assertEquals("new value2", lastTask);
+                       result = true;
+               }
+       }
+}

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