Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityDistanceSelect.java @ 8682:5102733c4567
issue1755 Prevent out of bounds access when there is no data
If there is no data it will default to the complete river.
In the following overview you can then see that there is no
data. Better then a "Error changing state".
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 13 Apr 2015 11:03:00 +0200 |
parents | 39ce099a6551 |
children | 1116079e6624 |
rev | line source |
---|---|
8613
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013, 2015 by Bundesanstalt für Gewässerkunde |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
3 * |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
7 */ |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
8 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
9 package org.dive4elements.river.artifacts.states.minfo; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
10 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
11 import java.util.Date; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
12 import java.util.List; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
13 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
14 import org.w3c.dom.Element; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
15 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
16 import org.apache.log4j.Logger; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
17 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
18 import org.dive4elements.river.artifacts.D4EArtifact; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.access.RiverAccess; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.states.DistanceSelect; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
21 import org.dive4elements.river.utils.KMIndex; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
22 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
23 import org.dive4elements.river.artifacts.model.minfo.BedOverview; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
24 import org.dive4elements.river.artifacts.model.minfo.BedOverviewFactory; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
25 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
26 import org.dive4elements.artifacts.common.utils.XMLUtils; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
27 import org.dive4elements.artifacts.Artifact; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
28 import org.dive4elements.artifacts.CallContext; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
29 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
30 import org.dive4elements.artifactdatabase.data.StateData; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
31 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
32 /** Extended Distance Select with default values appropiate for BedQuality */ |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
33 public class BedQualityDistanceSelect extends DistanceSelect { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
34 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
35 private static Logger log = Logger.getLogger(BedQualityDistanceSelect.class); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
36 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
37 /** |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
38 * The default constructor that initializes an empty State object. |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
39 */ |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
40 public BedQualityDistanceSelect() { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
41 } |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
42 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
43 @Override |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
44 protected Element createData( |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
45 XMLUtils.ElementCreator cr, |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
46 Artifact artifact, |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
47 StateData data, |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
48 CallContext context) |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
49 { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
50 Element ele = super.createData(cr, artifact, data, context); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
51 if (!data.getName().equals("ld_from") && !data.getName().equals("ld_to")) { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
52 return ele; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
53 } |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
54 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
55 D4EArtifact arti = (D4EArtifact) artifact; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
56 RiverAccess access = new RiverAccess(arti); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
57 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
58 /* Bit of an overkill here but it will be cached and accessed |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
59 * in the next state anyway. */ |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
60 BedOverview overview = BedOverviewFactory.getOverview(access.getRiverName()); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
61 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
62 if (overview == null) { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
63 log.warn("No overview found for river '" + access.getRiverName() + "'"); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
64 return ele; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
65 } |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
66 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
67 KMIndex<List<Date>> entries = overview.filter(BedOverview.ACCEPT); |
8682
5102733c4567
issue1755 Prevent out of bounds access when there is no data
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8613
diff
changeset
|
68 if (entries.size() == 0) { |
5102733c4567
issue1755 Prevent out of bounds access when there is no data
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8613
diff
changeset
|
69 log.warn("No data found for river '" + access.getRiverName() + "'"); |
5102733c4567
issue1755 Prevent out of bounds access when there is no data
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8613
diff
changeset
|
70 return ele; |
5102733c4567
issue1755 Prevent out of bounds access when there is no data
Andre Heinecke <andre.heinecke@intevation.de>
parents:
8613
diff
changeset
|
71 } |
8613
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
72 entries.sort(); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
73 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
74 if (data.getName().equals("ld_from")) { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
75 cr.addAttr(ele, "defaultLabel", data.getName(), true); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
76 cr.addAttr(ele, "defaultValue", Double.toString(entries.get(0).getKm()), true); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
77 } else if (data.getName().equals("ld_to")) { |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
78 cr.addAttr(ele, "defaultLabel", data.getName(), true); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
79 cr.addAttr(ele, "defaultValue", Double.toString(entries.get(entries.size()-1).getKm()), true); |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
80 } |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
81 |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
82 return ele; |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
83 } |
39ce099a6551
(issue1755) Add good defaults for bedquality distance selection
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff
changeset
|
84 } |