annotate artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator2.java @ 7168:81416a62fa57

Saveguard range access in case an artifact has no range
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 26 Sep 2013 12:22:22 +0200
parents ab109ae2acc6
children ad4a3980092f
rev   line source
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 *
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 */
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.exports;
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
11 import org.dive4elements.river.artifacts.D4EArtifact;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
12 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
13 import org.dive4elements.river.artifacts.access.RangeAccess;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
14 import org.dive4elements.river.jfree.Bounds;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
15 import org.dive4elements.river.jfree.DoubleBounds;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
16 import org.dive4elements.river.themes.ThemeDocument;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
17
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18 public class LongitudinalSectionGenerator2 extends DiagramGenerator
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19 {
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 public static final String I18N_CHART_SHORT_SUBTITLE =
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21 "chart.longitudinal.section.shortsubtitle";
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 public static final String I18N_CHART_LOCATION_SUBTITLE =
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 "chart.longitudinal.section.locsubtitle";
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
26 @Override
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 public String getDefaultChartSubtitle() {
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 double[] dist = getRange();
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
29
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30 if (dist == null || dist.length != 2 ||
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31 Double.isNaN(dist[0]) || Double.isNaN(dist[1])) {
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
32 Object [] args = new Object[] {getRiverName()};
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
33 return msg(I18N_CHART_SHORT_SUBTITLE, "", args);
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
34 }
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
35
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
36 if (Math.abs(dist[0] - dist[1]) < 1E-5) {
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
37 Object [] args = new Object[] {getRiverName(), dist[1]};
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 return msg(I18N_CHART_LOCATION_SUBTITLE, "", args);
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 }
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
40
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 return super.getDefaultChartSubtitle();
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
43
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
44 /* We override doOut here to save the startkm and endkm in the
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
45 * context. Some facets will deliver different data because of
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
46 * that setting. It is mainly used in MINFO where it causes
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
47 * adaptive smoothing on the data if you are zoomed out do
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
48 * reduce the static in the curve. */
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
49 @Override
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
50 public void doOut(
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
51 ArtifactAndFacet bundle,
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
52 ThemeDocument theme,
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
53 boolean visible
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
54 ) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
55 /* Aheinecke (25.09.2013): I do not understand why this has to be
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
56 * done so difficult and if it really must be done for every
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
57 * facet. At least it has to be done _before_ the super class
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
58 * actually does the output and accesses the facet data.
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
59 */
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
60 D4EArtifact artifact = (D4EArtifact)bundle.getArtifact();
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
61
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
62 if (getXBounds(0) != null && getDomainAxisRange() != null) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
63 Bounds bounds =
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
64 calculateZoom(getXBounds(0), getDomainAxisRange());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
65 context.putContextValue("startkm", bounds.getLower());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
66 context.putContextValue("endkm", bounds.getUpper());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
67 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
68 else if (getXBounds(0) != null && getDomainAxisRange() == null) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
69 context.putContextValue("startkm", getXBounds(0).getLower());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
70 context.putContextValue("endkm", getXBounds(0).getUpper());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
71 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
72 else if (getXBounds(0) == null && getDomainAxisRange() == null) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
73 RangeAccess access = new RangeAccess(artifact);
7168
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
74 if (access.hasFrom() && access.hasTo()) {
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
75 context.putContextValue("startkm", access.getFrom());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
76 context.putContextValue("endkm", access.getTo());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
77 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
78 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
79 else if (getXBounds(0) == null && getDomainAxisRange() != null){
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
80 RangeAccess access = new RangeAccess(artifact);
7168
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
81 if (access.hasFrom() && access.hasTo()) {
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
82 Bounds b = new DoubleBounds(access.getFrom(), access.getTo());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
83 Bounds bounds =
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
84 calculateZoom(b, getDomainAxisRange());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
85 context.putContextValue("startkm", bounds.getLower());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
86 context.putContextValue("endkm", bounds.getUpper());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
87 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
88 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
89 super.doOut(bundle, theme, visible);
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
90 }
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
91 }
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
92 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org