annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java @ 9200:6393e05a9610

refactoring on processors
author gernotbelger
date Fri, 29 Jun 2018 16:29:23 +0200
parents 5294114b1df4
children 9831f6c60473
rev   line source
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
2 * Software engineering by
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
5 *
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
9 */
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
10
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8886
diff changeset
11 package org.dive4elements.river.artifacts.sinfo.common;
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
12
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
13 import java.util.Map;
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
14 import java.util.Set;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
15
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
16 import org.apache.log4j.Logger;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
17 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
18 import org.dive4elements.artifacts.Artifact;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
19 import org.dive4elements.artifacts.CallContext;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
20 import org.dive4elements.river.artifacts.D4EArtifact;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
21 import org.dive4elements.river.artifacts.access.RiverAccess;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
22 import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
23 import org.dive4elements.river.artifacts.common.IResultType;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
24 import org.dive4elements.river.artifacts.context.RiverContext;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
25 import org.dive4elements.river.artifacts.math.MovingAverage;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
26 import org.dive4elements.river.artifacts.model.ZoomScale;
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
27 import org.dive4elements.river.exports.DiagramGenerator;
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
28 import org.dive4elements.river.exports.StyledSeriesBuilder;
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.exports.process.DefaultProcessor;
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
30 import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
31 import org.dive4elements.river.jfree.StyledXYSeries;
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.themes.ThemeDocument;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
33
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
34 /**
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
35 * Abstraction for some processor implementation within S-INFO. Probably this abstraction could also be used for other
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
36 * cases as well.
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
37 *
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
38 * @author Gernot Belger
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
39 *
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
40 */
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8886
diff changeset
41 public abstract class AbstractSInfoProcessor extends DefaultProcessor {
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
42
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
43 protected static final double GAP_DISTANCE = 0.101;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
44
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
45 private final static Logger log = Logger.getLogger(AbstractSInfoProcessor.class);
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
46
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
47 private String yAxisLabel;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
48
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
49 private final Set<String> handled_facet_types;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
50
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
51 private final String i18n_axis_label;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
52
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
53 public AbstractSInfoProcessor(final String i18n_axis_label, final Set<String> handled_facet_types) {
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
54 this.i18n_axis_label = i18n_axis_label;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
55 this.handled_facet_types = handled_facet_types;
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
56 }
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
57
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
58 @Override
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
59 public final void doOut(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
8886
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
60 try {
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
61 this.yAxisLabel = generateSeries(generator, bundle, theme, visible);
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
62 }
8886
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
63 catch (final Exception e) {
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
64 log.error(e.getMessage(), e);
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
65 }
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
66 }
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
67
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
68 /**
8886
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
69 * @return The axis label
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
70 */
8886
cc86b0f9b3c3 SINFO-FlowDepth - work on tkh themes
gernotbelger
parents: 8884
diff changeset
71 protected abstract String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible);
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
72
9200
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
73 protected final String buildSeriesForType(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible,
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
74 final IResultType resultType, final Double gapDistance) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
75 final CallContext context = generator.getContext();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
76 final Map<String, String> metaData = bundle.getFacet().getMetaData();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
77
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
78 final Artifact artifact = bundle.getArtifact();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
79
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
80 final StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
81 series.putMetaData(metaData, artifact, context);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
82
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
83 final String facetName = bundle.getFacetName();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
84
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
85 final AbstractCalculationResult data = (AbstractCalculationResult) bundle.getData(context);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
86 if (data == null) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
87 // Check has been here before so we keep it for security reasons
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
88 // this should never happen though.
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
89 throw new IllegalStateException("Data is null for facet: " + facetName);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
90 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
91
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
92 final double[][] points = generatePoints(context, artifact, data, facetName, resultType);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
93
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
94 if (gapDistance == null)
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
95 StyledSeriesBuilder.addPoints(series, points, true);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
96 else
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
97 StyledSeriesBuilder.addPoints(series, points, true, gapDistance);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
98
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
99 generator.addAxisSeries(series, getAxisName(), visible);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
100
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
101 return metaData.get("Y");
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
102 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
103
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
104 protected final String buildSeriesForTkh(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme,
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
105 final boolean visible) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
106 final CallContext context = generator.getContext();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
107
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
108 final String facetName = bundle.getFacetName();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
109 final AbstractTkhCalculationResult data = (AbstractTkhCalculationResult) bundle.getData(context);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
110 if (data == null) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
111 // Check has been here before so we keep it for security reasons
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
112 // this should never happen though.
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
113 throw new IllegalStateException("Data is null for facet: " + facetName);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
114 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
115
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
116 final StyledXYSeries seriesUp = new StyledXYSeries(bundle.getFacetDescription(), theme);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
117 final double[][] pointsUp = data.getTkhUpPoints();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
118 StyledSeriesBuilder.addPoints(seriesUp, pointsUp, true);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
119
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
120 // REMARK: we add " " because the description is misused as id, which must be unique.
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
121 final StyledXYSeries seriesDown = new StyledXYSeries(bundle.getFacetDescription() + " ", theme);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
122 final double[][] pointsDown = data.getTkhDownPoints();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
123 StyledSeriesBuilder.addPoints(seriesDown, pointsDown, true);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
124
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
125 final StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
126 area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
127 area.addSeries(seriesUp);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
128 area.addSeries(seriesDown);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
129
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
130 generator.addAreaSeries(area, getAxisName(), visible);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
131
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
132 return null;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
133 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
134
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
135 private Double findRadius(final CallContext context, final Artifact artifact) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
136 final Double start = (Double) context.getContextValue("startkm");
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
137 final Double end = (Double) context.getContextValue("endkm");
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
138
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
139 if (start == null || end == null)
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
140 return null;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
141
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
142 final RiverContext fc = (RiverContext) context.globalContext();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
143 final ZoomScale scales = (ZoomScale) fc.get("zoomscale");
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
144 final RiverAccess access = new RiverAccess((D4EArtifact) artifact);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
145 final String river = access.getRiverName();
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
146
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
147 return scales.getRadius(river, start, end);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
148 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
149
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
150 private double[][] generatePoints(final CallContext context, final Artifact artifact, final AbstractCalculationResult data, final String facetName,
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
151 final IResultType resultType) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
152
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
153 final double[][] points = data.getStationPoints(resultType);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
154 if (facetName.endsWith(".filtered")) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
155 final Double radius = findRadius(context, artifact);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
156 return movingAverage(radius, points);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
157 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
158
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
159 return points;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
160 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
161
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
162 private double[][] movingAverage(final Double radius, final double[][] points) {
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
163
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
164 if (radius == null)
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
165 return points;
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
166
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
167 return MovingAverage.weighted(points, radius);
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
168 }
6393e05a9610 refactoring on processors
gernotbelger
parents: 9040
diff changeset
169
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
170 @Override
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
171 public final boolean canHandle(final String facettype) {
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
172 return this.handled_facet_types.contains(facettype);
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
173 }
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
174
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
175 @Override
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
176 public final String getAxisLabel(final DiagramGenerator generator) {
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
177 if (this.yAxisLabel != null && !this.yAxisLabel.isEmpty()) {
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
178 // REMARK/UNINTENDED: yAxisLabel may also be a resolved message (side-effect of StyledXYSeries#putMetadata),
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
179 // and cannot be resolved, so we need to give the resolved value as default
9040
5294114b1df4 Fixed/changed some FIXMEs/TODOs
gernotbelger
parents: 8916
diff changeset
180 // TODO: In other implementations (i.e. FlowVelocityProcessor), an explicit (German) default label is given here,
8884
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
181 // probably the English version will also show German (CHECK)
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
182 return generator.msg(this.yAxisLabel, this.yAxisLabel);
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
183 }
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
184 return generator.msg(this.i18n_axis_label, "MISSING");
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
185 }
7a8c12706834 Work on SINFO-FlowDepth
gernotbelger
parents:
diff changeset
186 }

http://dive4elements.wald.intevation.org