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.