Skip to content

Commit e0e26ea

Browse files
committed
show/hide datasets command. refs #348
1 parent a51190b commit e0e26ea

File tree

9 files changed

+241
-76
lines changed

9 files changed

+241
-76
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Properties;
77

88
import org.baderlab.csplugins.enrichmentmap.actions.OpenPathwayCommonsTask;
9+
import org.baderlab.csplugins.enrichmentmap.commands.DatasetShowCommandTask;
910
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
1011
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapParameters;
1112
import org.baderlab.csplugins.enrichmentmap.task.ApplyEMStyleTask;
@@ -108,6 +109,7 @@ protected void configure() {
108109
installFactory(PAWeightPanel.Factory.class);
109110
installFactory(QueryGeneManiaTask.Factory.class);
110111
installFactory(QueryStringTask.Factory.class);
112+
installFactory(DatasetShowCommandTask.Factory.class);
111113
}
112114

113115
private void installFactory(Class<?> factoryInterface) {

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

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

3-
import static org.cytoscape.work.ServiceProperties.*;
3+
import static org.cytoscape.work.ServiceProperties.APPS_MENU;
4+
import static org.cytoscape.work.ServiceProperties.IN_MENU_BAR;
5+
import static org.cytoscape.work.ServiceProperties.PREFERRED_MENU;
6+
import static org.cytoscape.work.ServiceProperties.TITLE;
47

58
import java.util.Properties;
69

@@ -10,6 +13,8 @@
1013
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule;
1114
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.BuildCommand;
1215
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.BuildTableCommand;
16+
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.DatasetHide;
17+
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.DatasetShow;
1318
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.GSEACommand;
1419
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.JsonCommand;
1520
import org.baderlab.csplugins.enrichmentmap.commands.CommandModule.PACommand;
@@ -62,13 +67,7 @@ public void start(BundleContext bc) {
6267
registerAllServices(bc, sessionListener);
6368

6469
// commands
65-
registerCommand(bc, "build", injector.getInstance(Key.get(TaskFactory.class, BuildCommand.class)));
66-
registerCommand(bc, "gseabuild", injector.getInstance(Key.get(TaskFactory.class, GSEACommand.class)));
67-
registerCommand(bc, "mastermap", injector.getInstance(Key.get(TaskFactory.class, ResolveCommand.class)));
68-
registerCommand(bc, "pa", injector.getInstance(Key.get(TaskFactory.class, PACommand.class)));
69-
registerCommand(bc, "export-model", injector.getInstance(Key.get(TaskFactory.class, JsonCommand.class)));
70-
registerCommand(bc, "build-table", injector.getInstance(Key.get(TaskFactory.class, BuildTableCommand.class)));
71-
registerService(bc, new MannWhitRanksTunableHandlerFactory(), StringTunableHandlerFactory.class);
70+
initializeCommands(bc);
7271

7372
// jax-rs resources
7473
registerService(bc, injector.getInstance(EnrichmentMapResource.class), EnrichmentMapResource.class);
@@ -118,6 +117,19 @@ public void start(BundleContext bc) {
118117
}
119118

120119

120+
private void initializeCommands(BundleContext bc) {
121+
registerCommand(bc, "build", injector.getInstance(Key.get(TaskFactory.class, BuildCommand.class)));
122+
registerCommand(bc, "gseabuild", injector.getInstance(Key.get(TaskFactory.class, GSEACommand.class)));
123+
registerCommand(bc, "mastermap", injector.getInstance(Key.get(TaskFactory.class, ResolveCommand.class)));
124+
registerCommand(bc, "pa", injector.getInstance(Key.get(TaskFactory.class, PACommand.class)));
125+
registerCommand(bc, "export-model", injector.getInstance(Key.get(TaskFactory.class, JsonCommand.class)));
126+
registerCommand(bc, "build-table", injector.getInstance(Key.get(TaskFactory.class, BuildTableCommand.class)));
127+
registerCommand(bc, "dataset show", injector.getInstance(Key.get(TaskFactory.class, DatasetShow.class)));
128+
registerCommand(bc, "dataset hide", injector.getInstance(Key.get(TaskFactory.class, DatasetHide.class)));
129+
registerService(bc, new MannWhitRanksTunableHandlerFactory(), StringTunableHandlerFactory.class);
130+
}
131+
132+
121133
private void registerCommand(BundleContext bc, String command, TaskFactory taskFactory) {
122134
Properties props = new Properties();
123135
props.put(ServiceProperties.COMMAND, command);

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,48 +23,58 @@ public class CommandModule extends AbstractModule {
2323
@BindingAnnotation @Retention(RUNTIME) public @interface PACommand { }
2424
@BindingAnnotation @Retention(RUNTIME) public @interface JsonCommand { }
2525
@BindingAnnotation @Retention(RUNTIME) public @interface BuildTableCommand { }
26-
26+
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetShow { }
27+
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetHide { }
2728

2829
@Override
2930
protected void configure() {
3031
}
3132

3233
@Provides @BuildCommand
3334
public TaskFactory provideBuild(Provider<EMBuildCommandTask> taskProvider, OpenEnrichmentMapAction showTask) {
34-
return createTaskFactory(taskProvider, showTask);
35+
return createTaskFactory(taskProvider.get(), showTask);
3536
}
3637

3738
@Provides @GSEACommand
3839
public TaskFactory provideGSEA(Provider<EMGseaCommandTask> taskProvider, OpenEnrichmentMapAction showTask) {
39-
return createTaskFactory(taskProvider, showTask);
40+
return createTaskFactory(taskProvider.get(), showTask);
4041
}
4142

4243
@Provides @ResolveCommand
4344
public TaskFactory provideResolve(Provider<ResolverCommandTask> taskProvider, OpenEnrichmentMapAction showTask) {
44-
return createTaskFactory(taskProvider, showTask);
45+
return createTaskFactory(taskProvider.get(), showTask);
4546
}
4647

4748
@Provides @PACommand
4849
public TaskFactory providePA(Provider<PAKnownSignatureCommandTask> taskProvider) {
49-
return createTaskFactory(taskProvider, null);
50+
return createTaskFactory(taskProvider.get(), null);
5051
}
5152

5253
@Provides @JsonCommand
5354
public TaskFactory provideJson(Provider<ExportModelJsonCommandTask> taskProvider) {
54-
return createTaskFactory(taskProvider, null);
55+
return createTaskFactory(taskProvider.get(), null);
5556
}
5657

5758
@Provides @BuildTableCommand
5859
public TaskFactory provideBuildTable(Provider<TableCommandTask> taskProvider, OpenEnrichmentMapAction showTask) {
59-
return createTaskFactory(taskProvider, showTask);
60+
return createTaskFactory(taskProvider.get(), showTask);
61+
}
62+
63+
@Provides @DatasetShow
64+
public TaskFactory provideDatasetShow(DatasetShowCommandTask.Factory taskFactory) {
65+
return createTaskFactory(taskFactory.create(true), null);
66+
}
67+
68+
@Provides @DatasetHide
69+
public TaskFactory provideDatasetHide(DatasetShowCommandTask.Factory taskFactory) {
70+
return createTaskFactory(taskFactory.create(false), null);
6071
}
61-
6272

63-
private static TaskFactory createTaskFactory(Provider<? extends Task> taskProvider, OpenEnrichmentMapAction showTask) {
73+
private static TaskFactory createTaskFactory(Task task, OpenEnrichmentMapAction showTask) {
6474
return new AbstractTaskFactory() {
6575
@Override
6676
public TaskIterator createTaskIterator() {
67-
TaskIterator tasks = new TaskIterator(taskProvider.get());
77+
TaskIterator tasks = new TaskIterator(task);
6878
if(showTask != null)
6979
tasks.append(showTask);
7080
return tasks;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import java.util.Collection;
4+
import java.util.Collections;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Set;
8+
import java.util.stream.Collectors;
9+
10+
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet;
11+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
12+
import org.cytoscape.work.Tunable;
13+
14+
public class DatasetListTunable {
15+
16+
@Tunable(description="Comma separated list of dataset names or indexes, or 'ALL' to indicate all datasets.",
17+
longDescription="Comma separated list of dataset names or indexes, for example 'dataset1,dataset2,3'. " +
18+
"The list may also contain positive integers that indicate the index of the dataset in the enrichment map. " +
19+
"Alternately use 'ALL' to indicate all data sets.")
20+
public String datasets = "ALL";
21+
22+
23+
public Collection<EMDataSet> getDataSets(EnrichmentMap map) {
24+
if(datasets == null) {
25+
return Collections.emptyList();
26+
}
27+
if(datasets.trim().equalsIgnoreCase("ALL")) {
28+
return map.getDataSetList();
29+
}
30+
31+
Set<EMDataSet> result = new HashSet<>();
32+
List<EMDataSet> datasetList = map.getDataSetList();
33+
34+
String[] names = datasets.split(",");
35+
for(String name : names) {
36+
int index = getIndex(name);
37+
if(index >= 0 && index < datasetList.size()) {
38+
result.add(datasetList.get(index));
39+
} else {
40+
EMDataSet ds = map.getDataSet(name);
41+
if(ds != null) {
42+
result.add(ds);
43+
}
44+
}
45+
}
46+
47+
return result;
48+
}
49+
50+
public Set<String> getDataSetNames(EnrichmentMap map) {
51+
return getDataSets(map).stream().map(EMDataSet::getName).collect(Collectors.toSet());
52+
}
53+
54+
55+
private static int getIndex(String s) {
56+
try {
57+
return Integer.parseInt(s);
58+
} catch(NumberFormatException e) {
59+
return -1;
60+
}
61+
}
62+
63+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import java.util.HashSet;
4+
import java.util.Map;
5+
import java.util.Set;
6+
7+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
8+
import org.baderlab.csplugins.enrichmentmap.view.control.ControlPanelMediator;
9+
import org.baderlab.csplugins.enrichmentmap.view.control.io.ViewParams;
10+
import org.cytoscape.view.model.CyNetworkView;
11+
import org.cytoscape.work.AbstractTask;
12+
import org.cytoscape.work.ContainsTunables;
13+
import org.cytoscape.work.TaskMonitor;
14+
15+
import com.google.inject.Inject;
16+
import com.google.inject.assistedinject.Assisted;
17+
18+
public class DatasetShowCommandTask extends AbstractTask {
19+
20+
@Inject private ControlPanelMediator controlPanelMediator;
21+
22+
private final boolean show;
23+
24+
@ContainsTunables @Inject
25+
public NetworkTunable networkTunable;
26+
27+
@ContainsTunables @Inject
28+
public DatasetListTunable datasetListTunable;
29+
30+
31+
public static interface Factory {
32+
DatasetShowCommandTask create(boolean show);
33+
}
34+
35+
@Inject
36+
public DatasetShowCommandTask(@Assisted boolean show) {
37+
this.show = show;
38+
}
39+
40+
@Override
41+
public void run(TaskMonitor taskMonitor) throws Exception {
42+
CyNetworkView networkView = networkTunable.getNetworkView();
43+
EnrichmentMap map = networkTunable.getEnrichmentMap();
44+
if(networkView == null || map == null)
45+
throw new IllegalArgumentException("network is not an EnrichmentMap network");
46+
47+
Set<String> dataSetNames = datasetListTunable.getDataSetNames(map);
48+
if(dataSetNames.isEmpty())
49+
throw new IllegalArgumentException("no valid data sets");
50+
51+
Map<Long,ViewParams> viewParamsMap = controlPanelMediator.getAllViewParams();
52+
ViewParams params = viewParamsMap.get(networkView.getSUID());
53+
54+
Set<String> filteredOutNames = new HashSet<>(params.getFilteredOutDataSets());
55+
if(show) {
56+
filteredOutNames.removeAll(dataSetNames);
57+
} else {
58+
filteredOutNames.addAll(dataSetNames);
59+
}
60+
61+
params.setFilteredOutDataSets(filteredOutNames);
62+
controlPanelMediator.reset(params);
63+
}
64+
65+
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/commands/ExportModelJsonCommandTask.java

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
import java.io.FileWriter;
55

66
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
7-
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
87
import org.baderlab.csplugins.enrichmentmap.model.io.ModelSerializer;
9-
import org.cytoscape.application.CyApplicationManager;
10-
import org.cytoscape.model.CyNetwork;
118
import org.cytoscape.work.AbstractTask;
9+
import org.cytoscape.work.ContainsTunables;
1210
import org.cytoscape.work.TaskMonitor;
1311
import org.cytoscape.work.Tunable;
1412

@@ -19,24 +17,17 @@ public class ExportModelJsonCommandTask extends AbstractTask {
1917
@Tunable(required=true, description="File used as destination for model JSON. Will be overwritten if it already exists.")
2018
public File file;
2119

22-
@Tunable
23-
public CyNetwork network;
20+
@Inject @ContainsTunables
21+
public NetworkTunable networkTunable;
2422

2523

26-
@Inject private CyApplicationManager applicationManager;
27-
@Inject private EnrichmentMapManager emManager;
28-
2924
@Override
3025
public void run(TaskMonitor taskMonitor) throws Exception {
3126
file.createNewFile();
3227
if(!file.canWrite())
3328
throw new IllegalArgumentException("Cannot write to file");
3429

35-
CyNetwork selectedNetwork = getSelectedNetwork();
36-
if(selectedNetwork == null)
37-
throw new IllegalArgumentException("Invalid network");
38-
39-
EnrichmentMap map = emManager.getEnrichmentMap(selectedNetwork.getSUID());
30+
EnrichmentMap map = networkTunable.getEnrichmentMap();
4031
if(map == null)
4132
throw new IllegalArgumentException("Network is not an Enrichment Map.");
4233

@@ -48,9 +39,4 @@ public void run(TaskMonitor taskMonitor) throws Exception {
4839
}
4940

5041

51-
private CyNetwork getSelectedNetwork() {
52-
return network == null
53-
? applicationManager.getCurrentNetwork()
54-
: network;
55-
}
5642
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import java.util.Collection;
4+
5+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
6+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
7+
import org.cytoscape.application.CyApplicationManager;
8+
import org.cytoscape.model.CyNetwork;
9+
import org.cytoscape.view.model.CyNetworkView;
10+
import org.cytoscape.view.model.CyNetworkViewManager;
11+
import org.cytoscape.work.Tunable;
12+
13+
import com.google.inject.Inject;
14+
15+
public class NetworkTunable {
16+
17+
@Inject private CyApplicationManager applicationManager;
18+
@Inject private CyNetworkViewManager networkViewManager;
19+
@Inject private EnrichmentMapManager emManager;
20+
21+
@Tunable
22+
public CyNetwork network;
23+
24+
25+
public CyNetwork getNetwork() {
26+
if(network == null)
27+
return applicationManager.getCurrentNetwork();
28+
return null;
29+
}
30+
31+
public CyNetworkView getNetworkView() {
32+
CyNetwork network = getNetwork();
33+
if(network == null) {
34+
return null;
35+
}
36+
37+
Collection<CyNetworkView> networkViews = networkViewManager.getNetworkViews(network);
38+
if(networkViews == null || networkViews.isEmpty())
39+
return null;
40+
return networkViews.iterator().next();
41+
}
42+
43+
public EnrichmentMap getEnrichmentMap() {
44+
CyNetwork network = getNetwork();
45+
if(network == null)
46+
return null;
47+
return emManager.getEnrichmentMap(getNetwork().getSUID());
48+
}
49+
50+
51+
52+
}

0 commit comments

Comments
 (0)