Skip to content

Commit ad3ed03

Browse files
committed
Start of CyREST command for creating EM network.
Refs #385
1 parent b5f1d36 commit ad3ed03

File tree

5 files changed

+183
-2
lines changed

5 files changed

+183
-2
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.baderlab.csplugins.enrichmentmap.commands.tunables.MannWhitRanksTunableHandlerFactory;
1515
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
1616
import org.baderlab.csplugins.enrichmentmap.model.io.SessionListener;
17+
import org.baderlab.csplugins.enrichmentmap.rest.BuildResource;
1718
import org.baderlab.csplugins.enrichmentmap.rest.ExpressionsResource;
1819
import org.baderlab.csplugins.enrichmentmap.rest.ModelResource;
1920
import org.baderlab.csplugins.enrichmentmap.style.ChartFactoryManager;
@@ -72,9 +73,10 @@ public void start(BundleContext bc) {
7273
// commands
7374
initializeCommands(bc);
7475

75-
// jax-rs resources
76+
// jax-rs (CyREST) resources
7677
registerService(bc, injector.getInstance(ExpressionsResource.class), ExpressionsResource.class);
7778
registerService(bc, injector.getInstance(ModelResource.class), ModelResource.class);
79+
registerService(bc, injector.getInstance(BuildResource.class), BuildResource.class);
7880

7981
// CyProperty
8082
CyProperty<Properties> cyProperty = injector.getInstance(Key.get(new TypeLiteral<CyProperty<Properties>>(){}));

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/tunables/FilterTunables.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public class FilterTunables {
7171
public String attributePrefix = null;
7272

7373

74-
@Inject private LegacySupport legacySupport;
74+
private LegacySupport legacySupport;
7575

7676

7777
public FilterTunables() {
@@ -83,6 +83,11 @@ public FilterTunables() {
8383
nesFilter = enumNames(NESFilter.values());
8484
nesFilter.setSelectedValue(NESFilter.ALL.name());
8585
}
86+
87+
@Inject
88+
public void setLegacySupport(LegacySupport legacySupport) {
89+
this.legacySupport = legacySupport;
90+
}
8691

8792

8893
public EMCreationParameters getCreationParameters() throws IllegalArgumentException {
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package org.baderlab.csplugins.enrichmentmap.rest;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.io.InputStreamReader;
6+
import java.io.Reader;
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
import javax.ws.rs.Consumes;
11+
import javax.ws.rs.POST;
12+
import javax.ws.rs.Path;
13+
import javax.ws.rs.core.MediaType;
14+
import javax.ws.rs.core.Response;
15+
16+
import org.baderlab.csplugins.enrichmentmap.commands.tunables.FilterTunables;
17+
import org.baderlab.csplugins.enrichmentmap.model.DataSetParameters;
18+
import org.baderlab.csplugins.enrichmentmap.model.EMCreationParameters;
19+
import org.baderlab.csplugins.enrichmentmap.model.LegacySupport;
20+
import org.baderlab.csplugins.enrichmentmap.model.TableParameters;
21+
import org.baderlab.csplugins.enrichmentmap.task.CreateEnrichmentMapTaskFactory;
22+
import org.cytoscape.model.CyRow;
23+
import org.cytoscape.model.CyTable;
24+
import org.cytoscape.model.CyTableFactory;
25+
import org.cytoscape.work.SynchronousTaskManager;
26+
import org.cytoscape.work.TaskIterator;
27+
28+
import com.google.gson.Gson;
29+
import com.google.gson.GsonBuilder;
30+
import com.google.inject.Inject;
31+
import com.google.inject.Provider;
32+
33+
import io.swagger.annotations.Api;
34+
import io.swagger.annotations.ApiOperation;
35+
import io.swagger.annotations.ApiParam;
36+
37+
@Api(tags="Apps: EnrichmentMap")
38+
@Path("/enrichmentmap/build")
39+
public class BuildResource {
40+
41+
private static final String
42+
NAME = "name",
43+
GENES = "genes",
44+
PVALUE = "pvalue",
45+
QVALUE = "qvalue",
46+
NES = "nes",
47+
DESC = "description";
48+
49+
50+
@Inject private SynchronousTaskManager<?> taskManager;
51+
@Inject private CreateEnrichmentMapTaskFactory.Factory taskFactoryFactory;
52+
@Inject private CyTableFactory tableFactory;
53+
@Inject private Provider<LegacySupport> legacySupport;
54+
55+
56+
@POST
57+
@Path("/")
58+
@Consumes(MediaType.APPLICATION_JSON)
59+
@ApiOperation(value="Create an EnrichmentMap network.",
60+
notes=""
61+
)
62+
public Response createEnrichmentMap(
63+
@ApiParam(value="Body JSON data.") InputStream is
64+
) {
65+
EMJsonData emJson;
66+
try(Reader reader = new InputStreamReader(is)) {
67+
Gson gson = new GsonBuilder().create();
68+
emJson = gson.fromJson(reader, EMJsonData.class);
69+
} catch(IOException e) {
70+
throw new RuntimeException(e);
71+
}
72+
73+
CyTable enrichmentTable = createEnrichmentTable();
74+
fillEnrichmentTable(enrichmentTable, emJson.enrichments);
75+
76+
TableParameters tableParams = new TableParameters(enrichmentTable, NAME, GENES, PVALUE, QVALUE, NES, DESC, null);
77+
78+
DataSetParameters dsParams = new DataSetParameters("DataSet1", tableParams, null);
79+
List<DataSetParameters> dataSets = Collections.singletonList(dsParams);
80+
81+
FilterTunables filter = emJson.filter;
82+
filter.setLegacySupport(legacySupport.get());
83+
84+
EMCreationParameters creationParams = filter.getCreationParameters();
85+
CreateEnrichmentMapTaskFactory taskFactory = taskFactoryFactory.create(creationParams, dataSets);
86+
TaskIterator tasks = taskFactory.createTaskIterator();
87+
taskManager.execute(tasks);
88+
89+
return Response.ok().build();
90+
}
91+
92+
93+
private CyTable createEnrichmentTable() {
94+
CyTable enrichmentTable = tableFactory.createTable("tempEnrichmentEM", "pk", Long.class, false, false);
95+
enrichmentTable.createColumn(NAME, String.class, false);
96+
enrichmentTable.createListColumn(GENES, String.class, false);
97+
enrichmentTable.createColumn(PVALUE, Double.class, false);
98+
enrichmentTable.createColumn(QVALUE, Double.class, false);
99+
enrichmentTable.createColumn(NES, Double.class, false);
100+
enrichmentTable.createColumn(DESC, String.class, false);
101+
return enrichmentTable;
102+
}
103+
104+
private void fillEnrichmentTable(CyTable table, List<EnrichmentEntry> enrichments) {
105+
long i = 0;
106+
for(EnrichmentEntry enrichment : enrichments) {
107+
CyRow row = table.getRow(i++);
108+
row.set(NAME, enrichment.name);
109+
row.set(GENES, enrichment.genes);
110+
row.set(PVALUE, enrichment.pvalue);
111+
row.set(QVALUE, enrichment.qvalue);
112+
row.set(NES, enrichment.nes);
113+
row.set(DESC, enrichment.description);
114+
}
115+
}
116+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.baderlab.csplugins.enrichmentmap.rest;
2+
3+
import java.util.List;
4+
5+
import org.baderlab.csplugins.enrichmentmap.commands.tunables.FilterTunables;
6+
7+
public class EMJsonData {
8+
9+
public FilterTunables filter;
10+
public List<EnrichmentEntry> enrichments;
11+
12+
13+
@Override
14+
public String toString() {
15+
StringBuilder builder = new StringBuilder();
16+
builder.append("EMJsonData [filter=");
17+
builder.append(filter);
18+
builder.append(", enrichments=");
19+
builder.append(enrichments);
20+
builder.append("]");
21+
return builder.toString();
22+
}
23+
24+
25+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.baderlab.csplugins.enrichmentmap.rest;
2+
3+
import java.util.List;
4+
5+
public class EnrichmentEntry {
6+
7+
public String name;
8+
public List<String> genes;
9+
public Double pvalue;
10+
public Double qvalue;
11+
public Double nes;
12+
public String description;
13+
14+
15+
@Override
16+
public String toString() {
17+
StringBuilder builder = new StringBuilder();
18+
builder.append("EnrichmentEntry [name=");
19+
builder.append(name);
20+
builder.append(", genes=");
21+
builder.append(genes);
22+
builder.append(", pvalue=");
23+
builder.append(pvalue);
24+
builder.append(", qvalue=");
25+
builder.append(qvalue);
26+
builder.append(", nes=");
27+
builder.append(nes);
28+
builder.append(", description=");
29+
builder.append(description);
30+
builder.append("]");
31+
return builder.toString();
32+
}
33+
}

0 commit comments

Comments
 (0)