Skip to content

Commit 024daf6

Browse files
committed
Add command for AutoAnnotate to associate summary network.
Refs #498
1 parent 9421358 commit 024daf6

File tree

10 files changed

+155
-42
lines changed

10 files changed

+155
-42
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/CommandModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.baderlab.csplugins.enrichmentmap;
22

33
import org.baderlab.csplugins.enrichmentmap.actions.OpenEnrichmentMapPanelsAction;
4+
import org.baderlab.csplugins.enrichmentmap.commands.AssociateNetworkCommandTask;
45
import org.baderlab.csplugins.enrichmentmap.commands.ChartCommandTask;
56
import org.baderlab.csplugins.enrichmentmap.commands.DatasetColorCommandTask;
67
import org.baderlab.csplugins.enrichmentmap.commands.DatasetShowCommandTask;
@@ -115,5 +116,11 @@ public CommandTaskFactory provideExportImage(Provider<ExportNetworkImageCommandT
115116
String desc = "Exports the network view to an image file in the users home directory.";
116117
return CommandTaskFactory.create("export png", desc, null, taskProvider);
117118
}
119+
120+
@ProvidesIntoSet
121+
public CommandTaskFactory provideAssociateNetwork(Provider<AssociateNetworkCommandTask> taskProvider) {
122+
String desc = "Sets a network as 'associated' with an EnrichmentMap network. This command is intended to be used programatically by other Apps.";
123+
return CommandTaskFactory.create("associate", desc, null, taskProvider);
124+
}
118125

