comparison artifacts/src/main/java/org/dive4elements/river/exports/process/SedimentLoadProcessor.java @ 7685:270946b97539

(issue1614) Handle NaN in Styled Series created by SedimentLoadProcessors This also removes duplicated code by basing the TA and MA processors on the same class
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 11 Dec 2013 17:13:26 +0100
parents
children 963ede7b32bb
comparison
equal deleted inserted replaced
7684:0141908fafe0 7685:270946b97539
1 /* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde
2 * Software engineering by Intevation GmbH
3 *
4 * This file is Free Software under the GNU AGPL (>=v3)
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6 * documentation coming with Dive4Elements River for details.
7 */
8
9 package org.dive4elements.river.exports.process;
10
11 import java.util.Set;
12
13 import org.apache.log4j.Logger;
14 import org.jfree.data.xy.XYSeries;
15
16 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
17 import org.dive4elements.artifacts.CallContext;
18 import org.dive4elements.river.artifacts.model.FacetTypes;
19 import org.dive4elements.river.exports.DiagramGenerator;
20 import org.dive4elements.river.exports.StyledSeriesBuilder;
21 import org.dive4elements.river.jfree.StyledXYSeries;
22 import org.dive4elements.river.themes.ThemeDocument;
23
24 import org.dive4elements.river.artifacts.model.minfo.SedimentLoad;
25 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFraction;
26
27 // Base class for SedimantLoad$UNITProcessors
28 public class SedimentLoadProcessor extends DefaultProcessor
29 {
30 private final static Logger logger =
31 Logger.getLogger(SedimentLoadProcessor.class);
32
33 @Override
34 public void doOut(
35 DiagramGenerator generator,
36 ArtifactAndFacet bundle,
37 ThemeDocument theme,
38 boolean visible) {
39 logger.debug("doOut " + bundle.getFacetName());
40 CallContext context = generator.getCallContext();
41 XYSeries series = new StyledXYSeries(bundle.getFacetDescription(),
42 false, // Handle NaN
43 theme);
44 Object data = bundle.getData(context);
45 String facetName = bundle.getFacetName();
46 double [][] points;
47
48 if (FacetTypes.IS.SEDIMENT_LOAD_M3A(facetName) ||
49 FacetTypes.IS.SEDIMENT_LOAD_TA(facetName)) {
50 points = (double[][]) data;
51 } else if (FacetTypes.IS.SEDIMENT_LOAD_UNKNOWN(facetName)) {
52 SedimentLoad load = (SedimentLoad) data;
53 Set<Double> kms = load.getKms();
54 points = new double[2][kms.size()];
55 int counter = 0;
56 for (Double km: kms) {
57 SedimentLoadFraction fraction = load.getFraction(km);
58 points[0][counter] = km;
59 points[1][counter] = fraction.getUnknown();
60 counter++;
61 }
62 } else {
63 logger.error("Unknown facet name: " + facetName);
64 return;
65 }
66
67 StyledSeriesBuilder.addPoints(series, points, false); // Keep NaN
68
69 generator.addAxisSeries(series, axisName, visible);
70 }
71 }
72

http://dive4elements.wald.intevation.org