annotate artifacts/src/main/java/org/dive4elements/river/exports/process/BedDiffYearProcessor.java @ 8730:cb33de3434a8

(issue1754) Proper subtitle handling for Radius This deduplicates the subtitle and zoom / radius calculation code by moving it out of the processors. Doing this fixes cases where the subtitle would be removed when a the according filtered facet was removed although it should still have shown the Range for example. Range is now also added as a subtitle for the difference diagrams. This adds some tasty hack (with cheese) to determine wether or not the user has set the subtitle. See the comment in getChartSubtitlePure in LongitudinalSectionGenerator2 for details.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 30 Apr 2015 13:06:51 +0200
parents 5dea205ea3e7
children 8dbb969091c5
rev   line source
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
3 *
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
7 */
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
8
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.exports.process;
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
10
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
11 import java.util.Map;
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
12
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
13 import org.apache.log4j.Logger;
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
14 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
7808
ea6b441b4872 Calculate the zoom dependent radius and add the informations to chart subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7727
diff changeset
16 import org.dive4elements.river.artifacts.D4EArtifact;
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
17 import org.dive4elements.river.artifacts.model.FacetTypes;
7808
ea6b441b4872 Calculate the zoom dependent radius and add the informations to chart subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7727
diff changeset
18 import org.dive4elements.river.artifacts.resources.Resources;
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
19 import org.dive4elements.river.exports.StyledSeriesBuilder;
7092
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
20 import org.dive4elements.river.exports.DiagramGenerator;
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
21 import org.dive4elements.river.jfree.StyledXYSeries;
6905
1b35b2ddfc28 Artifacts: Introduce ThemeDocument & make stuff compileable again. THIS BREAKS THE SYSTEM! TODO: Move ThemeUtils into ThemeDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6863
diff changeset
22 import org.dive4elements.river.themes.ThemeDocument;
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
23
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
24
7058
5c07024cdc24 Fix indention / line length
Andre Heinecke <aheinecke@intevation.de>
parents: 7057
diff changeset
25 public class BedDiffYearProcessor
5c07024cdc24 Fix indention / line length
Andre Heinecke <aheinecke@intevation.de>
parents: 7057
diff changeset
26 extends DefaultProcessor implements FacetTypes {
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
27
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
28 private final static Logger log =
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
29 Logger.getLogger(BedDiffYearProcessor.class);
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
30
6778
cbe9ac4380a5 issue1439: Show line segments for points that have gaps on both sides. Small refac.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6771
diff changeset
31 protected static double GAP_TOLERANCE = 0.101d;
cbe9ac4380a5 issue1439: Show line segments for points that have gaps on both sides. Small refac.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6771
diff changeset
32
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
33 protected String yAxisLabel;
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
34
7146
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
35 public static final String I18N_AXIS_LABEL =
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
36 "chart.beddifference.yaxis.label.diff";
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
37 public static final String I18N_AXIS_LABEL_DEFAULT =
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
38 "delta S [cm]";
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
39
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
40 @Override
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
41 public void doOut(
7092
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
42 DiagramGenerator generator,
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
43 ArtifactAndFacet bundle,
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
44 ThemeDocument theme,
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
45 boolean visible
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
46 ) {
7092
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
47 CallContext context = generator.getCallContext();
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
48 Map<String, String> metaData =
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
49 bundle.getFacet().getMetaData(bundle.getArtifact(), context);
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
50 yAxisLabel = metaData.get("Y");
8001
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
51
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
52 Object data = bundle.getData(context);
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
53 if (data == null) {
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
54 return;
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
55 }
5277483044d9 Fixed NPE when loading folders from datacage.
Raimund Renkert <rrenkert@intevation.de>
parents: 7991
diff changeset
56
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
57 if (!(data instanceof double[][])) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8078
diff changeset
58 log.error("Can't process " + data.getClass().getName() + " objects");
7092
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
59 return;
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
60 }
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
61 double[][] bData = (double[][]) data;
8696
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
62 for (int N = bData[0].length, i = 0; i < N; i++) {
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
63 // scale to cm
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
64 bData[1][i] *= 100d;
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
65 }
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
66
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
67 StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
68 series.putMetaData(metaData, bundle.getArtifact(), context);
8696
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
69 StyledSeriesBuilder.addPoints(series,
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
70 bData,
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
71 false,
8696
5dea205ea3e7 (issue1670) Remove 99-percent copy-paste method, which had been used only once.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
72 GAP_TOLERANCE);
7985
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
73
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
74 generator.addAxisSeries(series, axisName, visible);
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
75
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
76 return;
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
77 }
10debf4b82be Split bed differences facet into data specific facets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7892
diff changeset
78
7092
6563262052ab Add DiagramGenerator doOut function
Andre Heinecke <aheinecke@intevation.de>
parents: 7075
diff changeset
79 @Override
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
80 public boolean canHandle(String facetType) {
7705
f1257717fa4b (issue1594) Move Bed differences absolute height into the correct processor
Andre Heinecke <aheinecke@intevation.de>
parents: 7683
diff changeset
81 return BED_DIFFERENCE_YEAR.equals(facetType) // from BedDifferencesYear
7683
28758f51f1b2 issue1594/issue1603: Put bed_differences to correct axis.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7146
diff changeset
82 || BED_DIFFERENCE_YEAR_FILTERED.equals(facetType); // from BedDifferencesYear
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
83 }
7146
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
84
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
85 @Override
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
86 public String getAxisLabel(DiagramGenerator generator) {
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
87 if (yAxisLabel != null && !yAxisLabel.isEmpty()) {
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
88 return generator.msg(yAxisLabel, I18N_AXIS_LABEL_DEFAULT);
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
89 }
7146
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
90 return generator.msg(
7892
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
91 I18N_AXIS_LABEL,
e844be34a606 Add metadata to chart series and datasets.
Raimund Renkert <rrenkert@intevation.de>
parents: 7808
diff changeset
92 I18N_AXIS_LABEL_DEFAULT);
7146
414794d0a50d Add label for bed difference axis
Andre Heinecke <aheinecke@intevation.de>
parents: 7092
diff changeset
93 }
6570
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
94 }
6435b3d7fb52 Refactored BedDifferenceYearGenerator to use new BedDiffYearProcessor.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
95 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org