Skip to content

Commit 8b9fd4b

Browse files
author
mpschr
committed
Edit and/or add annoatatoin values
1 parent 9445fdb commit 8b9fd4b

29 files changed

+475
-30
lines changed

org.gitools.heatmap/src/main/java/org/gitools/heatmap/header/HeatmapDecoratorHeader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,16 @@ public Function<String, String> getIdentifierTransform() {
191191

192192
@Override
193193
public String getAnnotationPattern() {
194+
StringBuilder sb = new StringBuilder();
195+
for (String annotation : getAnnotationLabels()) {
196+
sb.append(sb.length() > 0 ? "," : "");
197+
sb.append("${" + annotation + "}");
198+
}
199+
return sb.toString();
200+
}
201+
202+
@Override
203+
public String getSortAnnotationPattern() {
194204
return "${" + getSortLabel() + "}";
195205
}
196206

org.gitools.heatmap/src/main/java/org/gitools/heatmap/header/HeatmapHeader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,10 @@ public String getAnnotationPattern() {
268268
return annotationPattern;
269269
}
270270

271+
public String getSortAnnotationPattern() {
272+
return getAnnotationPattern();
273+
}
274+
271275
public void setAnnotationPattern(String annotationPattern) {
272276
this.annotationPattern = annotationPattern;
273277
}

org.gitools.matrix/src/main/java/org/gitools/matrix/sort/SortByLabelComparator.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,19 @@ public int compare(String idx1, String idx2) {
103103
}
104104

105105
if (asNumeric) {
106-
return direction.compare(Double.valueOf(v1), Double.valueOf(v2));
106+
Double d1;
107+
Double d2;
108+
try {
109+
d1 = Double.valueOf(v1);
110+
} catch (NumberFormatException e) {
111+
return 1;
112+
}
113+
try {
114+
d2 = Double.valueOf(v2);
115+
} catch (NumberFormatException e) {
116+
return -1;
117+
}
118+
return direction.compare(Double.valueOf(d1), Double.valueOf(d2));
107119
}
108120

109121
return direction.compare(v1, v2);

org.gitools.ui.app/src/main/java/org/gitools/ui/app/actions/data/SortByHeaderAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void run(IProgressMonitor monitor) {
6767
HeatmapDimension dimension = header.getHeatmapDimension();
6868
MatrixViewSorter.sortByLabel(dimension,
6969
header.isSortAscending() ? ASCENDING : DESCENDING,
70-
header.getAnnotationPattern(),
70+
header.getSortAnnotationPattern(),
7171
header instanceof HeatmapDecoratorHeader);
7272
header.setSortAscending(!header.isSortAscending());
7373

org.gitools.ui.app/src/main/java/org/gitools/ui/app/actions/edit/EditAnnotationValueAction.java

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import org.gitools.api.matrix.MatrixDimensionKey;
2525
import org.gitools.heatmap.Heatmap;
2626
import org.gitools.heatmap.header.HeatmapHeader;
27+
import org.gitools.heatmap.header.HierarchicalClusterHeatmapHeader;
2728
import org.gitools.matrix.model.matrix.AnnotationMatrix;
2829
import org.gitools.ui.app.actions.HeatmapDimensionAction;
30+
import org.gitools.ui.app.heatmap.panel.settings.headers.AddNewManualAnnotationSection;
2931
import org.gitools.ui.app.heatmap.panel.settings.headers.ChangeAnnotationValueSection;
3032
import org.gitools.ui.core.Application;
3133
import org.gitools.ui.core.HeatmapPosition;
@@ -47,9 +49,9 @@ public class EditAnnotationValueAction extends HeatmapDimensionAction implements
4749
private HeatmapHeader header;
4850
private HeatmapPosition position;
4951

50-
public EditAnnotationValueAction(MatrixDimensionKey dimensionKey, String name) {
51-
super(dimensionKey, name);
52-
setSmallIconFromResource(IconNames.edit16);
52+
public EditAnnotationValueAction(MatrixDimensionKey dimensionKey) {
53+
super(dimensionKey, "<html><i>Annotate</i> selected ...</html>");
54+
setSmallIconFromResource(IconNames.anno16);
5355
}
5456

5557
public EditAnnotationValueAction(HeatmapHeader header) {
@@ -77,24 +79,35 @@ public boolean isEnabledByModel(Object model) {
7779
return false;
7880
}
7981

82+
83+
8084
@Override
8185
public void actionPerformed(ActionEvent e) {
8286
execute(header, position);
8387
}
8488

8589
public static void execute(final HeatmapHeader header, final HeatmapPosition position) {
8690

87-
List<ISettingsSection> sections = new ArrayList<>();
91+
final List<ISettingsSection> sections = new ArrayList<>();
8892
final Set<String> selected = header.getHeatmapDimension().getSelected();
8993

90-
final ChangeAnnotationValueSection annotationValueSection = new ChangeAnnotationValueSection(header, new ArrayList<>(selected));
94+
if (editable(header)) {
95+
final ChangeAnnotationValueSection annotationValueSection = new ChangeAnnotationValueSection(header, new ArrayList<>(selected));
96+
sections.add(annotationValueSection);
97+
}
98+
99+
for (HeatmapHeader heatmapHeader : header.getHeatmapDimension().getHeaders()) {
100+
if (editable(heatmapHeader) && !header.getTitle().equals(heatmapHeader.getTitle())) {
101+
sections.add(new ChangeAnnotationValueSection(heatmapHeader, new ArrayList<String>(selected)));
102+
}
103+
}
91104

92-
sections.add(annotationValueSection);
105+
sections.add(new AddNewManualAnnotationSection(header.getHeatmapDimension().getAnnotations(), new ArrayList<String>(selected)));
93106

94107

95108
SettingsPanel settingsPanel = new SettingsPanel(
96-
header.getTitle() + " annotation values",
97-
header.getDescription(),
109+
"Edit & add annotation",
110+
"<html><body>Change the annotation of the selected " + header.getHeatmapDimension().getId().toString().toLowerCase() + " and/or add a new annotation.</body></html>",
98111
IconNames.logoNoText,
99112
sections
100113
);
@@ -108,10 +121,20 @@ protected void close() {
108121

109122
@Override
110123
protected void apply() {
111-
applyChanges(selected, annotationValueSection);
124+
for (ISettingsSection section : sections) {
125+
if (section.isDirty()) {
126+
if (section instanceof ChangeAnnotationValueSection) {
127+
applyChanges((ChangeAnnotationValueSection) section);
128+
} else if (section instanceof AddNewManualAnnotationSection) {
129+
addNewAnnotation((AddNewManualAnnotationSection) section);
130+
}
131+
}
132+
}
112133
header.getHeatmapDimension().updateHeaders();
113134
}
114135

136+
137+
115138
@Override
116139
public DialogButtonsPanel getButtonsPanel() {
117140
JButton closeButton = new JButton("Cancel");
@@ -122,7 +145,8 @@ public void actionPerformed(ActionEvent e) {
122145
}
123146
});
124147

125-
JButton applyButton = new JButton("OK");
148+
JButton applyButton = new JButton("Apply");
149+
126150
applyButton.addActionListener(new ActionListener() {
127151
@Override
128152
public void actionPerformed(ActionEvent e) {
@@ -140,25 +164,35 @@ public void actionPerformed(ActionEvent e) {
140164

141165
}
142166

143-
private static void applyChanges(Set<String> selected, ChangeAnnotationValueSection annotationValueSection) {
167+
private static boolean editable(HeatmapHeader header) {
168+
return !header.getTitle().toLowerCase().equals("id")
169+
&& !(header instanceof HierarchicalClusterHeatmapHeader);
170+
}
171+
172+
private static void applyChanges(ChangeAnnotationValueSection annotationValueSection) {
144173
Map<String, String> inputs = annotationValueSection.getInputMap();
145174
List<TextPattern.VariableToken> annotationKeys = annotationValueSection.getAnnotationKeys();
146175
AnnotationMatrix annotations = annotationValueSection.getAnnotations();
147-
for (String s : selected) {
176+
for (String s : annotationValueSection.getSelected()) {
148177
for (TextPattern.VariableToken annotationKey : annotationKeys) {
149178
annotations.setAnnotation(s, annotationKey.toString(), inputs.get(annotationKey.getVariableName()));
150179

151180
}
181+
}
182+
}
152183

184+
private static void addNewAnnotation(AddNewManualAnnotationSection section) {
185+
AnnotationMatrix annotations = section.getAnnotations();
186+
for (String s : section.getSelected()) {
187+
annotations.setAnnotation(s, section.getAnnotationLabel(), section.getAnnotationValue());
153188
}
154189
}
155190

156191
@Override
157192
public void onConfigure(HeatmapHeader object, HeatmapPosition position) {
158193
setHeader(object);
159194
setPosition(position);
160-
161-
setEnabled(!object.getTitle().toLowerCase().equals("id") & getDimension().getSelected().size() > 0);
195+
setEnabled(getDimension().getSelected().size() > 0);
162196

163197
}
164198

org.gitools.ui.app/src/main/java/org/gitools/ui/app/actions/help/GitoolsCommunicationSection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ public JPanel getPanel() {
6666
return panel;
6767
}
6868

69+
@Override
70+
public boolean isDirty() {
71+
return false;
72+
}
73+
6974
}

org.gitools.ui.app/src/main/java/org/gitools/ui/app/actions/help/GitoolsSatsSection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,9 @@ public String getName() {
5151
public JPanel getPanel() {
5252
return panel;
5353
}
54+
55+
@Override
56+
public boolean isDirty() {
57+
return false;
58+
}
5459
}

org.gitools.ui.app/src/main/java/org/gitools/ui/app/actions/help/GitoolsSettingsSection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,9 @@ public JPanel getPanel() {
6262
return panel;
6363
}
6464

65+
@Override
66+
public boolean isDirty() {
67+
return false;
68+
}
69+
6570
}

org.gitools.ui.app/src/main/java/org/gitools/ui/app/heatmap/panel/settings/DataManipulationSection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,9 @@ public String getName() {
9696
public JPanel getPanel() {
9797
return mainPanel;
9898
}
99+
100+
@Override
101+
public boolean isDirty() {
102+
return false;
103+
}
99104
}

org.gitools.ui.app/src/main/java/org/gitools/ui/app/heatmap/panel/settings/FormatSection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,9 @@ public JPanel getPanel() {
107107
return mainPanel;
108108
}
109109

110+
@Override
111+
public boolean isDirty() {
112+
return false;
113+
}
114+
110115
}

0 commit comments

Comments
 (0)