Skip to content

Commit 964cd10

Browse files
committed
Start of chart command. Refs #348
1 parent c4ff846 commit 964cd10

File tree

4 files changed

+134
-19
lines changed

4 files changed

+134
-19
lines changed

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import java.lang.annotation.Retention;
66

77
import org.baderlab.csplugins.enrichmentmap.actions.OpenEnrichmentMapAction;
8+
import org.baderlab.csplugins.enrichmentmap.commands.ChartCommandTask;
89
import org.baderlab.csplugins.enrichmentmap.commands.DatasetShowCommandTask;
910
import org.baderlab.csplugins.enrichmentmap.commands.EMBuildCommandTask;
1011
import org.baderlab.csplugins.enrichmentmap.commands.EMGseaCommandTask;
1112
import org.baderlab.csplugins.enrichmentmap.commands.ExportModelJsonCommandTask;
1213
import org.baderlab.csplugins.enrichmentmap.commands.PAKnownSignatureCommandTask;
1314
import org.baderlab.csplugins.enrichmentmap.commands.ResolverCommandTask;
1415
import org.baderlab.csplugins.enrichmentmap.commands.TableCommandTask;
15-
import org.baderlab.csplugins.enrichmentmap.commands.DatasetShowCommandTask.Factory;
1616
import org.cytoscape.work.AbstractTaskFactory;
1717
import org.cytoscape.work.Task;
1818
import org.cytoscape.work.TaskFactory;
@@ -31,8 +31,9 @@ public class CommandModule extends AbstractModule {
3131
@BindingAnnotation @Retention(RUNTIME) public @interface PACommand { }
3232
@BindingAnnotation @Retention(RUNTIME) public @interface JsonCommand { }
3333
@BindingAnnotation @Retention(RUNTIME) public @interface BuildTableCommand { }
34-
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetShow { }
35-
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetHide { }
34+
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetShowCommand { }
35+
@BindingAnnotation @Retention(RUNTIME) public @interface DatasetHideCommand { }
36+
@BindingAnnotation @Retention(RUNTIME) public @interface ChartCommand { }
3637

3738
@Override
3839
protected void configure() {
@@ -55,37 +56,45 @@ public TaskFactory provideResolve(Provider<ResolverCommandTask> taskProvider, Op
5556

5657
@Provides @PACommand
5758
public TaskFactory providePA(Provider<PAKnownSignatureCommandTask> taskProvider) {
58-
return createTaskFactory(taskProvider.get(), null);
59+
return createTaskFactory(taskProvider.get());
5960
}
6061

6162
@Provides @JsonCommand
6263
public TaskFactory provideJson(Provider<ExportModelJsonCommandTask> taskProvider) {
63-
return createTaskFactory(taskProvider.get(), null);
64+
return createTaskFactory(taskProvider.get());
6465
}
6566

6667
@Provides @BuildTableCommand
6768
public TaskFactory provideBuildTable(Provider<TableCommandTask> taskProvider, OpenEnrichmentMapAction showTask) {
6869
return createTaskFactory(taskProvider.get(), showTask);
6970
}
7071

71-
@Provides @DatasetShow
72+
@Provides @DatasetShowCommand
7273
public TaskFactory provideDatasetShow(DatasetShowCommandTask.Factory taskFactory) {
73-
return createTaskFactory(taskFactory.create(true), null);
74+
return createTaskFactory(taskFactory.create(true));
7475
}
7576

76-
@Provides @DatasetHide
77+
@Provides @DatasetHideCommand
7778
public TaskFactory provideDatasetHide(DatasetShowCommandTask.Factory taskFactory) {
78-
return createTaskFactory(taskFactory.create(false), null);
79+
return createTaskFactory(taskFactory.create(false));
7980
}
8081

81-
private static TaskFactory createTaskFactory(Task task, OpenEnrichmentMapAction showTask) {
82+
@Provides @ChartCommand
83+
public TaskFactory provideChart(Provider<ChartCommandTask> taskFactory) {
84+
return createTaskFactory(taskFactory.get());
85+
}
86+
87+
88+
89+
private static TaskFactory createTaskFactory(Task ... tasks) {
8290
return new AbstractTaskFactory() {
8391
@Override
8492
public TaskIterator createTaskIterator() {
85-
TaskIterator tasks = new TaskIterator(task);
86-
if(showTask != null)
87-
tasks.append(showTask);
88-
return tasks;
93+
TaskIterator taskIterator = new TaskIterator();
94+
for(Task task : tasks) {
95+
taskIterator.append(task);
96+
}
97+
return taskIterator;
8998
}
9099
};
91100
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
import org.baderlab.csplugins.enrichmentmap.ApplicationModule.Headless;
1111
import org.baderlab.csplugins.enrichmentmap.CommandModule.BuildCommand;
1212
import org.baderlab.csplugins.enrichmentmap.CommandModule.BuildTableCommand;
13-
import org.baderlab.csplugins.enrichmentmap.CommandModule.DatasetHide;
14-
import org.baderlab.csplugins.enrichmentmap.CommandModule.DatasetShow;
13+
import org.baderlab.csplugins.enrichmentmap.CommandModule.ChartCommand;
14+
import org.baderlab.csplugins.enrichmentmap.CommandModule.DatasetHideCommand;
15+
import org.baderlab.csplugins.enrichmentmap.CommandModule.DatasetShowCommand;
1516
import org.baderlab.csplugins.enrichmentmap.CommandModule.GSEACommand;
1617
import org.baderlab.csplugins.enrichmentmap.CommandModule.JsonCommand;
1718
import org.baderlab.csplugins.enrichmentmap.CommandModule.PACommand;
@@ -123,8 +124,9 @@ private void initializeCommands(BundleContext bc) {
123124
registerCommand(bc, "pa", injector.getInstance(Key.get(TaskFactory.class, PACommand.class)));
124125
registerCommand(bc, "export-model", injector.getInstance(Key.get(TaskFactory.class, JsonCommand.class)));
125126
registerCommand(bc, "build-table", injector.getInstance(Key.get(TaskFactory.class, BuildTableCommand.class)));
126-
registerCommand(bc, "dataset show", injector.getInstance(Key.get(TaskFactory.class, DatasetShow.class)));
127-
registerCommand(bc, "dataset hide", injector.getInstance(Key.get(TaskFactory.class, DatasetHide.class)));
127+
registerCommand(bc, "dataset show", injector.getInstance(Key.get(TaskFactory.class, DatasetShowCommand.class)));
128+
registerCommand(bc, "dataset hide", injector.getInstance(Key.get(TaskFactory.class, DatasetHideCommand.class)));
129+
registerCommand(bc, "chart", injector.getInstance(Key.get(TaskFactory.class, ChartCommand.class)));
128130
registerService(bc, new MannWhitRanksTunableHandlerFactory(), StringTunableHandlerFactory.class);
129131
}
130132

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.function.Predicate;
7+
8+
import org.baderlab.csplugins.enrichmentmap.commands.tunables.NetworkTunable;
9+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
10+
import org.baderlab.csplugins.enrichmentmap.style.ChartData;
11+
import org.baderlab.csplugins.enrichmentmap.style.ChartOptions;
12+
import org.baderlab.csplugins.enrichmentmap.style.ChartType;
13+
import org.baderlab.csplugins.enrichmentmap.style.ColorScheme;
14+
import org.baderlab.csplugins.enrichmentmap.view.control.ControlPanelMediator;
15+
import org.baderlab.csplugins.enrichmentmap.view.control.io.ViewParams;
16+
import org.cytoscape.view.model.CyNetworkView;
17+
import org.cytoscape.work.AbstractTask;
18+
import org.cytoscape.work.ContainsTunables;
19+
import org.cytoscape.work.TaskMonitor;
20+
import org.cytoscape.work.Tunable;
21+
import org.cytoscape.work.util.ListSingleSelection;
22+
23+
import com.google.inject.Inject;
24+
25+
public class ChartCommandTask extends AbstractTask {
26+
27+
@Inject private ControlPanelMediator controlPanelMediator;
28+
29+
30+
@ContainsTunables @Inject
31+
public NetworkTunable networkTunable;
32+
33+
@Tunable
34+
public ListSingleSelection<String> data;
35+
36+
@Tunable
37+
public ListSingleSelection<String> type;
38+
39+
@Tunable
40+
public ListSingleSelection<String> colors;
41+
42+
@Tunable
43+
public boolean showLabels;
44+
45+
46+
public ChartCommandTask() {
47+
data = lssFromEnum(ChartData.values(), x -> true);
48+
type = lssFromEnum(ChartType.values(), ct -> ct != ChartType.DATASET_PIE);
49+
colors = lssFromEnum(ColorScheme.values(), x -> true);
50+
}
51+
52+
@Override
53+
public void run(TaskMonitor taskMonitor) {
54+
// validate network
55+
CyNetworkView networkView = networkTunable.getNetworkView();
56+
EnrichmentMap map = networkTunable.getEnrichmentMap();
57+
if(networkView == null || map == null)
58+
throw new IllegalArgumentException("network is not an EnrichmentMap network");
59+
60+
Map<Long,ViewParams> viewParamsMap = controlPanelMediator.getAllViewParams();
61+
ViewParams params = viewParamsMap.get(networkView.getSUID());
62+
ChartOptions chartOptions = params.getChartOptions();
63+
64+
ChartData chartData = "null".equals(data.getSelectedValue()) ? chartOptions.getData() : ChartData.valueOf(data.getSelectedValue());
65+
ChartType chartType = "null".equals(type.getSelectedValue()) ? chartOptions.getType() : ChartType.valueOf(type.getSelectedValue());
66+
ColorScheme colorScheme = "null".equals(colors.getSelectedValue()) ? chartOptions.getColorScheme() : ColorScheme.valueOf(colors.getSelectedValue());
67+
68+
// validate
69+
if(chartData == ChartData.EXPRESSION_DATA && !networkTunable.isAssociatedEnrichmenMap())
70+
throw new IllegalArgumentException("data=EXPRESSION_DATA can only be used with a GeneMANIA or STRING network created from an EnrichmentMap network");
71+
if(chartData == ChartData.EXPRESSION_DATA && !(chartType == ChartType.RADIAL_HEAT_MAP || chartType == ChartType.HEAT_STRIPS))
72+
throw new IllegalArgumentException("data=EXPRESSION_DATA can only be used with chartType=RADIAL_HEAT_MAP or chartType=HEAT_STRIPS");
73+
if(chartData == ChartData.PHENOTYPES && !map.isTwoPhenotypeGeneric())
74+
throw new IllegalArgumentException("data=PHENOTYPES can only be used with two-phenotype generic networks.");
75+
if(chartData == ChartData.FDR_VALUE && !map.getParams().isFDR())
76+
throw new IllegalArgumentException("data=FDR_VALUE cannot be used on this network");
77+
78+
if(chartData == ChartData.DATA_SET)
79+
chartType = ChartType.DATASET_PIE;
80+
81+
ChartOptions options = new ChartOptions(chartData, chartType, colorScheme, showLabels);
82+
params.setChartOptions(options);
83+
controlPanelMediator.reset(params);
84+
}
85+
86+
87+
private static ListSingleSelection<String> lssFromEnum(Enum<?>[] values, Predicate<Enum<?>> valueTester) {
88+
List<String> names = new ArrayList<>(values.length);
89+
names.add("null"); // important, need to know if the user did not set the value
90+
for(Enum<?> value : values) {
91+
if(valueTester.test(value)) {
92+
names.add(value.name());
93+
}
94+
}
95+
return new ListSingleSelection<>(names);
96+
}
97+
98+
99+
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public EnrichmentMap getEnrichmentMap() {
4747
return emManager.getEnrichmentMap(getNetwork().getSUID());
4848
}
4949

50-
50+
public boolean isAssociatedEnrichmenMap() {
51+
CyNetwork network = getNetwork();
52+
if(network == null)
53+
return false;
54+
return emManager.isAssociatedEnrichmentMap(network.getSUID());
55+
}
5156

5257
}

0 commit comments

Comments
 (0)