119126
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/CommandTaskFactory.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,16 @@ public interface CommandTaskFactory extends TaskFactory {
2222

2323
public static CommandTaskFactory create(String name, String desc, String longDesc, Provider<? extends Task> taskProvider, Task... moreTasks) {
2424
Task task = taskProvider.get();
25-
boolean supportsJson;
26-
if(task instanceof ObservableTask) {
27-
supportsJson = ((ObservableTask)task).getResultClasses().contains(JSONResult.class);
28-
} else {
29-
supportsJson = false;
30-
}
25+
boolean supportsJson = supportsJson(task);
3126

3227
return new CommandTaskFactory() {
3328
@Override
3429
public TaskIterator createTaskIterator() {
35-
TaskIterator taskIterator = new TaskIterator(taskProvider.get());
30+
var ti = new TaskIterator(taskProvider.get());
3631
for(Task task : moreTasks) {
37-
taskIterator.append(task);
32+
ti.append(task);
3833
}
39-
return taskIterator;
34+
return ti;
4035
}
4136

4237
@Override public boolean isReady() { return true; }
@@ -46,4 +41,11 @@ public TaskIterator createTaskIterator() {
4641
@Override public boolean supportsJson() { return supportsJson; }
4742
};
4843
}
44+
45+
private static boolean supportsJson(Task task) {
46+
if(task instanceof ObservableTask) {
47+
return ((ObservableTask)task).getResultClasses().contains(JSONResult.class);
48+
}
49+
return false;
50+
}
4951
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import org.baderlab.csplugins.enrichmentmap.model.AssociatedApp;
4+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
5+
import org.cytoscape.model.CyNetworkManager;
6+
import org.cytoscape.work.AbstractTask;
7+
import org.cytoscape.work.TaskMonitor;
8+
import org.cytoscape.work.Tunable;
9+
import org.cytoscape.work.util.ListSingleSelection;
10+
11+
import com.google.inject.Inject;
12+
13+
public class AssociateNetworkCommandTask extends AbstractTask {
14+
15+
@Tunable
16+
public Long emNetworkSUID;
17+
18+
@Tunable
19+
public Long associatedNetworkSUID;
20+
21+
@Tunable(description = "One of GENEMANIA, STRING, AUTOANNOTATE")
22+
public ListSingleSelection<String> app;
23+
24+
25+
@Inject private CyNetworkManager netManager;
26+
@Inject private EnrichmentMapManager emManager;
27+
28+
public AssociateNetworkCommandTask() {
29+
app = new ListSingleSelection<>(
30+
AssociatedApp.GENEMANIA.name(),
31+
AssociatedApp.STRING.name(),
32+
AssociatedApp.AUTOANNOTATE.name()
33+
);
34+
}
35+
36+
@Override
37+
public void run(TaskMonitor tm) {
38+
if(emNetworkSUID == null)
39+
throw new IllegalArgumentException("emNetworkSUID is null");
40+
if(!emManager.isEnrichmentMap(emNetworkSUID))
41+
throw new IllegalArgumentException("emNetworkSUID is not an EnrichmentMap network");
42+
if(associatedNetworkSUID == null)
43+
throw new IllegalArgumentException("associatedNetworkSUID is null");
44+
45+
var network = netManager.getNetwork(associatedNetworkSUID);
46+
if(network == null)
47+
throw new IllegalArgumentException("associatedNetworkSUID is invalid");
48+
49+
var map = emManager.getEnrichmentMap(emNetworkSUID);
50+
51+
AssociatedApp assApp;
52+
try {
53+
assApp = AssociatedApp.valueOf(app.getSelectedValue());
54+
} catch(IllegalArgumentException | NullPointerException e) {
55+
throw new IllegalArgumentException("app is invalid");
56+
}
57+
58+
map.addAssociatedNetworkID(network.getSUID());
59+
emManager.addAssociatedAppAttributes(network, map, assApp);
60+
}
61+
62+
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/AssociatedApp.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,37 @@
11
package org.baderlab.csplugins.enrichmentmap.model;
22

33
import org.baderlab.csplugins.enrichmentmap.style.ColumnDescriptor;
4+
import org.baderlab.csplugins.enrichmentmap.style.ColumnListDescriptor;
5+
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder;
46

57
public enum AssociatedApp {
6-
GENEMANIA("GeneMANIA", Columns.GM_GENE_NAME, Columns.GM_QUERY_TERM),
7-
STRING("STRING", Columns.STR_GENE_NAME, Columns.STR_QUERY_TERM);
8+
9+
GENEMANIA("GeneMANIA", AssociatedAppColumns.GM_GENE_NAME, AssociatedAppColumns.GM_QUERY_TERM),
10+
STRING("STRING", AssociatedAppColumns.STR_GENE_NAME, AssociatedAppColumns.STR_QUERY_TERM),
11+
AUTOANNOTATE("AUTOANNOTATE", EMStyleBuilder.Columns.NODE_GENES);
12+
813

914
private final String name;
1015
private final ColumnDescriptor<String> geneNameColumn;
16+
private final ColumnListDescriptor<String> geneNameListColumn;
1117
private final ColumnDescriptor<String> queryTermColumn;
1218

13-
private AssociatedApp(String name, ColumnDescriptor<String> geneNameColumn,
14-
ColumnDescriptor<String> queryTermColumn) {
19+
20+
private AssociatedApp(String name, ColumnDescriptor<String> geneNameColumn, ColumnDescriptor<String> queryTermColumn) {
1521
this.name = name;
1622
this.geneNameColumn = geneNameColumn;
23+
this.geneNameListColumn = null;
1724
this.queryTermColumn = queryTermColumn;
1825
}
1926

27+
private AssociatedApp(String name, ColumnListDescriptor<String> geneNameListColumn) {
28+
this.name = name;
29+
this.geneNameColumn = null;
30+
this.geneNameListColumn = geneNameListColumn;
31+
this.queryTermColumn = null;
32+
}
33+
34+
2035
public ColumnDescriptor<String> getGeneNameColumn() {
2136
return geneNameColumn;
2237
}
@@ -25,6 +40,11 @@ public ColumnDescriptor<String> getQueryTermColumn() {
2540
return queryTermColumn;
2641
}
2742

43+
public ColumnListDescriptor<String> getGeneNameListColumn() {
44+
return geneNameListColumn;
45+
}
46+
47+
2848
@Override
2949
public String toString() {
3050
return name;

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/Columns.java renamed to EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/AssociatedAppColumns.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.baderlab.csplugins.enrichmentmap.style.ColumnDescriptor;
44
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder;
55

6-
public interface Columns {
6+
public interface AssociatedAppColumns {
77

88
// GeneMANIA Attributes
99
// NODE

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/EnrichmentMapManager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ public void addAssociatedAppAttributes(CyNetwork network, EnrichmentMap map, Ass
170170
// Add EM Network SUID to associated network's table.
171171
CyTable table = network.getTable(CyNetwork.class, CyNetwork.HIDDEN_ATTRS);
172172

173-
Columns.EM_NETWORK_SUID.createColumnIfAbsent(table);
174-
Columns.EM_NETWORK_SUID.set(table.getRow(network.getSUID()), map.getNetworkID());
173+
AssociatedAppColumns.EM_NETWORK_SUID.createColumnIfAbsent(table);
174+
AssociatedAppColumns.EM_NETWORK_SUID.set(table.getRow(network.getSUID()), map.getNetworkID());
175175

176176
// Add App name to associated network's hidden table, to make it easier and more consistent later
177-
Columns.EM_ASSOCIATED_APP.createColumnIfAbsent(table);
178-
Columns.EM_ASSOCIATED_APP.set(table.getRow(network.getSUID()), app.name());
177+
AssociatedAppColumns.EM_ASSOCIATED_APP.createColumnIfAbsent(table);
178+
AssociatedAppColumns.EM_ASSOCIATED_APP.set(table.getRow(network.getSUID()), app.name());
179179

180180
// Update our internal map and fire an event if it changed
181181
if (associatedEnrichmentMaps.put(network.getSUID(), map) == null) {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,11 @@ private void createDataSetColumn() {
163163
columnData.put(node.getSUID(), data);
164164

165165
String name = NetworkUtil.getGeneName(network, node);
166-
167166
if (name == null)
168167
continue;
169168

170169
String queryTerm = NetworkUtil.getQueryTerm(network, name);
171170
Integer id = map.getHashFromGene(queryTerm != null ? queryTerm : name);
172-
173171
if (id == null)
174172
continue;
175173

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/util/NetworkUtil.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import java.util.function.Function;
77

88
import org.baderlab.csplugins.enrichmentmap.model.AssociatedApp;
9-
import org.baderlab.csplugins.enrichmentmap.model.Columns;
9+
import org.baderlab.csplugins.enrichmentmap.model.AssociatedAppColumns;
1010
import org.cytoscape.model.CyEdge;
1111
import org.cytoscape.model.CyIdentifiable;
1212
import org.cytoscape.model.CyNetwork;
@@ -94,22 +94,24 @@ public static List<Long> keys(Collection<? extends CyIdentifiable> nodesOrEdges)
9494
public static AssociatedApp getAssociatedApp(CyNetwork network) {
9595
CyTable table = network.getTable(CyNetwork.class, CyNetwork.HIDDEN_ATTRS);
9696

97-
if(!Columns.EM_ASSOCIATED_APP.hasColumn(table))
97+
if(!AssociatedAppColumns.EM_ASSOCIATED_APP.hasColumn(table))
9898
return null;
9999

100-
String app = Columns.EM_ASSOCIATED_APP.get(network.getRow(network, CyNetwork.HIDDEN_ATTRS));
100+
String app = AssociatedAppColumns.EM_ASSOCIATED_APP.get(network.getRow(network, CyNetwork.HIDDEN_ATTRS));
101101

102102
if (AssociatedApp.GENEMANIA.name().equalsIgnoreCase(app))
103103
return AssociatedApp.GENEMANIA;
104104
if (AssociatedApp.STRING.name().equalsIgnoreCase(app))
105105
return AssociatedApp.STRING;
106+
if (AssociatedApp.AUTOANNOTATE.name().equalsIgnoreCase(app))
107+
return AssociatedApp.AUTOANNOTATE;
106108

107109
return null;
108110
}
109111

110112
public static boolean isAssociatedNetwork(CyNetwork network) {
111113
CyTable table = network.getTable(CyNetwork.class, CyNetwork.HIDDEN_ATTRS);
112-
return Columns.EM_NETWORK_SUID.hasColumn(table) && Columns.EM_NETWORK_SUID.get(network.getRow(network, CyNetwork.HIDDEN_ATTRS)) != null;
114+
return AssociatedAppColumns.EM_NETWORK_SUID.hasColumn(table) && AssociatedAppColumns.EM_NETWORK_SUID.get(network.getRow(network, CyNetwork.HIDDEN_ATTRS)) != null;
113115
}
114116

115117
/**
@@ -118,11 +120,13 @@ public static boolean isAssociatedNetwork(CyNetwork network) {
118120
public static String getGeneName(CyNetwork network, CyNode node) {
119121
if (network != null && node != null) {
120122
AssociatedApp app = getAssociatedApp(network);
121-
122-
if (app != null)
123-
return app.getGeneNameColumn().get(network.getRow(node));
123+
if (app != null) {
124+
var geneNameCol = app.getGeneNameColumn();
125+
if(geneNameCol != null) {
126+
return geneNameCol.get(network.getRow(node));
127+
}
128+
}
124129
}
125-
126130
return null;
127131
}
128132

@@ -136,17 +140,23 @@ public static String getQueryTerm(CyNetwork network, String gene) {
136140
AssociatedApp app = getAssociatedApp(network);
137141

138142
if (app != null) {
139-
String colName = app.getGeneNameColumn().getBaseName();
140-
CyTable table = network.getDefaultNodeTable();
141-
142-
Collection<CyRow> matchingRows = table.getMatchingRows(colName, gene);
143-
144-
if (matchingRows != null && !matchingRows.isEmpty()) {
145-
for (CyRow row : matchingRows) {
146-
queryTerm = app.getQueryTermColumn().get(row);
147-
148-
if (queryTerm != null)
149-
break;
143+
var geneNameCol = app.getGeneNameColumn();
144+
if(geneNameCol != null) {
145+
String colName = geneNameCol.getBaseName();
146+
CyTable table = network.getDefaultNodeTable();
147+
148+
Collection<CyRow> matchingRows = table.getMatchingRows(colName, gene);
149+
150+
if (matchingRows != null && !matchingRows.isEmpty()) {
151+
for (CyRow row : matchingRows) {
152+
var queryTermColumn = app.getQueryTermColumn();
153+
if(queryTermColumn != null) {
154+
queryTerm = queryTermColumn.get(row);
155+
if (queryTerm != null) {
156+
break;
157+
}
158+
}
159+
}
150160
}
151161
}
152162
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ public Component getListCellRendererComponent(JList<?> list, Object value, int i
223223
} else if (app == AssociatedApp.STRING) {
224224
setIcon(strIcon);
225225
setBorder(appBorder);
226+
} else if (app == AssociatedApp.AUTOANNOTATE) {
227+
setIcon(emIcon);
228+
setBorder(appBorder);
226229
} else {
227230
setIcon(emIcon);
228231
setBorder(null);

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/heatmap/HeatMapMediator.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,21 @@ private void updateHeatMap(CyNetworkView networkView) {
282282

283283
for (CyNode node : selectedNodes) {
284284
CyRow row = network.getRow(node);
285-
String geneName = app.getGeneNameColumn().get(row, null, null);
286285

287-
if (geneName != null)
288-
union.add(geneName);
286+
var geneNameCol = app.getGeneNameColumn();
287+
if(geneNameCol != null) {
288+
String geneName = geneNameCol.get(row, null, null);
289+
if (geneName != null)
290+
union.add(geneName);
291+
}
292+
293+
var geneNameListCol = app.getGeneNameListColumn();
294+
if(geneNameListCol != null) {
295+
String prefix = map.getParams().getAttributePrefix();
296+
List<String> geneNames = geneNameListCol.get(row, prefix, null);
297+
if (geneNames != null)
298+
union.addAll(geneNames);
299+
}
289300
}
290301

291302
inter = union;

0 commit comments

Comments
 (0)