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 }

http://dive4elements.wald.intevation.org