Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java @ 4045:de6e2b933f33
Fix for ArrayIndexOutOfBoundsException (#818).
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Sat, 06 Oct 2012 00:25:28 +0200 |
parents | deeda39ef01b |
children | d65cf8e40230 |
comparison
equal
deleted
inserted
replaced
4044:7eebd9e58641 | 4045:de6e2b933f33 |
---|---|
1 package de.intevation.flys.artifacts.model; | 1 package de.intevation.flys.artifacts.model; |
2 | 2 |
3 import de.intevation.artifactdatabase.state.Facet; | 3 import de.intevation.artifactdatabase.state.Facet; |
4 | |
5 import de.intevation.artifacts.Artifact; | 4 import de.intevation.artifacts.Artifact; |
6 import de.intevation.artifacts.CallContext; | 5 import de.intevation.artifacts.CallContext; |
7 | |
8 import de.intevation.flys.artifacts.FLYSArtifact; | 6 import de.intevation.flys.artifacts.FLYSArtifact; |
9 | 7 import de.intevation.flys.artifacts.math.Linear; |
10 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; | 8 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; |
11 import de.intevation.flys.artifacts.math.Linear; | |
12 | 9 |
13 import org.apache.log4j.Logger; | 10 import org.apache.log4j.Logger; |
14 | 11 |
15 /** | 12 /** |
16 * Facet of a Waterlevel (WQKms). | 13 * Facet of a Waterlevel (WQKms). |
43 | 40 |
44 /** | 41 /** |
45 * Get waterlevel data. | 42 * Get waterlevel data. |
46 * @return a WQKms at given index. | 43 * @return a WQKms at given index. |
47 */ | 44 */ |
45 @Override | |
48 public Object getData(Artifact artifact, CallContext context) { | 46 public Object getData(Artifact artifact, CallContext context) { |
49 | 47 |
50 if (logger.isDebugEnabled()) { | 48 if (logger.isDebugEnabled()) { |
51 logger.debug("Get data for waterlevels at index: " + index + | 49 logger.debug("Get data for waterlevels at index: " + index + |
52 " /stateId: " + stateId); | 50 " /stateId: " + stateId); |
51 } | |
52 | |
53 if (artifact == null) { | |
54 logger.error("WaterlevelFacet.getData: artifact is null"); | |
55 return null; | |
53 } | 56 } |
54 | 57 |
55 FLYSArtifact winfo = (FLYSArtifact) artifact; | 58 FLYSArtifact winfo = (FLYSArtifact) artifact; |
56 | 59 |
57 CalculationResult res = (CalculationResult) | 60 CalculationResult res = (CalculationResult) |
58 winfo.compute(context, hash, stateId, type, false); | 61 winfo.compute(context, hash, stateId, type, false); |
59 | 62 |
60 if (res == null) { | 63 if (res == null) { |
61 logger.error("WaterlevelFacet.getData: null result"); | 64 logger.error("WaterlevelFacet.getData: null result"); |
62 return null; | |
63 } | |
64 | |
65 if (winfo == null) { | |
66 logger.error("WaterlevelFacet.getData: artifact is null"); | |
67 return null; | 65 return null; |
68 } | 66 } |
69 | 67 |
70 WQKms [] wqkms = getWQKms(res); | 68 WQKms [] wqkms = getWQKms(res); |
71 Object KM = context.getContextValue("currentKm"); | 69 Object KM = context.getContextValue("currentKm"); |
90 idx = size-1; | 88 idx = size-1; |
91 while (idx > 0 && wqkmsI.getKm(idx) > km) { | 89 while (idx > 0 && wqkmsI.getKm(idx) > km) { |
92 idx--; | 90 idx--; |
93 } | 91 } |
94 } | 92 } |
93 | |
95 WQKms resultWQKms = new WQKms(); | 94 WQKms resultWQKms = new WQKms(); |
96 if (idx != -1 && idx < size) { | 95 if ((idx != -1) && (idx < size) && (idx - mod != -1) && (idx - mod < size)) { |
97 double inW = Linear.linear( | 96 double inW = Linear.linear( |
98 km, | 97 km, |
99 wqkmsI.getKm(idx), wqkmsI.getKm(idx-mod), | 98 wqkmsI.getKm(idx), wqkmsI.getKm(idx - mod), |
100 wqkmsI.getW(idx), wqkmsI.getW(idx-mod)); | 99 wqkmsI.getW(idx), wqkmsI.getW(idx - mod)); |
101 double inQ = Linear.linear( | 100 double inQ = Linear.linear( |
102 km, | 101 km, |
103 wqkmsI.getKm(idx), wqkmsI.getKm(idx-mod), | 102 wqkmsI.getKm(idx), wqkmsI.getKm(idx - mod), |
104 wqkmsI.getQ(idx), wqkmsI.getQ(idx-mod)); | 103 wqkmsI.getQ(idx), wqkmsI.getQ(idx - mod)); |
105 resultWQKms.add(inW, inQ, km); | 104 resultWQKms.add(inW, inQ, km); |
106 } | 105 } |
106 | |
107 return resultWQKms; | 107 return resultWQKms; |
108 } | 108 } |
109 | 109 |
110 return wqkms != null ? wqkms[index] : null; | 110 return wqkms != null ? wqkms[index] : null; |
111 } | 111 } |