annotate artifacts/src/main/java/org/dive4elements/river/exports/process/FlowVelocityProcessor.java @ 8472:3f505fba522f

(issue1772) Use 0.001km tolarance instead of 0.1 to find matching km. There is no sense to use a define here. I will not write static final double NULLPOINTNULLNULLONE=0.001 if i just want to use that value and not any other value which may make sense in some other place. Using hardcoded values can have its merits and makes the code easier to read.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 18 Nov 2014 15:24:40 +0100
parents e4606eae8ea5
children cb33de3434a8
rev   line source
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 *
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 */
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.exports.process;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
11 import java.util.Map;
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
12
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 import org.apache.log4j.Logger;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 import org.dive4elements.artifacts.CallContext;
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
17 import org.dive4elements.river.artifacts.D4EArtifact;
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
18 import org.dive4elements.river.artifacts.access.RiverAccess;
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
19 import org.dive4elements.river.artifacts.context.RiverContext;
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 import org.dive4elements.river.artifacts.model.FacetTypes;
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
21 import org.dive4elements.river.artifacts.model.ZoomScale;
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22 import org.dive4elements.river.exports.DiagramGenerator;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 import org.dive4elements.river.exports.StyledSeriesBuilder;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 import org.dive4elements.river.jfree.StyledXYSeries;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25 import org.dive4elements.river.themes.ThemeDocument;
7164
440c55b9634e Cosmetics
Andre Heinecke <aheinecke@intevation.de>
parents: 7162
diff changeset
26
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
27 import org.dive4elements.river.model.FlowVelocityMeasurementValue.FastFlowVelocityMeasurementValue;
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 import org.dive4elements.river.artifacts.model.FlowVelocityData;
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
29 import org.dive4elements.river.artifacts.resources.Resources;
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31 public class FlowVelocityProcessor extends DefaultProcessor {
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
32
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
33 private final static Logger log =
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 Logger.getLogger(FlowVelocityProcessor.class);
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36 public static final String I18N_AXIS_LABEL =
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37 "chart.flow_velocity.section.yaxis.label";
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 public static final String I18N_AXIS_LABEL_DEFAULT =
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 "Geschwindigkeit v [m/s]";
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
40 public static final String I18N_SUBTITLE_RADIUS =
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
41 "chart.subtitle.radius";
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
43
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
44 protected String yAxisLabel;
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
45
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 @Override
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 public void doOut(
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 DiagramGenerator generator,
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 ArtifactAndFacet bundle,
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
50 ThemeDocument theme,
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
51 boolean visible) {
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52 CallContext context = generator.getCallContext();
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
53 Map<String, String> metaData = bundle.getFacet().getMetaData();
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
54 StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(),
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55 theme);
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
56 series.putMetaData(metaData, bundle.getArtifact(), context);
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
57 yAxisLabel = metaData.get("Y");
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
58 String facetName = bundle.getFacetName();
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
59 Object data = bundle.getData(context);
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 if (data == null) {
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
61 // Check has been here before so we keep it for security reasons
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
62 // this should never happen though.
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
63 log.error("Data is null for facet: " + facetName);
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
64 return;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
65 }
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66 double [][] points;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
67
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
68 if (facetName.equals(FacetTypes.FLOW_VELOCITY_TOTALCHANNEL) ||
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
69 facetName.equals(FacetTypes.FLOW_VELOCITY_TOTALCHANNEL_FILTERED)) {
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
70 FlowVelocityData fData = (FlowVelocityData) data;
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
71 points = fData.getTotalChannelPoints();
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
72 } else if (facetName.equals(FacetTypes.FLOW_VELOCITY_MAINCHANNEL) ||
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
73 facetName.equals(FacetTypes.FLOW_VELOCITY_MAINCHANNEL_FILTERED)) {
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
74 FlowVelocityData fData = (FlowVelocityData) data;
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
75 points = fData.getMainChannelPoints(); // I hate facets!
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
76 } else if (facetName.equals(FacetTypes.FLOW_VELOCITY_MEASUREMENT)) {
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
77 FastFlowVelocityMeasurementValue fData =
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
78 (FastFlowVelocityMeasurementValue) data;
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
79 points = new double[][] {{fData.getStation()},{fData.getV()}};
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
80 } else {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
81 log.error("Unknown facet name: " + facetName);
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
82 return;
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
83 }
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
84 StyledSeriesBuilder.addPoints(series, points, true);
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
85 Double start = (Double)context.getContextValue("startkm");
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
86 Double end = (Double)context.getContextValue("endkm");
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
87 if (start != null && end != null) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
88 log.debug("start: " + start + " end: " + end);
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
89 D4EArtifact artifact = (D4EArtifact)bundle.getArtifact();
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
90 RiverContext fc = (RiverContext)context.globalContext();
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
91 // Adaptive smoothing, based on zoom factor/diagram extents.
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
92 ZoomScale scales = (ZoomScale)fc.get("zoomscale");
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
93 RiverAccess access = new RiverAccess((D4EArtifact)artifact);
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
94 String river = access.getRiverName();
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
95
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
96 double radius = scales.getRadius(river, start, end);
8078
a403dbdb9e81 Added $RADIUS zoom scale sub title logic to other diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8022
diff changeset
97 context.putContextValue("radius", radius);
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
98 generator.addSubtitle(Resources.getMsg(
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
99 context.getMeta(),
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
100 I18N_SUBTITLE_RADIUS,
8078
a403dbdb9e81 Added $RADIUS zoom scale sub title logic to other diagrams.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8022
diff changeset
101 new Object[] { "$RADIUS" }));
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
102 }
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
103 generator.addAxisSeries(series, axisName, visible);
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
104 }
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
105
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
106 @Override
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
107 public boolean canHandle(String facettype) {
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
108 return facettype.equals(FacetTypes.FLOW_VELOCITY_MAINCHANNEL_FILTERED) ||
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
109 facettype.equals(FacetTypes.FLOW_VELOCITY_MAINCHANNEL) ||
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
110 facettype.equals(FacetTypes.FLOW_VELOCITY_TOTALCHANNEL_FILTERED) ||
7162
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
111 facettype.equals(FacetTypes.FLOW_VELOCITY_TOTALCHANNEL) ||
4683bdf77ff9 Handle flow velocity measurements in the FlowVelocity processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7159
diff changeset
112 facettype.equals(FacetTypes.FLOW_VELOCITY_MEASUREMENT);
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
113 }
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
114
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
115 @Override
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
116 public String getAxisLabel(DiagramGenerator generator) {
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
117 if (yAxisLabel != null && !yAxisLabel.isEmpty()) {
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
118 return generator.msg(yAxisLabel, I18N_AXIS_LABEL_DEFAULT);
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7164
diff changeset
119 }
7155
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
120 return generator.msg(
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
121 I18N_AXIS_LABEL,
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
122 I18N_AXIS_LABEL_DEFAULT);
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
123 }
34b5e7ef2a36 Add FlowVelocity Processor
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
124 }

http://dive4elements.wald.intevation.org