comparison artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstState.java @ 9432:d194c5b24bf8

Added bundu bzws w calculation and longitudinal sections of wspl and depth
author mschaefer
date Mon, 20 Aug 2018 09:46:02 +0200
parents ddcd52d239cd
children d2f5375ede26
comparison
equal deleted inserted replaced
9431:eeea16ea0980 9432:d194c5b24bf8
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde 1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
2 * Software engineering by Intevation GmbH 2 * Software engineering by
3 * Björnsen Beratende Ingenieure GmbH
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
3 * 5 *
4 * This file is Free Software under the GNU AGPL (>=v3) 6 * This file is Free Software under the GNU AGPL (>=v3)
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the 7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
7 */ 9 */
11 import java.util.List; 13 import java.util.List;
12 14
13 import org.apache.log4j.Logger; 15 import org.apache.log4j.Logger;
14 import org.dive4elements.artifactdatabase.state.Facet; 16 import org.dive4elements.artifactdatabase.state.Facet;
15 import org.dive4elements.artifacts.CallContext; 17 import org.dive4elements.artifacts.CallContext;
18 import org.dive4elements.river.artifacts.ChartArtifact;
16 import org.dive4elements.river.artifacts.D4EArtifact; 19 import org.dive4elements.river.artifacts.D4EArtifact;
17 import org.dive4elements.river.artifacts.bundu.BUNDUArtifact; 20 import org.dive4elements.river.artifacts.bundu.BUNDUArtifact;
21 import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
22 import org.dive4elements.river.artifacts.model.Calculation;
18 import org.dive4elements.river.artifacts.model.CalculationResult; 23 import org.dive4elements.river.artifacts.model.CalculationResult;
19 import org.dive4elements.river.artifacts.model.DataFacet; 24 import org.dive4elements.river.artifacts.model.DataFacet;
25 import org.dive4elements.river.artifacts.model.EmptyFacet;
20 import org.dive4elements.river.artifacts.model.FacetTypes; 26 import org.dive4elements.river.artifacts.model.FacetTypes;
27 import org.dive4elements.river.artifacts.model.ReportFacet;
28 import org.dive4elements.river.artifacts.model.WaterlevelFacet;
21 import org.dive4elements.river.artifacts.states.DefaultState; 29 import org.dive4elements.river.artifacts.states.DefaultState;
22 30
23 /** 31 /**
24 * State to compute the fixation realizing (vollmer) results. 32 * State to compute the bundu bezugswst results.
25 *
26 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
27 */ 33 */
28 public class BezugswstState extends DefaultState implements FacetTypes { 34 public class BezugswstState extends DefaultState implements FacetTypes {
29 35
30 private static final long serialVersionUID = 1L; 36 private static final long serialVersionUID = 1L;
31 37
40 public BezugswstState() { 46 public BezugswstState() {
41 } 47 }
42 48
43 @Override 49 @Override
44 public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) { 50 public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
51
45 log.debug("BezugswstState.computeAdvance"); 52 log.debug("BezugswstState.computeAdvance");
46 // TODO: remove this old stuff, or replace it by new 53
47 // final CalculationResult res; 54 if (artifact instanceof ChartArtifact) {
48 // 55 facets.add(new EmptyFacet());
49 // final FixRealizingAccess access = new FixRealizingAccess(artifact); 56 return null;
50 // 57 }
51 // if (old instanceof CalculationResult) {
52 // res = (CalculationResult) old;
53 // } else {
54 //
55 // final FixRealizingCalculation calc = new FixRealizingCalculation(access);
56 // res = calc.calculate();
57 // }
58 //
59 // if (facets == null) {
60 // return res;
61 // }
62 //
63 // if (res.getReport().hasProblems()) {
64 // facets.add(new ReportFacet());
65 // }
66 //
67 // final String id = getID();
68 // final CallMeta meta = context.getMeta();
69 //
70 // final FixRealizingResult fixRes = (FixRealizingResult) res.getData();
71 // final WQKms[] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0];
72 //
73 // for (int i = 0; i < wqkms.length; i++) {
74 // String nameW = null;
75 // String nameQ = null;
76 //
77 // if (access.isQ()) {
78 // nameQ = wqkms[i].getName();
79 // nameW = "W(" + nameQ + ")";
80 // } else {
81 // nameW = wqkms[i].getName();
82 // nameQ = "Q(" + nameW + ")";
83 // }
84 //
85 // final Facet wq = new FixWaterlevelFacet(i, FIX_WQ_LS, nameW, ComputeType.ADVANCE, hash, id);
86 //
87 // final Facet w = new FixWaterlevelFacet(i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, id);
88 //
89 // final Facet q = new FixWaterlevelFacet(i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, id);
90 // final Facet csFacet = new CrossSectionWaterLineFacet(i, nameW);
91 //
92 // facets.add(wq);
93 // facets.add(w);
94 // facets.add(q);
95 // facets.add(csFacet);
96 //
97 // // XXX: THIS CAN NOT HAPPEN! REMOVE IT!
98 // if (wqkms[i] instanceof WQCKms) {
99 // final String nameC = nameW.replace("benutzerdefiniert", "benutzerdefiniert [korrigiert]");
100 //
101 // final Facet c = new FixWaterlevelFacet(i, DISCHARGE_LONGITUDINAL_C, nameC);
102 //
103 // facets.add(c);
104 // }
105 // }
106 //
107 // if (wqkms.length > 0) {
108 // final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy");
109 // final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm");
110 //
111 // final Collection<Date> reds = fixRes.getReferenceEventsDates();
112 // final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds);
113 //
114 // int i = 0;
115 // for (final Date d : reds) {
116 // facets.add(new FixReferenceEventsFacet((1 << 9) | i, FIX_EVENTS, cf.format(d)));
117 // i++;
118 // }
119 //
120 // facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id));
121 //
122 // facets.add(new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id));
123 //
124 // facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id));
125 // }
126 //
127 // facets.add(new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id));
128 //
129 // facets.add(new FixWQCurveFacet(0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" + access.getFunction()
130 // + ")"));
131 //
132 return compute((BUNDUArtifact) artifact, context, hash, facets, old); 58 return compute((BUNDUArtifact) artifact, context, hash, facets, old);
133 } 59 }
134 60
135 @Override 61 @Override
136 public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) { 62 public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
137 63
64 if (artifact instanceof ChartArtifact) {
65 facets.add(new EmptyFacet());
66 return null;
67 }
138 return compute((BUNDUArtifact) artifact, context, hash, facets, old); 68 return compute((BUNDUArtifact) artifact, context, hash, facets, old);
139 } 69 }
140 70
71 /**
72 * Compute result or returned object from cache, create facets.
73 *
74 * @param old
75 * Object that was cached.
76 */
141 private Object compute(final BUNDUArtifact artifact, final CallContext context, final String hash, final List<Facet> facets, final Object old) { 77 private Object compute(final BUNDUArtifact artifact, final CallContext context, final String hash, final List<Facet> facets, final Object old) {
142 78
143 final BezugswstCalculation s = new BezugswstCalculation(context); 79 final CalculationResult res = doCompute(artifact, context, old);
144 final CalculationResult res = s.calculate(artifact);
145 80
146 if (facets == null) 81 if (facets == null)
147 return res; 82 return res;
148 83
149 final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id); 84 final BezugswstCalculationResults results = (BezugswstCalculationResults) res.getData();
150 final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
151 85
152 facets.add(csv); 86 final List<AbstractCalculationExportableResult> resultList = results.getResults();
153 facets.add(pdf); 87
88 int facetIndex = 0;
89
90 if (!resultList.isEmpty()) {
91 final BezugswstMainCalculationResult result = (BezugswstMainCalculationResult) resultList.get(0);
92 facets.add(BezugswstHeightProcessor.createWFacet(context, hash, this.id, facetIndex++, 0, result.getWstLabel()));
93 facets.add(BezugswstHeightProcessor.createChannelminFacet(context, hash, this.id, facetIndex++, 0));
94 facets.add(BezugswstHeightProcessor.createBedheightFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel()));
95 facets.add(new WaterlevelFacet(facetIndex++, FacetTypes.LONGITUDINAL_Q, result.getWstLabel(), ComputeType.ADVANCE, this.id, hash));
96
97 facets.add(BezugswstDepthProcessor.createFlowdepthFilteredFacet(context, hash, this.id, facetIndex++, 0, result.getBedHeightLabel()));
98 facets.add(BezugswstDepthProcessor.createChanneldepthFacet(context, hash, this.id, facetIndex++, 0));
99
100 final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
101 final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
102
103 facets.add(csv);
104 facets.add(pdf);
105 }
106
107 final Calculation report = res.getReport();
108
109 if (report.hasProblems())
110 facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
154 111
155 return res; 112 return res;
156 } 113 }
157 114
115 private CalculationResult doCompute(final BUNDUArtifact uinfo, final CallContext context, final Object old) {
116
117 if (old instanceof CalculationResult)
118 return (CalculationResult) old;
119
120 return new BezugswstCalculation(context).calculate(uinfo);
121 }
158 } 122 }

http://dive4elements.wald.intevation.org