Skip to content

Commit 508de9c

Browse files
committed
Refs #209: Fixes bug where no edges are selected when they are compound.
1 parent 1215b6f commit 508de9c

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/SelectNodesEdgesTask.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import java.util.ArrayList;
44
import java.util.Collection;
5+
import java.util.Collections;
6+
import java.util.HashSet;
57
import java.util.List;
68
import java.util.Set;
79

810
import org.baderlab.csplugins.enrichmentmap.model.AbstractDataSet;
11+
import org.baderlab.csplugins.enrichmentmap.model.EMSignatureDataSet;
912
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
1013
import org.cytoscape.event.CyEventHelper;
14+
import org.cytoscape.model.CyEdge;
1115
import org.cytoscape.model.CyIdentifiable;
1216
import org.cytoscape.model.CyNetwork;
1317
import org.cytoscape.model.CyRow;
@@ -28,17 +32,20 @@ public class SelectNodesEdgesTask extends AbstractTask {
2832

2933
private final CyNetworkView networkView;
3034
private final Set<AbstractDataSet> dataSets;
35+
private final boolean distinctEdges;
3136

3237
@Inject private CyEventHelper eventHelper;
3338

3439
public interface Factory {
35-
SelectNodesEdgesTask create(CyNetworkView networkView, Set<AbstractDataSet> dataSets);
40+
SelectNodesEdgesTask create(CyNetworkView networkView, Set<AbstractDataSet> dataSets, boolean distinctEdges);
3641
}
3742

3843
@Inject
39-
public SelectNodesEdgesTask(@Assisted CyNetworkView networkView, @Assisted Set<AbstractDataSet> dataSets) {
44+
public SelectNodesEdgesTask(@Assisted CyNetworkView networkView, @Assisted Set<AbstractDataSet> dataSets,
45+
@Assisted boolean distinctEdges) {
4046
this.networkView = networkView;
4147
this.dataSets = dataSets;
48+
this.distinctEdges = distinctEdges;
4249
}
4350

4451
@Override
@@ -47,8 +54,24 @@ public void run(TaskMonitor tm) {
4754
tm.setStatusMessage("Getting Nodes and Edges from Data Sets...");
4855
tm.setProgress(0.0);
4956

50-
Set<Long> dataSetNodes = EnrichmentMap.getNodesUnion(dataSets);
51-
Set<Long> dataSetEdges = EnrichmentMap.getEdgesUnion(dataSets);
57+
final Set<Long> dataSetNodes = EnrichmentMap.getNodesUnion(dataSets);
58+
final Set<Long> dataSetEdges;
59+
60+
if (distinctEdges) {
61+
dataSetEdges = EnrichmentMap.getEdgesUnion(dataSets);
62+
} else {
63+
dataSetEdges = new HashSet<>();
64+
65+
for (CyEdge e : networkView.getModel().getEdgeList()) {
66+
if (dataSetNodes.contains(e.getSource().getSUID()) && dataSetNodes.contains(e.getTarget().getSUID()))
67+
dataSetEdges.add(e.getSUID());
68+
}
69+
70+
for (AbstractDataSet ds : dataSets) {
71+
if (ds instanceof EMSignatureDataSet)
72+
dataSetEdges.addAll(EnrichmentMap.getEdgesUnion(Collections.singleton(ds)));
73+
}
74+
}
5275

5376
if (!cancelled) {
5477
tm.setStatusMessage("Selecting Edges...");

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/control/ControlPanelMediator.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,11 @@ private void maybeShowContextMenu(final MouseEvent e) {
485485
final JPopupMenu contextMenu = new JPopupMenu();
486486
{
487487
JMenuItem mi = new JMenuItem("Select nodes and edges from selected data sets");
488-
mi.addActionListener(evt -> selectNodesEdges(viewPanel.getNetworkView(),
489-
viewPanel.getDataSetSelector().getSelectedItems()));
488+
mi.addActionListener(evt -> selectNodesEdges(
489+
viewPanel.getNetworkView(),
490+
viewPanel.getDataSetSelector().getSelectedItems(),
491+
map.getParams().getCreateDistinctEdges()
492+
));
490493
contextMenu.add(mi);
491494
}
492495
contextMenu.addSeparator();
@@ -819,8 +822,8 @@ private void showContextMenu(final JPopupMenu contextMenu, final MouseEvent e) {
819822
});
820823
}
821824

822-
private void selectNodesEdges(CyNetworkView netView, Set<AbstractDataSet> dataSets) {
823-
SelectNodesEdgesTask task = selectNodesEdgesTaskFactory.create(netView, dataSets);
825+
private void selectNodesEdges(CyNetworkView netView, Set<AbstractDataSet> dataSets, boolean distinctEdges) {
826+
SelectNodesEdgesTask task = selectNodesEdgesTaskFactory.create(netView, dataSets, distinctEdges);
824827
dialogTaskManager.execute(new TaskIterator(task));
825828
}
826829

@@ -928,8 +931,8 @@ private Set<CyEdge> getFilteredInEdges(Set<AbstractDataSet> selectedDataSets) {
928931

929932
Set<CyEdge> filteredInEdges = new HashSet<>();
930933
CyNetwork net = netView.getModel();
931-
932934
boolean distinct = params.getCreateDistinctEdges();
935+
933936
if (distinct) {
934937
for (CyEdge e : net.getEdgeList()) {
935938
if (dataSetEdges.contains(e.getSUID()))

0 commit comments

Comments
 (0)