diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java index 02bcee9949ca4f8fe4bc1c4f9b0073b0a6cb36af..ee46985628ef545a62f94a0bcc99ef35cd0dea26 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java @@ -113,12 +113,19 @@ public class CyActivator extends AbstractCyActivator { } //Register commands / CyRest - TaskFactory commandTaskFactory = new CommandTaskFactory(YoshikoCommand.PERFORM_ALGORITHM); - Properties props = new Properties(); - props.setProperty(COMMAND_NAMESPACE, "yoshiko"); - props.setProperty(COMMAND, YoshikoCommand.PERFORM_ALGORITHM.toString()); - props.setProperty(COMMAND_DESCRIPTION,"Cluster a network with the Yoshiko algorithm"); - registerService(context, commandTaskFactory, TaskFactory.class, props); + TaskFactory commandTaskFactory_PERFORM_ALGORITHM = new CommandTaskFactory(YoshikoCommand.PERFORM_ALGORITHM); + Properties props_PERFORM_ALGORITHM = new Properties(); + props_PERFORM_ALGORITHM.setProperty(COMMAND_NAMESPACE, "yoshiko"); + props_PERFORM_ALGORITHM.setProperty(COMMAND, YoshikoCommand.PERFORM_ALGORITHM.toString()); + props_PERFORM_ALGORITHM.setProperty(COMMAND_DESCRIPTION,"Cluster a network with the Yoshiko algorithm"); + registerService(context, commandTaskFactory_PERFORM_ALGORITHM, TaskFactory.class, props_PERFORM_ALGORITHM); + + TaskFactory commandTaskFactory_GET_SOLUTIONS = new CommandTaskFactory(YoshikoCommand.GET_SOLUTIONS); + Properties props_GET_SOLUTIONS = new Properties(); + props_GET_SOLUTIONS.setProperty(COMMAND_NAMESPACE, "yoshiko"); + props_GET_SOLUTIONS.setProperty(COMMAND, YoshikoCommand.GET_SOLUTIONS.toString()); + props_GET_SOLUTIONS.setProperty(COMMAND_DESCRIPTION,"Retrieve solutions associated with a result"); + registerService(context, commandTaskFactory_GET_SOLUTIONS, TaskFactory.class, props_GET_SOLUTIONS); //Initialize and register main panel MainPanel mainPanel = new MainPanel(); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/ResultList.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/ResultList.java index 5bc2b23c2e45fcea698139ba69d7570da2b1d42d..118f5a29cba69d45646ed3afd048b20af628d4e5 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/ResultList.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/ResultList.java @@ -4,6 +4,11 @@ import java.util.HashMap; import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult; +/** + * Simple wrapper for a HashMap that manages unique IDs + * @author Philipp Spohr, Dec 11, 2017 + * + */ public class ResultList { private static HashMap<Integer,YoshikoResult> map = new HashMap<Integer,YoshikoResult>(); @@ -24,5 +29,12 @@ public class ResultList { map.remove(resultID); } + public static YoshikoResult get(int resultID) { + if (map.containsKey(resultID)) { + return map.get(resultID); + } + return null; + } + } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/CommandTaskFactory.java b/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/CommandTaskFactory.java index 6dcc7d1f1988b7b7e0ec80ccf57d0cd5faddac34..53e7fbbdd14a5ec4f28ecf0a643e6d4afef80bcd 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/CommandTaskFactory.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/CommandTaskFactory.java @@ -6,6 +6,7 @@ import org.cytoscape.work.TaskIterator; import de.hhu.ba.yoshikoWrapper.core.ParameterSet; import de.hhu.ba.yoshikoWrapper.tasks.AlgorithmTask; import de.hhu.ba.yoshikoWrapper.tasks.CreateClusterViewsTask; +import de.hhu.ba.yoshikoWrapper.tasks.GetSolutionsTask; public class CommandTaskFactory implements TaskFactory{ @@ -32,6 +33,13 @@ public class CommandTaskFactory implements TaskFactory{ else if (command == YoshikoCommand.CREATE_META_GRAPH) { return null; } + + else if (command == YoshikoCommand.GET_SOLUTIONS) { + return new TaskIterator( + new GetSolutionsTask() + ); + } + else if (command == YoshikoCommand.PERFORM_ALGORITHM) { return new TaskIterator( new AlgorithmTask( diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/YoshikoCommand.java b/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/YoshikoCommand.java index 87fb8c9b9fdc62ef34ad6c5caf2f7a4c086fc2c2..25ead63a2f857fff895d91e36d1c54a166f63fdc 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/YoshikoCommand.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/taskFactories/YoshikoCommand.java @@ -11,7 +11,8 @@ public enum YoshikoCommand { */ CREATE_CLUSTER_VIEW, CREATE_META_GRAPH, - PERFORM_ALGORITHM; + PERFORM_ALGORITHM, + GET_SOLUTIONS; @Override public String toString() { @@ -21,6 +22,9 @@ public enum YoshikoCommand { else if (this==CREATE_CLUSTER_VIEW) { return "createcvs"; } + else if (this==GET_SOLUTIONS) { + return "solutions"; + } return "null"; } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java index b7d61f7903e4c654d55480253ff3a77e54fe8700..375fc06930088a9e2ee16dbfce11efc21c48600f 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java @@ -292,7 +292,7 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask { public <R> R getResults(Class<? extends R> type) { //We return the id of the result so we can work with the result from CMD if (type.equals(String.class)) { - return (R) (""+result.getID()); + return (R) ("Result generated with ID: "+result.getID()); } return null; } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java new file mode 100644 index 0000000000000000000000000000000000000000..c356698bf06ea4a8554ceb57d0590ee77d5d3f22 --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java @@ -0,0 +1,48 @@ +package de.hhu.ba.yoshikoWrapper.tasks; + +import java.util.ArrayList; + +import org.cytoscape.work.ObservableTask; +import org.cytoscape.work.TaskMonitor; +import org.cytoscape.work.Tunable; + +import de.hhu.ba.yoshikoWrapper.core.ResultList; +import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult; +import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; + +public class GetSolutionsTask implements ObservableTask { + + @Tunable(description="The result ID for which the solutions should be displayed", context="nogui") + public int resultID = -1; + + private ArrayList<YoshikoSolution> solutions; + + @Override + public void run(TaskMonitor taskMonitor) throws Exception { + YoshikoResult result = ResultList.get(resultID); + if (result == null) { + throw new Exception("No result with ID: "+resultID+" was found!"); //TODO: Localization + } + solutions = result.getSolutions(); + } + + @Override + public void cancel() { + // TODO Auto-generated method stub + + } + + @SuppressWarnings("unchecked") + @Override + public <R> R getResults(Class<? extends R> type) { + if (type.equals(String.class)) { + String ret = ""; + for (YoshikoSolution s: solutions) { + ret+="Solution ["+s.getId()+"]: "+s.getClusters().size()+" clusters\n"; + } + return (R) ret; + } + return null; + } + +}