Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/DistanceOnlyPartHistoricalSelect.java @ 9406:55e3b1a8aa06
salix pdf export column added
author | gernotbelger |
---|---|
date | Wed, 15 Aug 2018 15:10:01 +0200 |
parents | 2da486c7c05f |
children | 6dd539efebb1 |
rev | line source |
---|---|
9246 | 1 /* Copyright (C) 2011, 2012, 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.artifacts.uinfo.salix; | |
10 | |
9391 | 11 import java.util.ArrayList; |
9246 | 12 import java.util.HashMap; |
13 import java.util.Iterator; | |
14 import java.util.List; | |
15 import java.util.Map; | |
16 import java.util.TreeMap; | |
17 | |
18 import org.dive4elements.artifacts.Artifact; | |
19 import org.dive4elements.artifacts.CallContext; | |
20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; | |
21 import org.dive4elements.river.artifacts.resources.Resources; | |
22 import org.dive4elements.river.artifacts.states.AddTableDataHelper; | |
23 import org.dive4elements.river.artifacts.states.DistanceOnlySelect; | |
24 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; | |
25 import org.dive4elements.river.model.BedHeight; | |
9247
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
26 import org.dive4elements.river.model.River; |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
27 import org.dive4elements.river.utils.Formatter; |
9246 | 28 import org.w3c.dom.Element; |
29 | |
30 public class DistanceOnlyPartHistoricalSelect extends DistanceOnlySelect { | |
31 | |
32 private static final long serialVersionUID = 1L; | |
33 | |
9391 | 34 private final List<BedHeight> bhs = null; |
35 private final Integer epoch = null; | |
36 private final Integer year = null; | |
37 private final Double lowerKm = null; | |
38 private final Double upperKm = null; | |
39 private final River river = null; | |
9246 | 40 |
41 @Override | |
42 protected String getUIProvider() { | |
43 return "distance_only_part_historical_panel"; | |
44 } | |
45 | |
46 @Override | |
47 protected String getTitle(final CallContext context) { | |
48 // REMARK: that is how it should be: return Resources.getMsg(context.getMeta(), getID()); | |
9271 | 49 return Resources.getMsg(context.getMeta(), "state.title.salix.historical.distance_part_state"); |
9246 | 50 } |
51 | |
52 @Override | |
53 protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { | |
54 final String datakey = "bedheights_for_part"; | |
55 | |
56 try { | |
57 if (datakey.equals(name)) { | |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9271
diff
changeset
|
58 makeDataSourceYearEpoch(creator, select, context, getBedheights(artifact)); // ist nur n test |
9246 | 59 } else if (name.equals("ld_from_part")) { |
60 | |
61 final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact); | |
62 final double lowerSoundings = this.getLowerUpperKmRange(getBedheights(artifact))[0]; | |
63 final double lowerKm = access.getLowerKm() > lowerSoundings ? access.getLowerKm() : lowerSoundings; | |
64 | |
65 creator.addAttr(select, "type", "options", true); | |
66 | |
67 final Element item = creator.create("item"); | |
68 creator.addAttr(item, "label", "from_test", true); | |
69 creator.addAttr(item, "value", String.valueOf(lowerKm), true); | |
70 | |
71 select.appendChild(item); | |
72 } | |
73 | |
74 else if (name.equals("ld_to_part")) { | |
75 final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact); | |
76 final double upperSoundings = this.getLowerUpperKmRange(getBedheights(artifact))[1]; | |
77 final double upperKm = access.getUpperKm() < upperSoundings ? access.getUpperKm() : upperSoundings; | |
78 | |
79 creator.addAttr(select, "type", "options", true); | |
80 | |
81 final Element item = creator.create("item"); | |
82 creator.addAttr(item, "label", "to_test", true); | |
83 creator.addAttr(item, "value", String.valueOf(upperKm), true); | |
84 | |
85 select.appendChild(item); | |
86 | |
87 } | |
88 } | |
89 catch ( | |
90 | |
9372 | 91 final IllegalArgumentException iae) { |
9246 | 92 iae.printStackTrace(); |
93 } | |
94 } | |
95 | |
96 private List<BedHeight> getBedheights(final Artifact artifact) { | |
9391 | 97 final List<BedHeight> list = new ArrayList<>(); |
98 list.add(new SalixLineAccess((UINFOArtifact) artifact).getBedHeight()); | |
99 return list; | |
9246 | 100 |
101 } | |
102 | |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9271
diff
changeset
|
103 private static final void makeDataSourceYearEpoch(final ElementCreator creator, final Element select, final CallContext context, |
9246 | 104 final List<BedHeight> bedheights) { |
105 | |
106 final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); | |
107 | |
9247
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
108 // TODO: probably aggregating results, no sound-row, output as single row |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
109 |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
110 int year = 0; // hässlich, aber kommt vermutlich eh bald weg |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
111 if (bedheights != null && bedheights.size() > 0) |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
112 year = bedheights.get(0).getYear(); // das jahr/epoche ist immer dasselbe |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
113 |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
114 helper.addColumn(0, "year", "60", "year", "INTEGER", "LEFT", null); |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
115 helper.addColumn(1, "range", "130", "state.uinfo.salix.historical.km_range_part", "STRING", "LEFT", null); |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
116 helper.addColumn(2, "description", "500", "uinfo.salix.sounding", "STRING", "LEFT", null); |
9246 | 117 |
118 final TreeMap<String, String> bedHeightSorted = new TreeMap<>(); | |
9247
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
119 final java.text.NumberFormat formatter = Formatter.getCalculationKm(context.getMeta()); |
9246 | 120 |
121 for (final BedHeight bh : bedheights) { | |
122 final org.dive4elements.river.model.Range range = BedHeight.getRangeFromBedHeights(bh); | |
123 final Double from = range.getA().doubleValue(); // NullPointer check?? | |
124 final Double to = range.getB().doubleValue(); | |
125 | |
9247
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
126 bedHeightSorted.put(bh.getDescription(), formatter.format(from) + " - " + formatter.format(to)); |
9246 | 127 } |
128 final Iterator<String> iterator = bedHeightSorted.keySet().iterator(); | |
129 while (iterator.hasNext()) { | |
130 final String descr = iterator.next(); | |
131 final String fromTo = bedHeightSorted.get(descr); | |
132 final Map<String, String> row = new HashMap<>(); | |
9247
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
133 row.put("year", String.valueOf(year)); |
1ec3b891ab02
salix.historical.distance_only_part detail work
gernotbelger
parents:
9246
diff
changeset
|
134 row.put("range", fromTo); |
9246 | 135 row.put("description", descr); |
136 helper.addRow(row); | |
137 } | |
138 | |
139 helper.submitMapToXml(); | |
140 } | |
141 | |
142 private double[] getLowerUpperKmRange(final List<BedHeight> bedheights) { | |
143 double min = Double.MAX_VALUE; | |
144 double max = -Double.MAX_VALUE; | |
145 | |
146 for (final BedHeight bh : bedheights) { | |
147 final org.dive4elements.river.model.Range range = BedHeight.getRangeFromBedHeights(bh); | |
148 try { | |
149 final Double from = range.getA().doubleValue(); // NullPointer check?? -> try catch | |
150 final Double to = range.getB().doubleValue(); | |
151 | |
152 final double upper = to > from ? to : from; | |
153 final double lower = from < to ? from : to; | |
154 if (upper > max) | |
155 max = upper; | |
156 | |
157 if (lower < min) | |
158 min = lower; | |
159 } | |
160 catch (final Exception e) { | |
161 e.printStackTrace(); | |
162 } | |
163 | |
164 } | |
165 return new double[] { min, max }; | |
166 } | |
9372 | 167 |
168 @Override | |
169 public boolean validate(final Artifact artifact) { | |
170 return true; // validation on client side! | |
171 } | |
172 | |
9321
a978b601a034
Salix: Fixed ArrrayoutOfBoundsException; minor cleanup
gernotbelger
parents:
9271
diff
changeset
|
173 } |