comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FloodHeightProcessor.java @ 9205:3dae6b78e1da

inundationDuration/floodDuration multiple columns+chartLines refactoring
author gernotbelger
date Mon, 02 Jul 2018 19:01:09 +0200
parents 9831f6c60473
children 53cc5b496692
comparison
equal deleted inserted replaced
9204:4f411c6ee3ae 9205:3dae6b78e1da
10 10
11 package org.dive4elements.river.artifacts.sinfo.common; 11 package org.dive4elements.river.artifacts.sinfo.common;
12 12
13 import java.util.HashSet; 13 import java.util.HashSet;
14 import java.util.Set; 14 import java.util.Set;
15 import java.util.function.Function;
15 16
16 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; 17 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
17 import org.dive4elements.artifactdatabase.state.Facet; 18 import org.dive4elements.artifactdatabase.state.Facet;
18 import org.dive4elements.artifacts.CallContext; 19 import org.dive4elements.artifacts.CallContext;
19 import org.dive4elements.river.artifacts.common.AbstractCalculationResult; 20 import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
20 import org.dive4elements.river.artifacts.resources.Resources; 21 import org.dive4elements.river.artifacts.resources.Resources;
22 import org.dive4elements.river.artifacts.sinfo.flood_duration.DurationWaterlevel;
21 import org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationCalculationResult; 23 import org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationCalculationResult;
22 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; 24 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
23 import org.dive4elements.river.exports.DiagramGenerator; 25 import org.dive4elements.river.exports.DiagramGenerator;
24 import org.dive4elements.river.exports.LongitudinalSectionGenerator; 26 import org.dive4elements.river.exports.LongitudinalSectionGenerator;
25 import org.dive4elements.river.themes.ThemeDocument; 27 import org.dive4elements.river.themes.ThemeDocument;
30 * @author Matthias Schäfer 32 * @author Matthias Schäfer
31 * 33 *
32 */ 34 */
33 public final class FloodHeightProcessor extends AbstractSInfoProcessor { 35 public final class FloodHeightProcessor extends AbstractSInfoProcessor {
34 36
35 public static final String FACET_FLOOD_HEIGHT = "sinfo_facet_flood_height"; 37 private static final String FACET_FLOOD_HEIGHT = "sinfo_facet_flood_height";
36 38
37 public static final String FACET_FLOOD_HEIGHT_DESCRIPTION = "sinfo_facet_flood_height.description"; 39 private static final String FACET_FLOOD_HEIGHT_DESCRIPTION = "sinfo_facet_flood_height.description";
38 40
39 public static final String FACET_MAIN_VALUE_1_HEIGHT = "mainvalue.1.w"; 41 private static final String FACET_MAIN_VALUE_HEIGHT = "mainvalue.w";
40 42
41 public static final String FACET_MAIN_VALUE_2_HEIGHT = "mainvalue.2.w"; 43 private static final String FACET_MAIN_VALUE_HEIGHT_DESCRIPTION = "mainvalue.w.description";
42
43 public static final String FACET_MAIN_VALUE_3_HEIGHT = "mainvalue.3.w";
44
45 public static final String FACET_MAIN_VALUE_HEIGHT_DESCRIPTION = "mainvalue.w.description";
46 44
47 private static final String I18N_AXIS_LABEL = LongitudinalSectionGenerator.I18N_YAXIS_LABEL; 45 private static final String I18N_AXIS_LABEL = LongitudinalSectionGenerator.I18N_YAXIS_LABEL;
48 46
49 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>(); 47 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>();
50 48
51 static { 49 static {
52 HANDLED_FACET_TYPES.add(FACET_FLOOD_HEIGHT); 50 HANDLED_FACET_TYPES.add(FACET_FLOOD_HEIGHT);
53 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_1_HEIGHT); 51 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_HEIGHT);
54 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_2_HEIGHT);
55 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_3_HEIGHT);
56 } 52 }
57 53
58 public FloodHeightProcessor() { 54 public FloodHeightProcessor() {
59 super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); 55 super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES);
60 } 56 }
61 57
62 protected SInfoResultType doGetType(final String facetName) {
63 if (FACET_FLOOD_HEIGHT.contentEquals(facetName))
64 return SInfoResultType.infrastructureHeight;
65
66 if (FACET_MAIN_VALUE_1_HEIGHT.contentEquals(facetName))
67 return SInfoResultType.waterlevel1;
68
69 if (FACET_MAIN_VALUE_2_HEIGHT.contentEquals(facetName))
70 return SInfoResultType.waterlevel2;
71
72 if (FACET_MAIN_VALUE_3_HEIGHT.contentEquals(facetName))
73 return SInfoResultType.waterlevel3;
74
75 final String error = String.format("Unknown facet name: %s", facetName);
76 throw new UnsupportedOperationException(error);
77 }
78
79 public static Facet createFloodHeightFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, 58 public static Facet createFloodHeightFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
80 final int index) { 59 final int index) {
81 return AbstractSInfoProcessor.createFacet(context, hash, id, result, index, I18N_AXIS_LABEL, FACET_FLOOD_HEIGHT, FACET_FLOOD_HEIGHT_DESCRIPTION); 60 return AbstractSInfoProcessor.createFacet(context, hash, id, result, index, -1, I18N_AXIS_LABEL, FACET_FLOOD_HEIGHT, FACET_FLOOD_HEIGHT_DESCRIPTION);
82 } 61 }
83 62
84 public static Facet createMainValueHeightFacet(final CallContext context, final String hash, final String id, final FloodDurationCalculationResult result, 63 public static Facet createMainValueHeightFacet(final CallContext context, final String hash, final String id, final FloodDurationCalculationResult result,
85 final int index) { 64 final int facetIndex, final int resultIndex, final int dataIndex) {
86 final String description = Resources.getMsg(context.getMeta(), FACET_MAIN_VALUE_HEIGHT_DESCRIPTION, FACET_MAIN_VALUE_HEIGHT_DESCRIPTION, 65 final String description = Resources.getMsg(context.getMeta(), FACET_MAIN_VALUE_HEIGHT_DESCRIPTION, FACET_MAIN_VALUE_HEIGHT_DESCRIPTION,
87 result.getMainValueLabel(index)); 66 result.getMainValueLabel(dataIndex));
88 assert ((index >= 0) && (index <= 2)); 67
89 final String facetName = new String[] { FACET_MAIN_VALUE_1_HEIGHT, FACET_MAIN_VALUE_2_HEIGHT, FACET_MAIN_VALUE_3_HEIGHT }[index]; 68 return new SInfoResultFacet(facetIndex, resultIndex, dataIndex, FACET_MAIN_VALUE_HEIGHT, description, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash);
90 return new SInfoResultFacet(0, facetName, description, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash);
91 } 69 }
92 70
93 @Override 71 @Override
94 protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { 72 protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
95 73
96 return buildSeriesForType(generator, bundle, theme, visible, doGetType(bundle.getFacetName()), null); 74 final String facetName = bundle.getFacetName();
75
76 if (FACET_FLOOD_HEIGHT.contentEquals(facetName))
77 return buildSeriesForType(generator, bundle, theme, visible, SInfoResultType.infrastructureHeight, null);
78
79 if (FACET_MAIN_VALUE_HEIGHT.contentEquals(facetName)) {
80 final double[][] heightPoints = FloodDurationProcessor.getMainValueDurationPoints(generator, bundle, new Function<DurationWaterlevel, Double>() {
81 @Override
82 public Double apply(final DurationWaterlevel waterlevel) {
83 return waterlevel.getWaterlevel();
84 }
85 });
86 return buildSeriesForType(heightPoints, generator, bundle, theme, visible, null);
87 }
88
89 final String error = String.format("Unknown facet name: %s", facetName);
90 throw new UnsupportedOperationException(error);
97 } 91 }
98 } 92 }

http://dive4elements.wald.intevation.org