comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationProcessor.java @ 9229:0dcd1cd41915

Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
author mschaefer
date Thu, 05 Jul 2018 16:49:42 +0200
parents 0fc9c82e744e
children e5367900dd6d
comparison
equal deleted inserted replaced
9228:dba14da43f23 9229:0dcd1cd41915
17 import org.dive4elements.artifactdatabase.state.Facet; 17 import org.dive4elements.artifactdatabase.state.Facet;
18 import org.dive4elements.artifacts.CallContext; 18 import org.dive4elements.artifacts.CallContext;
19 import org.dive4elements.river.artifacts.common.AbstractCalculationResult; 19 import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
20 import org.dive4elements.river.artifacts.resources.Resources; 20 import org.dive4elements.river.artifacts.resources.Resources;
21 import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoProcessor; 21 import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoProcessor;
22 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultFacet;
22 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; 23 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
23 import org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationCalculationResult.ValueGetter; 24 import org.dive4elements.river.artifacts.sinfo.flood_duration.FloodDurationCalculationResult.ValueGetter;
24 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; 25 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
25 import org.dive4elements.river.exports.DiagramGenerator; 26 import org.dive4elements.river.exports.DiagramGenerator;
27 import org.dive4elements.river.model.Attribute.AttributeKey;
26 import org.dive4elements.river.themes.ThemeDocument; 28 import org.dive4elements.river.themes.ThemeDocument;
27 29
28 /** 30 /**
29 * Processor to generate the facet and data series of infrastructure flood durations 31 * Processor to generate the facet and data series of infrastructure flood durations
30 * 32 *
31 * @author Matthias Schäfer 33 * @author Matthias Schäfer
32 * 34 *
33 */ 35 */
34 public final class FloodDurationProcessor extends AbstractSInfoProcessor { 36 public final class FloodDurationProcessor extends AbstractSInfoProcessor {
35 37
36 private static final String FACET_FLOOD_DURATION = "sinfo_facet_flood_duration"; 38 private static final String FACET_FLOOD_DURATION_LEFT = "sinfo_facet_flood_duration.left";
39
40 private static final String FACET_FLOOD_DURATION_RIGHT = "sinfo_facet_flood_duration.right";
37 41
38 private static final String FACET_FLOOD_DURATION_DESCRIPTION = "sinfo_facet_flood_duration.description"; 42 private static final String FACET_FLOOD_DURATION_DESCRIPTION = "sinfo_facet_flood_duration.description";
39 43
40 private static final String FACET_MAIN_VALUE_DURATION = "mainvalue.duration"; 44 private static final String FACET_MAIN_VALUE_DURATION = "mainvalue.duration";
41 45
44 private static final String I18N_AXIS_LABEL = "sinfo.chart.flood_duration.section.yaxis.label"; 48 private static final String I18N_AXIS_LABEL = "sinfo.chart.flood_duration.section.yaxis.label";
45 49
46 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>(); 50 private static final Set<String> HANDLED_FACET_TYPES = new HashSet<>();
47 51
48 static { 52 static {
49 HANDLED_FACET_TYPES.add(FACET_FLOOD_DURATION); 53 HANDLED_FACET_TYPES.add(FACET_FLOOD_DURATION_LEFT);
54 HANDLED_FACET_TYPES.add(FACET_FLOOD_DURATION_RIGHT);
50 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_DURATION); 55 HANDLED_FACET_TYPES.add(FACET_MAIN_VALUE_DURATION);
51
52 } 56 }
53 57
54 public FloodDurationProcessor() { 58 public FloodDurationProcessor() {
55 super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES); 59 super(I18N_AXIS_LABEL, HANDLED_FACET_TYPES);
56 } 60 }
57 61
58 public static Facet createFloodDurationFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, 62 public static Facet createFloodDurationFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
59 final int resultIndex) { 63 final int facetIndex, final int resultIndex) {
60 64
61 return AbstractSInfoProcessor.createFacet(context, hash, id, result, resultIndex, I18N_AXIS_LABEL, FACET_FLOOD_DURATION, 65 if (facetIndex == 0) {
62 FACET_FLOOD_DURATION_DESCRIPTION); 66 final String description = Resources.getMsg(context.getMeta(), FACET_FLOOD_DURATION_DESCRIPTION, FACET_FLOOD_DURATION_DESCRIPTION,
67 SInfoResultType.localizeRiverside(context, AttributeKey.LEFT));
68 return new SInfoResultFacet(facetIndex, resultIndex, FACET_FLOOD_DURATION_LEFT, description, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash);
69 }
70 else {
71 final String description = Resources.getMsg(context.getMeta(), FACET_FLOOD_DURATION_DESCRIPTION, FACET_FLOOD_DURATION_DESCRIPTION,
72 SInfoResultType.localizeRiverside(context, AttributeKey.RIGHT));
73 return new SInfoResultFacet(facetIndex, resultIndex, FACET_FLOOD_DURATION_RIGHT, description, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash);
74 }
63 } 75 }
64 76
65 public static Facet createMainValueDurationFacet(final CallContext context, final String hash, final String id, final FloodDurationCalculationResult result, 77 public static Facet createMainValueDurationFacet(final CallContext context, final String hash, final String id, final FloodDurationCalculationResult result,
66 final int facetIndex, final int resultIndex, final int dataIndex) { 78 final int facetIndex, final int resultIndex, final int dataIndex) {
67 79
72 id); 84 id);
73 } 85 }
74 86
75 @Override 87 @Override
76 protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { 88 protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) {
89
77 final String facetName = bundle.getFacetName(); 90 final String facetName = bundle.getFacetName();
78 91
79 if (FACET_FLOOD_DURATION.contentEquals(facetName)) 92 if (FACET_FLOOD_DURATION_LEFT.contentEquals(facetName)) {
80 return buildSeriesForType(generator, bundle, theme, visible, SInfoResultType.floodDuration, null); 93 return buildInfrastructureSeries(generator, bundle, theme, visible, AttributeKey.LEFT);
94 }
95
96 if (FACET_FLOOD_DURATION_RIGHT.contentEquals(facetName))
97 return buildInfrastructureSeries(generator, bundle, theme, visible, AttributeKey.RIGHT);
81 98
82 if (FACET_MAIN_VALUE_DURATION.contentEquals(facetName)) { 99 if (FACET_MAIN_VALUE_DURATION.contentEquals(facetName)) {
83 100
84 final AbstractCalculationResult data = getResult(generator, bundle); 101 final AbstractCalculationResult data = getResult(generator, bundle);
85 102
92 public double getValue(final DurationWaterlevel waterlevel) { 109 public double getValue(final DurationWaterlevel waterlevel) {
93 return waterlevel.getFloodDurDaysPerYear(); 110 return waterlevel.getFloodDurDaysPerYear();
94 } 111 }
95 }; 112 };
96 final double[][] points = ((FloodDurationCalculationResult) data).getMainValueDurationPoints(generator, valuegetter, index); 113 final double[][] points = ((FloodDurationCalculationResult) data).getMainValueDurationPoints(generator, valuegetter, index);
97 return buildSeriesForType(points, generator, bundle, theme, visible, null); 114 return buildStepLineSeriesForType(points, generator, bundle, theme, visible);
98 } 115 }
99 } 116 }
100 117
101 final String error = String.format("Unknown facet name: %s", facetName); 118 final String error = String.format("Unknown facet name: %s", facetName);
102 throw new UnsupportedOperationException(error); 119 throw new UnsupportedOperationException(error);
103 } 120 }
121
122 private String buildInfrastructureSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible,
123 final AttributeKey riverside) {
124
125 final FloodDurationCalculationResult data = (FloodDurationCalculationResult) getResult(generator, bundle);
126
127 final double[][] points = data.getInfrastructurePoints(SInfoResultType.floodDuration, riverside);
128
129 return buildSeriesForType(points, generator, bundle, theme, visible, null);
130 }
104 } 131 }

http://dive4elements.wald.intevation.org