Skip to content

Commit ce68e4c

Browse files
committed
Command for setting dataset colors. Refs #455
1 parent f110482 commit ce68e4c

File tree

4 files changed

+133
-2
lines changed

4 files changed

+133
-2
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
@@ -2,6 +2,7 @@
22

33
import org.baderlab.csplugins.enrichmentmap.actions.OpenEnrichmentMapAction;
44
import org.baderlab.csplugins.enrichmentmap.commands.ChartCommandTask;
5+
import org.baderlab.csplugins.enrichmentmap.commands.DatasetColorCommandTask;
56
import org.baderlab.csplugins.enrichmentmap.commands.DatasetShowCommandTask;
67
import org.baderlab.csplugins.enrichmentmap.commands.EMBuildCommandTask;
78
import org.baderlab.csplugins.enrichmentmap.commands.EMGseaCommandTask;
@@ -90,6 +91,12 @@ public CommandTaskFactory provideDatasetHide(DatasetShowCommandTask.Factory task
9091
return CommandTaskFactory.create("dataset hide", desc, longDesc, () -> taskFactory.create(false));
9192
}
9293

94+
@ProvidesIntoSet
95+
public CommandTaskFactory provideDatasetColor(Provider<DatasetColorCommandTask> taskProvider) {
96+
String desc = "Allows to change the colors assigned to data sets.";
97+
return CommandTaskFactory.create("dataset color", desc, null, taskProvider);
98+
}
99+
93100
@ProvidesIntoSet
94101
public CommandTaskFactory provideChart(Provider<ChartCommandTask> taskFactory) {
95102
String desc = "Sets the chart options for an EnrichmentMap network.";

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.baderlab.csplugins.enrichmentmap.style.ChartType;
1111
import org.baderlab.csplugins.enrichmentmap.style.ColorScheme;
1212
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder.StyleUpdateScope;
13-
import org.baderlab.csplugins.enrichmentmap.task.ApplyEMStyleTask;
1413
import org.baderlab.csplugins.enrichmentmap.view.control.ControlPanelMediator;
1514
import org.baderlab.csplugins.enrichmentmap.view.control.io.ViewParams;
1615
import org.cytoscape.view.model.CyNetworkView;
@@ -23,7 +22,6 @@
2322
public class ChartCommandTask extends AbstractTask {
2423

2524
@Inject private ControlPanelMediator controlPanelMediator;
26-
@Inject private ApplyEMStyleTask.Factory applyStyleTaskFactory;
2725

2826
@ContainsTunables @Inject
2927
public NetworkTunable networkTunable;
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands;
2+
3+
import java.awt.Color;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
import org.baderlab.csplugins.enrichmentmap.commands.tunables.DatasetColorTunable;
8+
import org.baderlab.csplugins.enrichmentmap.commands.tunables.NetworkTunable;
9+
import org.baderlab.csplugins.enrichmentmap.model.EMDataSet;
10+
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
11+
import org.baderlab.csplugins.enrichmentmap.style.EMStyleBuilder.StyleUpdateScope;
12+
import org.baderlab.csplugins.enrichmentmap.style.EMStyleOptions;
13+
import org.baderlab.csplugins.enrichmentmap.view.control.ControlPanelMediator;
14+
import org.baderlab.csplugins.enrichmentmap.view.heatmap.HeatMapMediator;
15+
import org.cytoscape.view.model.CyNetworkView;
16+
import org.cytoscape.work.AbstractTask;
17+
import org.cytoscape.work.ContainsTunables;
18+
import org.cytoscape.work.TaskMonitor;
19+
20+
import com.google.inject.Inject;
21+
import com.google.inject.Provider;
22+
23+
public class DatasetColorCommandTask extends AbstractTask {
24+
25+
@Inject private Provider<HeatMapMediator> heatMapMediatorProvider;
26+
@Inject private ControlPanelMediator controlPanelMediator;
27+
28+
@ContainsTunables @Inject
29+
public NetworkTunable networkTunable;
30+
31+
@ContainsTunables @Inject
32+
public DatasetColorTunable datasetColorTunable;
33+
34+
@Override
35+
public void run(TaskMonitor tm) throws Exception {
36+
tm.setTitle("Change Data Set Colors");
37+
tm.setProgress(0.1);
38+
39+
CyNetworkView netView = networkTunable.getNetworkView();
40+
EnrichmentMap map = networkTunable.getEnrichmentMap();
41+
if(netView == null || map == null)
42+
throw new IllegalArgumentException("network is not an EnrichmentMap network");
43+
44+
Map<String,Color> colors = datasetColorTunable.getColors();
45+
if(colors.isEmpty())
46+
throw new IllegalArgumentException("no colors specified");
47+
48+
List<EMDataSet> datasetList = map.getDataSetList();
49+
50+
for(var entry : colors.entrySet()) {
51+
String dsName = entry.getKey();
52+
Color color = entry.getValue();
53+
54+
EMDataSet ds = map.getDataSet(dsName);
55+
if(ds != null) {
56+
ds.setColor(color);
57+
tm.setStatusMessage("Color changed for dataset: '" + dsName + "'");
58+
} else {
59+
try {
60+
int index = Integer.parseInt(dsName);
61+
ds = datasetList.get(index);
62+
ds.setColor(color);
63+
tm.setStatusMessage("Color changed for dataset: '" + dsName + "'");
64+
} catch(NumberFormatException | IndexOutOfBoundsException e) {
65+
tm.setStatusMessage("Dataset not found: '" + dsName + "'");
66+
}
67+
}
68+
};
69+
70+
// update panels
71+
controlPanelMediator.updateDataSetList(networkTunable.getNetworkView());
72+
heatMapMediatorProvider.get().reset();
73+
74+
// update visual style
75+
EMStyleOptions styleOptions = controlPanelMediator.createStyleOptions(netView);
76+
controlPanelMediator.applyVisualStyle(styleOptions, StyleUpdateScope.ONLY_DATASETS);
77+
heatMapMediatorProvider.get().reset();
78+
79+
tm.setProgress(1.0);
80+
}
81+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.baderlab.csplugins.enrichmentmap.commands.tunables;
2+
3+
import java.awt.Color;
4+
import java.util.Collections;
5+
import java.util.Map;
6+
import java.util.Map.Entry;
7+
import java.util.stream.Collectors;
8+
9+
import org.cytoscape.work.Tunable;
10+
11+
import com.google.common.base.Splitter;
12+
import com.google.common.base.Strings;
13+
14+
public class DatasetColorTunable {
15+
16+
@Tunable(description="Comma separated list of key=value pairs where the key is the "
17+
+ "name or index of a data set, and the value is an HTML hex color code. "
18+
+ "Example: \"DataSet1=#224433,DataSet2=#887766\"")
19+
public String colors = null;
20+
21+
22+
public Map<String,Color> getColors() {
23+
if(Strings.isNullOrEmpty(colors))
24+
return Collections.emptyMap();
25+
26+
return
27+
Splitter.on(',')
28+
.omitEmptyStrings()
29+
.withKeyValueSeparator(
30+
Splitter.on('=')
31+
.limit(2)
32+
.trimResults()
33+
)
34+
.split(colors)
35+
.entrySet()
36+
.stream()
37+
.collect(
38+
Collectors.toMap(
39+
Entry::getKey,
40+
v -> Color.decode(v.getValue())
41+
)
42+
);
43+
}
44+
45+
}

0 commit comments

Comments
 (0)