annotate artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java @ 7049:165ea04b1545 generator-refactoring

Added alignment rules for diagrams.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 19 Sep 2013 11:08:43 +0200
parents a43137dfdcac
children f9d5020af0af
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
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
26 public class DiagramAttributes
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
27 {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
28 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
29
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
30 public static class AxisAttributes {
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
31 private String name;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
32 private boolean isLeftAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
33 private boolean forceAlign;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
34
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
35 public AxisAttributes() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
36 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
37
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
38 public AxisAttributes(
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
39 String name,
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
40 boolean isLeftAlign,
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
41 boolean forceAlign
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
42 ) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
43 this.name = name;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
44 this.isLeftAlign = isLeftAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
45 this.forceAlign = forceAlign;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
46 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
47
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
48 public String getName() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
49 return name;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
50 }
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
51
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
52 public boolean isLeftAlign() {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
53 return isLeftAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
54 }
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
55
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
56 public boolean forceAlign() {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
57 return forceAlign;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
58 }
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
59 } // class AxisAttributes
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
60
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
61 public static class AxisProcessor {
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
62 private Processor processor;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
63 private String axisName;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
64
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
65 public AxisProcessor() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
66 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
67
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
68 public AxisProcessor(Processor processor, String axisName) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
69 this.processor = processor;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
70 this.axisName = axisName;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
71 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
72
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
73 public Processor getProcessor() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
74 return processor;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
75 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
76
7042
599d3c48474c Fixed typo.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7040
diff changeset
77 public String getAxisName() {
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
78 return axisName;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
79 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
80 } // class AxisProcessor
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
81
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
82 public static class Argument {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
83 private String expression;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
84 private String type;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
85
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
86 public Argument() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
87 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
88
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
89 public Argument(String expression, String type) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
90 this.expression = expression;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
91 this.type = type;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
92 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
93
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
94 public Object evaluate(D4EArtifact artifact, CallContext context) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
95 if (expression.startsWith("artifact.")) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
96 String value = artifact.getDataAsString(
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
97 expression.substring("artifact.".length()));
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
98 return convert(value);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
99 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
100 if (expression.startsWith("context.")) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
101 return context.getContextValue(
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
102 expression.substring("context.".length()));
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
103 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
104 return expression;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
105 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
106
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
107 private Object convert(String value) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
108 if (value == null || type == null) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
109 return value;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
110 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
111 if ("double".equals(type)) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
112 return Double.valueOf(value);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
113 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
114 if ("int".equals(type)) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
115 return Integer.valueOf(value);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
116 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
117 // TODO: more types
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
118 return value;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
119 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
120 } // class Argument
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
121
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
122 public static class Title {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
123
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
124 private String key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
125 private String def;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
126 private List<Argument> arguments;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
127
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
128 public Title() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
129 arguments = new ArrayList<Argument>(5);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
130 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
131
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
132 public Title(String key) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
133 this(key, key);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
134 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
135
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
136 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
137 this();
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
138 this.key = key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
139 this.def = def;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
140 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
141
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
142 public String getKey() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
143 return key;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
144 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
145
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
146 public void addArgument(Argument argument) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
147 arguments.add(argument);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
148 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
149
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
150 public String evalute(D4EArtifact artifact, CallContext context) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
151 if (key == null || key.isEmpty()) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
152 return def;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
153 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
154 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
155 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
156 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
157 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
158 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
159 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
160 } // class Title
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
161
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
162 private List<AxisAttributes> axesAttrs;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
163 private List<AxisProcessor> axesProcessors;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
164
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
165 private Title title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
166 private Title subtitle;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
167
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
168 public DiagramAttributes() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
169 axesAttrs = new ArrayList<AxisAttributes>(5);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
170 axesProcessors = new ArrayList<AxisProcessor>(5);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
171 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
172
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
173 public DiagramAttributes(Element config) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
174 this();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
175 parseAxis(config);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
176 parseProcessors(config);
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
177 parseTitle(config);
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
178 parseSubtitle(config);
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
179 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
180
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
181 private void parseAxis(Element config) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
182 NodeList axisNodes = config.getElementsByTagName("axis");
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
183
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
184 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
185 Element axisElement = (Element)axisNodes.item(i);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
186 String name = axisElement.getAttribute("name").trim();
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
187 String align = axisElement.getAttribute("align").trim();
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
188 if (name.isEmpty()) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
189 continue;
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
190 }
7049
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
191 boolean isleftAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
192 boolean forceAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
193 for (String part: align.split("[\\s,]")) {
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
194 part = part.trim();
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
195 if ("left" .equals(part)) isleftAlign = true;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
196 else if ("right".equals(part)) isleftAlign = false;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
197 else if ("force".equals(part)) forceAlign = true;
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
198 }
165ea04b1545 Added alignment rules for diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7048
diff changeset
199 axesAttrs.add(new AxisAttributes(name, isleftAlign, forceAlign));
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
200 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
201 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
202
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
203 public List<AxisProcessor> getAxesProcessors() {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
204 return axesProcessors;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
205 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
206
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
207 public Title getTitle() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
208 return title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
209 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
210
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
211 public Title getSubtitle() {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
212 return subtitle;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
213 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
214
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
215 private void parseProcessors(Element config) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
216 NodeList processorNodes = config.getElementsByTagName("processor");
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
217
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
218 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
219 Element processorElement = (Element)processorNodes.item(i);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
220 String className = processorElement.getAttribute("class").trim();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
221 String axisName = processorElement.getAttribute("axis").trim();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
222 if (className.isEmpty() || axisName.isEmpty()) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
223 continue;
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
224 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
225
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
226 try {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
227 Processor processor =
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
228 (Processor)Class.forName(className).newInstance();
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
229 axesProcessors.add(new AxisProcessor(processor, axisName));
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
230 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
231 catch (ClassNotFoundException cnfe) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
232 log.error(cnfe, cnfe);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
233 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
234 catch (InstantiationException ie) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
235 log.error(ie, ie);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
236 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
237 catch (IllegalAccessException ia) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
238 log.error(ia, ia);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
239 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
240 catch (ClassCastException cce) {
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
241 log.error(cce, cce);
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
242 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
243 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
244 }
7048
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
245
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
246 private void parseTitle(Element config) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
247 title = extractTitle(config, "title");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
248 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
249
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
250 private void parseSubtitle(Element config) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
251 subtitle = extractTitle(config, "subtitle");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
252 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
253
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
254 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
255 NodeList titleNodes = config.getElementsByTagName(tagName);
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
256 if (titleNodes.getLength() < 1) {
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
257 return null;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
258 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
259 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
260 String key = titleElement.getAttribute("key");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
261 String def = titleElement.getAttribute("default");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
262 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
263 NodeList argumentNodes = titleElement.getElementsByTagName("arg");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
264 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
265 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
266 String expression = argumentElement.getAttribute("expr");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
267 String type = argumentElement.getAttribute("type");
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
268 title.addArgument(new Argument(expression, type));
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
269 }
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
270 return title;
a43137dfdcac Simple interpolation logic for diagram titles and subtitles.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7042
diff changeset
271 }
7040
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
272 }
f3cdc620b666 Added first version of diagram attribute parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff changeset
273 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org