diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java index d3e12368aac998179d019fafc1bb016e4f2af7be..47f1c4dd49dff15317072a6eda3b8834c9733887 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java @@ -22,6 +22,8 @@ package de.hhu.ba.yoshikoWrapper.graphModel; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import org.cytoscape.model.CyNetwork; @@ -36,21 +38,21 @@ public class YoshikoResult{ private CyNetwork originalGraph; - private ArrayList<YoshikoSolution> solutions; + private HashMap<Long,YoshikoSolution> solutions; private SolutionFlags flags; private int id; public YoshikoResult(CyNetwork net, SolutionFlags flags) { - solutions = new ArrayList<YoshikoSolution>(); + solutions = new HashMap<Long,YoshikoSolution>(); this.originalGraph = net; this.flags = flags; ResultList.add(this); } public void delete() { - for (YoshikoSolution s: solutions) { + for (YoshikoSolution s: solutions.values()) { s.delete(); } ResultList.remove(this.id); @@ -59,7 +61,7 @@ public class YoshikoResult{ //___________SETTER GETTER_____________// /** - * @return the flags asspciated with this result + * @return the flags associated with this result */ public SolutionFlags getFlags() { return flags; @@ -67,15 +69,13 @@ public class YoshikoResult{ public void addSolution(YoshikoSolution solution) { - solutions.add(solution); + solutions.put(solution.getId(),solution); } - - public ArrayList<YoshikoSolution> getSolutions() { - return solutions; + public Collection<YoshikoSolution> getSolutions() { + return solutions.values(); } - public CyNetwork getOriginalGraph() { return originalGraph; } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java index 542cce2a728bd40503573b4951e4b17117eedb55..bf8eb5e9593860b31072e143eafc8337150d25a0 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java @@ -21,11 +21,11 @@ ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.graphModel; -import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; import java.util.HashMap; import java.util.List; -import javax.swing.JOptionPane; import org.cytoscape.model.CyNetwork; import org.cytoscape.model.CyNode; @@ -43,7 +43,7 @@ public class YoshikoSolution { private HashMap<YoshikoCluster, CyNode> metaGraphMap; - public ArrayList<YoshikoCluster> clusters; + private HashMap<Long,YoshikoCluster> clusters; private final long id; @@ -51,15 +51,39 @@ public class YoshikoSolution { public YoshikoSolution(YoshikoResult yoshikoResult, long id) { - clusters = new ArrayList<YoshikoCluster>(); + clusters = new HashMap<Long,YoshikoCluster>(); this.result = yoshikoResult; this.id = id; } + public void delete() { + for (YoshikoCluster c: clusters.values()) { + c.delete(); + } + if (this.metaGraph != null) { + CyCore.networkManager.destroyNetwork(metaGraph); + } + } + + public void highlightInMetaGraph(YoshikoCluster yoshikoCluster) { + try { + List<CyRow> allRows = metaGraph.getDefaultNodeTable().getAllRows(); + for (CyRow r: allRows) { + r.set("selected", false); + } + + metaGraph.getRow(metaGraphMap.get(yoshikoCluster)).set("selected", true); + } + catch (Exception e) { + logger.warn("The graph doesn't exist anymore, can't highlight nodes!"); + } + + } + //_____________GETTER / SETTER ________________// - public ArrayList<YoshikoCluster> getClusters() { - return clusters; + public Collection<YoshikoCluster> getClusters() { + return clusters.values(); } /** @@ -73,15 +97,6 @@ public class YoshikoSolution { return result.getOriginalGraph(); } - public void delete() { - for (YoshikoCluster c: clusters) { - c.delete(); - } - if (this.metaGraph != null) { - CyCore.networkManager.destroyNetwork(metaGraph); - } - } - public void setMetaGraph(CyNetwork metaGraph, HashMap<YoshikoCluster, CyNode> map) { this.metaGraph = metaGraph; this.metaGraphMap = map; @@ -91,19 +106,9 @@ public class YoshikoSolution { return metaGraph; } - public void highlightInMetaGraph(YoshikoCluster yoshikoCluster) { - try { - List<CyRow> allRows = metaGraph.getDefaultNodeTable().getAllRows(); - for (CyRow r: allRows) { - r.set("selected", false); - } - - metaGraph.getRow(metaGraphMap.get(yoshikoCluster)).set("selected", true); - } - catch (Exception e) { - logger.warn("The graph doesn't exist anymore, can't highlight nodes!"); - } - + public void addCluster(YoshikoCluster cluster) { + clusters.put(cluster.getID(), cluster); } + } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java index e8e92cf4f5d83908ccd7058653a685c152cc8af6..de0ebdcd3f79c8843963b2301bee32c437967b80 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java @@ -30,6 +30,7 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; +import java.util.List; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; @@ -114,7 +115,9 @@ public class SolutionTab extends JPanel { clusterViewList = new ClusterViewList(); //Build CV list - for (YoshikoCluster c: solution.clusters) { + List<YoshikoCluster> list = new ArrayList<YoshikoCluster>(solution.getClusters()); + list.sort(YoshikoCluster.lessThanComparator); + for (YoshikoCluster c: list) { ClusterView clusterView = new ClusterView(c); clusterViewList.add(clusterView); } @@ -124,7 +127,7 @@ public class SolutionTab extends JPanel { scrollPane = new JScrollPane(clusterViewList); - clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.clusters.size()); + clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.getClusters().size()); createClusterView = new JButton(LocalizationManager.get("createClusterView")); createMetaGraph = new JButton(LocalizationManager.get("createMetaGraph")); 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 375fc06930088a9e2ee16dbfce11efc21c48600f..8f7299e3bf46ccaafbff8b6c06bc045fac50e7af 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java @@ -219,10 +219,10 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask { net.getRow(node).set(columnName, ""+(k+1)); //Add Cluster ID in table (Remove in final version?) } //Register clusters with solution for further reference - solution.clusters.add(cluster); + solution.addCluster(cluster); } //Sort clusters by size, descending as the biggest clusters are usually the most relevant - solution.clusters.sort(YoshikoCluster.lessThanComparator); + //solution.sortClusters(YoshikoCluster.lessThanComparator); //Register solution with c_result for further reference result.addSolution(solution); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java index 18a7ef2c43abdd207719515269c18d4a33adb274..1f24dea291ab3a44cd99620a3e77873ec348e0d3 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java @@ -2,6 +2,7 @@ package de.hhu.ba.yoshikoWrapper.tasks; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import org.cytoscape.model.CyEdge; import org.cytoscape.model.CyNetwork; @@ -103,10 +104,13 @@ public class CreateMetaGraphTask extends AbstractTask{ taskMonitor.setStatusMessage(LocalizationManager.get("metaGraph_edges")); - for (int x = 0; x <solution.getClusters().size(); x ++) { - YoshikoCluster c1 = solution.getClusters().get(x); - for (int y = x; y <solution.getClusters().size(); y ++) { - YoshikoCluster c2 = solution.getClusters().get(y); + Iterator<YoshikoCluster> it1 = solution.getClusters().iterator(); + Iterator<YoshikoCluster> it2 = solution.getClusters().iterator(); + + while (it1.hasNext()) { + YoshikoCluster c1 = it1.next(); + while(it2.hasNext()) { + YoshikoCluster c2 = it2.next(); if(isTerminated) { throw new Exception("Terminated by user!"); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java new file mode 100644 index 0000000000000000000000000000000000000000..78888ae59398abce065e4db6c3ba544c0b9305dc --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java @@ -0,0 +1,49 @@ +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.YoshikoCluster; +import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult; +import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; + +public class GetClustersTask implements ObservableTask { + + @Tunable(description="The result ID for which the solutions should be displayed", context="nogui") + public int resultID = -1; + + @Tunable(description="The solution ID for which the solutions should be displayed", context="nogui") + public int solutionID = -1; + + private ArrayList<YoshikoCluster> clusters; + + @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 + } + } + + @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 = ""; + + return (R) ret; + } + 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 index c356698bf06ea4a8554ceb57d0590ee77d5d3f22..318cc18dd7188c77c1cee7ce8074b3ac8941cbdb 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java @@ -1,6 +1,7 @@ package de.hhu.ba.yoshikoWrapper.tasks; import java.util.ArrayList; +import java.util.Collection; import org.cytoscape.work.ObservableTask; import org.cytoscape.work.TaskMonitor; @@ -15,7 +16,7 @@ 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; + private Collection<YoshikoSolution> solutions; @Override public void run(TaskMonitor taskMonitor) throws Exception { @@ -38,7 +39,7 @@ public class GetSolutionsTask implements ObservableTask { if (type.equals(String.class)) { String ret = ""; for (YoshikoSolution s: solutions) { - ret+="Solution ["+s.getId()+"]: "+s.getClusters().size()+" clusters\n"; + ret+="Solution[ID="+s.getId()+"]: "+s.getClusters().size()+" clusters\n"; } return (R) ret; }