annotate artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java @ 7597:fca46ce8e4f5

(issue1225) Implement Magic labels. There is now a new value in the chartsettings "Suggested Label" which is hidden in the property editor. A suggested label is the label that combines the label's of all processors that wrote data to an axis. This suggested label is set as the label when the user has not overwritten the label.
author Andre Heinecke <aheinecke@intevation.de>
date Mon, 25 Nov 2013 14:58:14 +0100
parents 32db4f89b65f
children f87f435df856 0a5239a1e46e
rev   line source
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 *
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
7 */
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
8
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.exports;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
10
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
11 import java.util.ArrayList;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
12 import java.util.List;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
13
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
14 import org.w3c.dom.Element;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
15 import org.w3c.dom.NodeList;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
16
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
17 import org.dive4elements.river.exports.process.Processor;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
18
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
19 import org.apache.log4j.Logger;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
20
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
21 import org.dive4elements.artifacts.CallContext;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
22
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
23 import org.dive4elements.river.artifacts.resources.Resources;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
24 import org.dive4elements.river.artifacts.D4EArtifact;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
25
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
26 import org.dive4elements.artifacts.common.utils.ElementConverter;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
27
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
28 public class DiagramAttributes
7227
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
29 implements ElementConverter, D4EArtifact.FacetFilter
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
30 {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
31 private static Logger log = Logger.getLogger(DiagramAttributes.class);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
32
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
33 public interface Evaluator {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
34 Object evaluate(D4EArtifact artifact, CallContext context);
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
35 } // interface Evaluator
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
36
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
37 public static final Evaluator TRUE = new Evaluator() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
38 @Override
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
39 public Object evaluate(D4EArtifact artifact, CallContext context) {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
40 return Boolean.TRUE;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
41 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
42 };
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
43
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
44 public static final Evaluator FALSE = new Evaluator() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
45 @Override
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
46 public Object evaluate(D4EArtifact artifact, CallContext context) {
7166
0e1191e34b5f TRUE != FALSE ;)
Andre Heinecke <aheinecke@intevation.de>
parents: 7160
diff changeset
47 return Boolean.FALSE;
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
48 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
49 };
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
50
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
51 public class Instance {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
52
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
53 private List<Processor> processors;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
54
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
55 public Instance() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
56 processors = createProcessors();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
57 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
58
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
59 private List<Processor> createProcessors() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
60 List<Processor> processors =
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
61 new ArrayList<Processor>(axesProcessors.size());
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
62 for (AxisProcessor ap: axesProcessors) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
63 Processor pr = ap.createProcessor();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
64 if (pr != null) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
65 processors.add(pr);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
66 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
67 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
68 return processors;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
69 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
70
7122
038a04e001d7 Handle multiple processors for axis labeling.
Andre Heinecke <aheinecke@intevation.de>
parents: 7099
diff changeset
71 public List<Processor> getProcessorsForAxisName(String axisName) {
038a04e001d7 Handle multiple processors for axis labeling.
Andre Heinecke <aheinecke@intevation.de>
parents: 7099
diff changeset
72 List<Processor> retval = new ArrayList<Processor>(5);
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
73 for (Processor pr: processors) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
74 String aName = pr.getAxisName();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
75 if (aName != null && axisName.equals(aName)) {
7122
038a04e001d7 Handle multiple processors for axis labeling.
Andre Heinecke <aheinecke@intevation.de>
parents: 7099
diff changeset
76 retval.add(pr);
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
77 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
78 }
7122
038a04e001d7 Handle multiple processors for axis labeling.
Andre Heinecke <aheinecke@intevation.de>
parents: 7099
diff changeset
79 return retval;
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
80 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
81
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
82 public List<Processor> getProcessors() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
83 return processors;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
84 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
85
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
86 public Title getTitle() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
87 return DiagramAttributes.this.getTitle();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
88 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
89
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
90 public Title getSubtitle() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
91 return DiagramAttributes.this.getSubtitle();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
92 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
93
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
94 public DomainAxisAttributes getDomainAxis() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
95 return DiagramAttributes.this.getDomainAxis();
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
96 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
97
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
98 public int getAxisIndex(String axisName) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
99 return DiagramAttributes.this.getAxisIndex(axisName);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
100 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
101
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
102 public String getAxisName(int index) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
103 return DiagramAttributes.this.getAxisName(index);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
104 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
105
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
106 public List<AxisAttributes> getAxesAttributes() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
107 return DiagramAttributes.this.getAxesAttributes();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
108 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
109 } // class Instance
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
110
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
111 public static class AxisAttributes {
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
112 private String name;
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
113 private boolean isLeftAlign; // TODO: Remove!
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
114 private boolean forceAlign; // TODO: Remove!
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
115 private boolean includeZero; // TODO: Use Evaluator
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
116
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
117 private Evaluator isInverted;
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
118 private Evaluator isLog;
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
119
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
120 public AxisAttributes() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
121 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
122
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
123 public AxisAttributes(
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
124 String name,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
125 boolean isLeftAlign,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
126 boolean forceAlign,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
127 boolean includeZero,
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
128 Evaluator isInverted,
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
129 Evaluator isLog
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
130 ) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
131 this.name = name;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
132 this.isLeftAlign = isLeftAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
133 this.forceAlign = forceAlign;
7062
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
134 this.includeZero = includeZero;
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
135 this.isInverted = isInverted;
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
136 this.isLog = isLog;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
137 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
138
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
139 public String getName() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
140 return name;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
141 }
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
142
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
143 public boolean isLeftAlign() {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
144 return isLeftAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
145 }
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
146
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
147 public boolean forceAlign() {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
148 return forceAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
149 }
7062
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
150
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
151 public boolean includeZero() {
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
152 return includeZero;
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
153 }
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
154
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
155 public Evaluator isInverted() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
156 return isInverted;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
157 }
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
158
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
159 public Evaluator isLog() {
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
160 return isLog;
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
161 }
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
162 } // class AxisAttributes
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
163
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
164 public class DomainAxisAttributes extends AxisAttributes {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
165
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
166 private Title title;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
167
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
168 public DomainAxisAttributes() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
169 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
170
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
171 public DomainAxisAttributes(
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
172 String name,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
173 boolean isLeftAlign,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
174 boolean forceAlign,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
175 boolean includeZero,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
176 Evaluator isInverted,
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
177 Evaluator isLog,
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
178 Title title
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
179 ) {
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
180 super(name, isLeftAlign, forceAlign, includeZero, isInverted,
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
181 isLog);
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
182 this.title = title;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
183 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
184
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
185 public Title getTitle() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
186 return title;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
187 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
188 } // class DomainAxisAttributes
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
189
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
190 public static class AxisProcessor {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
191
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
192 private Class<Processor> processorClass;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
193 private String axisName;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
194
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
195 public AxisProcessor(Class<Processor> processorClass, String axisName) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
196 this.processorClass = processorClass;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
197 this.axisName = axisName;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
198 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
199
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
200 public Processor createProcessor() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
201 try {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
202 Processor pr = processorClass.newInstance();
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
203 pr.setAxisName(axisName);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
204 return pr;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
205 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
206 catch (InstantiationException ie) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
207 log.error(ie, ie);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
208 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
209 catch (IllegalAccessException iae) {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
210 log.error(iae, iae);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
211 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
212 return null;
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
213 }
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
214
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
215 } // class AxisProcessor
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
216
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
217 public abstract static class ConvertEvaluator
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
218 implements Evaluator
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
219 {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
220 protected String key;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
221 protected String type;
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
222
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
223 public ConvertEvaluator() {
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
224 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
225
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
226 public ConvertEvaluator(String key, String type) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
227 this.key = key;
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
228 this.type = type;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
229 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
230
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
231 protected Object convert(Object value) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
232 if (value == null || type == null || type.isEmpty()) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
233 return value;
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
234 }
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
235 if (value instanceof String) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
236 String v = (String)value;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
237 if ("double".equals(type)) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
238 return Double.valueOf(v);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
239 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
240 if ("int".equals(type)) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
241 return Integer.valueOf(v);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
242 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
243 if ("string".equals(type)) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
244 return v;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
245 }
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
246 }
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
247 // TODO: Support more types
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
248 return value;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
249 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
250 } // class ConvertEvaluator
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
251
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
252 public static class ContextEvaluator extends ConvertEvaluator {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
253
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
254 public ContextEvaluator() {
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
255 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
256
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
257 public ContextEvaluator(String key, String type) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
258 super(key, type);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
259 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
260
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
261 @Override
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
262 public Object evaluate(D4EArtifact artifact, CallContext context) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
263 return convert(context.getContextValue(key));
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
264 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
265 } // class ContextEvaluator
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
266
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
267 public static class ArtifactEvaluator extends ConvertEvaluator {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
268
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
269 public ArtifactEvaluator() {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
270 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
271
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
272 public ArtifactEvaluator(String key, String type) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
273 super(key, type);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
274 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
275
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
276 @Override
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
277 public Object evaluate(D4EArtifact artifact, CallContext context) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
278 return convert(artifact.getDataAsString(key));
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
279 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
280 } // class ContextEvaluator
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
281
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
282 public static class StringEvaluator implements Evaluator {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
283
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
284 private String value;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
285
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
286 public StringEvaluator() {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
287 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
288 public StringEvaluator(String value) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
289 this.value = value;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
290 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
291
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
292 @Override
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
293 public Object evaluate(D4EArtifact artifact, CallContext context) {
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
294 return value;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
295 }
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
296 } // class StringEvaluator
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
297
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
298 public static class Title {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
299
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
300 private String key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
301 private String def;
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
302 private List<Evaluator> arguments;
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
303
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
304 public Title() {
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
305 arguments = new ArrayList<Evaluator>(5);
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
306 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
307
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
308 public Title(String key) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
309 this(key, key);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
310 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
311
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
312 public Title(String key, String def) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
313 this();
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
314 this.key = key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
315 this.def = def;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
316 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
317
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
318 public String getKey() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
319 return key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
320 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
321
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
322 public void addArgument(Evaluator argument) {
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
323 arguments.add(argument);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
324 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
325
7060
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
326 public String evaluate(D4EArtifact artifact, CallContext context) {
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
327 if (key == null || key.isEmpty()) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
328 return def;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
329 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
330 Object [] args = new Object[arguments.size()];
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
331 for (int i = 0; i < args.length; ++i) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
332 args[i] = arguments.get(i).evaluate(artifact, context);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
333 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
334 return Resources.getMsg(context.getMeta(), key, def, args);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
335 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
336 } // class Title
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
337
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
338 private List<AxisAttributes> axesAttrs;
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
339 private List<AxisProcessor> axesProcessors;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
340
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
341 private Title title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
342 private Title subtitle;
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
343
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
344 private DomainAxisAttributes domainAxis;
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
345
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
346 public DiagramAttributes() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
347 axesAttrs = new ArrayList<AxisAttributes>(5);
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
348 axesProcessors = new ArrayList<AxisProcessor>(5);
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
349 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
350
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
351 @Override
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
352 public Object convert(Element config) {
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
353 parseAxis(config);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
354 parseProcessors(config);
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
355 parseTitle(config);
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
356 parseSubtitle(config);
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
357 parseDomainAxis(config);
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
358 return this;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
359 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
360
7060
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
361 public List<AxisAttributes> getAxesAttributes() {
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
362 return axesAttrs;
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
363 }
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
364
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
365 private void parseAxis(Element config) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
366 NodeList axisNodes = config.getElementsByTagName("axis");
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
367
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
368 for (int i = 0, N = axisNodes.getLength(); i < N; ++i) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
369 Element axisElement = (Element)axisNodes.item(i);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
370 String name = axisElement.getAttribute("name").trim();
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
371 String align = axisElement.getAttribute("align").trim();
7062
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
372 String includeZero =
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
373 axisElement.getAttribute("include-zero").trim();
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
374
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
375 String isInverted = axisElement.getAttribute("inverted");
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
376 String isLog = axisElement.getAttribute("logarithmic");
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
377
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
378 if (name.isEmpty()) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
379 continue;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
380 }
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
381 boolean isleftAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
382 boolean forceAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
383 for (String part: align.split("[\\s,]")) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
384 part = part.trim();
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
385 if ("left" .equals(part)) isleftAlign = true;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
386 else if ("right".equals(part)) isleftAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
387 else if ("force".equals(part)) forceAlign = true;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
388 }
7062
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
389
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
390 Evaluator isInvertedE = parseEvaluator(isInverted, FALSE);
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
391
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
392 Evaluator isLogE = parseEvaluator(isLog, FALSE);
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
393
7062
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
394 axesAttrs.add(new AxisAttributes(
4310c612a986 Added 'include-zero' attribute to <axis> tag in diagram configuration.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7061
diff changeset
395 name, isleftAlign, forceAlign,
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
396 includeZero.equals("true"),
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
397 isInvertedE, isLogE));
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
398 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
399 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
400
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
401 private static Evaluator createDynamicEvaluator(
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
402 String className,
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
403 Evaluator def
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
404 ) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
405 try {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
406 Class<Evaluator> clazz = (Class<Evaluator>)Class.forName(className);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
407 return clazz.newInstance();
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
408 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
409 catch (ClassNotFoundException cnfe) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
410 log.error(cnfe, cnfe);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
411 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
412 catch (InstantiationException ie) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
413 log.error(ie, ie);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
414 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
415 catch (IllegalAccessException iae) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
416 log.error(iae, iae);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
417 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
418 return def;
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
419 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
420
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
421 private static Evaluator parseEvaluator(String s, Evaluator def) {
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
422 if ((s = s.trim()).isEmpty()) return def;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
423 if ("true".equals(s)) return TRUE;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
424 if ("false".equals(s)) return FALSE;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
425 if (s.endsWith("()")) {
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
426 return createDynamicEvaluator(
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
427 s.substring(0, s.length()-2).trim(),
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
428 def);
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
429 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
430 return def;
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
431 }
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
432
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
433 public List<AxisProcessor> getAxesProcessors() {
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
434 return axesProcessors;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
435 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
436
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
437 public Title getTitle() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
438 return title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
439 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
440
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
441 public Title getSubtitle() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
442 return subtitle;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
443 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
444
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
445 public DomainAxisAttributes getDomainAxis() {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
446 return domainAxis;
7061
4f6b3ba542de Added domain axis title to diagram attributes.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7060
diff changeset
447 }
4f6b3ba542de Added domain axis title to diagram attributes.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7060
diff changeset
448
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
449 private void parseProcessors(Element config) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
450 NodeList processorNodes = config.getElementsByTagName("processor");
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
451
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
452 for (int i = 0, N = processorNodes.getLength(); i < N; ++i) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
453 Element processorElement = (Element)processorNodes.item(i);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
454 String className = processorElement.getAttribute("class").trim();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
455 String axisName = processorElement.getAttribute("axis").trim();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
456 if (className.isEmpty() || axisName.isEmpty()) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
457 continue;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
458 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
459
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
460 try {
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
461 Class<Processor> processorClass =
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
462 (Class<Processor>)Class.forName(className);
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
463 axesProcessors.add(new AxisProcessor(processorClass, axisName));
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
464 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
465 catch (ClassNotFoundException cnfe) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
466 log.error(cnfe, cnfe);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
467 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
468 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
469 }
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
470
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
471 private void parseTitle(Element config) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
472 title = extractTitle(config, "title");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
473 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
474
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
475 private void parseSubtitle(Element config) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
476 subtitle = extractTitle(config, "subtitle");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
477 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
478
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
479 private void parseDomainAxis(Element config) {
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
480 Title title = extractTitle(config, "domain-axis");
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
481 String includeZero = "";
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
482 String isInverted = "";
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
483 String isLog = "";
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
484
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
485 NodeList dAlist = config.getElementsByTagName("domain-axis");
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
486 if (dAlist.getLength() > 0) {
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
487 Element dAelement = (Element)dAlist.item(0);
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
488
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
489 includeZero = dAelement.getAttribute("include-zero");
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
490 isInverted = dAelement.getAttribute("inverted");
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
491 isLog = dAelement.getAttribute("logarithmic");
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
492 }
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
493
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
494 domainAxis = new DomainAxisAttributes(
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
495 "X",
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
496 false,
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
497 false,
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
498 includeZero.equals("true"),
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
499 parseEvaluator(isInverted, FALSE),
7241
32db4f89b65f Add new option to diagram axes "logarithmic" that can be set to an evaluator
Andre Heinecke <aheinecke@intevation.de>
parents: 7227
diff changeset
500 parseEvaluator(isLog, FALSE),
7143
053e39436ba3 Diagrams: Determine if axis should be inverted dynamically.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7122
diff changeset
501 title);
7061
4f6b3ba542de Added domain axis title to diagram attributes.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7060
diff changeset
502 }
4f6b3ba542de Added domain axis title to diagram attributes.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7060
diff changeset
503
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
504 private static Title extractTitle(Element config, String tagName) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
505 NodeList titleNodes = config.getElementsByTagName(tagName);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
506 if (titleNodes.getLength() < 1) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
507 return null;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
508 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
509 Element titleElement = (Element)titleNodes.item(0);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
510 String key = titleElement.getAttribute("key");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
511 String def = titleElement.getAttribute("default");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
512 Title title = new Title(key, def);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
513 NodeList argumentNodes = titleElement.getElementsByTagName("arg");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
514 for (int i = 0, N = argumentNodes.getLength(); i < N; ++i) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
515 Element argumentElement = (Element)argumentNodes.item(i);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
516 String expression = argumentElement.getAttribute("expr");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
517 String type = argumentElement.getAttribute("type");
7160
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
518
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
519 Evaluator ev = new StringEvaluator(expression);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
520
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
521 if (expression.endsWith("()")) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
522 ev = createDynamicEvaluator(
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
523 expression.substring(0, expression.length()-2).trim(),
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
524 ev);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
525 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
526 else if (expression.startsWith("artifact.")) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
527 ev = new ArtifactEvaluator(
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
528 expression.substring("artifact.".length()), type);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
529 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
530 else if (expression.startsWith("context.")) {
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
531 ev = new ContextEvaluator(
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
532 expression.substring("context.".length()), type);
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
533 }
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
534
f2ffa631c2ed Diagram attributes: Use evaluators for title arguments, too. This makes it more consistent, powerful and a little bit faster.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7143
diff changeset
535 title.addArgument(ev);
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
536 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
537 return title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
538 }
7060
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
539
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
540 public int getAxisIndex(String axisName) {
7061
4f6b3ba542de Added domain axis title to diagram attributes.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7060
diff changeset
541 for (int i = axesAttrs.size()-1; i >= 0; --i) {
7060
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
542 if (axesAttrs.get(i).getName().equals(axisName)) {
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
543 return i;
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
544 }
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
545 }
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
546 return -1;
78ded33f5f5b Some more accessors and typo fix
Andre Heinecke <aheinecke@intevation.de>
parents: 7059
diff changeset
547 }
7068
726d998dce29 Remove Axis Walker, unabstract Diagram generator
Andre Heinecke <aheinecke@intevation.de>
parents: 7062
diff changeset
548
726d998dce29 Remove Axis Walker, unabstract Diagram generator
Andre Heinecke <aheinecke@intevation.de>
parents: 7062
diff changeset
549 public String getAxisName(int index) {
7099
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
550 return index < 0 || index >= axesAttrs.size()
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
551 ? "" // null?
24f153ad1f40 Use pre-converted diagram attributes now.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7084
diff changeset
552 : axesAttrs.get(index).getName();
7068
726d998dce29 Remove Axis Walker, unabstract Diagram generator
Andre Heinecke <aheinecke@intevation.de>
parents: 7062
diff changeset
553 }
7227
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
554
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
555 @Override
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
556 public boolean accept(String outName, String facetName) {
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
557 Instance instance = new Instance();
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
558 for (Processor pr: instance.getProcessors()) {
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
559 if (pr.canHandle(facetName)) {
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
560 return true;
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
561 }
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
562 }
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
563 return false;
744df5a03337 Use diagram configuration and there processors to define compatible facets in loaded data.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7166
diff changeset
564 }
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
565 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
566 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org