Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/SQOverview.java @ 3275:3570abdf7daa
SQOverview: Made km separating of dates epsilon tolerant and avoid empty date lists.
flys-artifacts/trunk@4919 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 10 Jul 2012 17:04:04 +0000 |
parents | 43e42315ce22 |
children | 4903e491992e |
comparison
equal
deleted
inserted
replaced
3274:43e42315ce22 | 3275:3570abdf7daa |
---|---|
81 } | 81 } |
82 }; | 82 }; |
83 | 83 |
84 private static Logger log = Logger.getLogger(FixingsOverview.class); | 84 private static Logger log = Logger.getLogger(FixingsOverview.class); |
85 | 85 |
86 public static final double EPSILON = 1e-1; | 86 public static final double EPSILON = 1e-4; |
87 | 87 |
88 public static final String DATE_FORMAT = "dd.MM.yyyy"; | 88 public static final String DATE_FORMAT = "dd.MM.yyyy"; |
89 | 89 |
90 public static final String SQL_SQ = | 90 public static final String SQL_SQ = |
91 "SELECT" + | 91 "SELECT" + |
92 " s.km," + | 92 " s.km AS km," + |
93 " m.datum " + | 93 " m.datum AS datum " + |
94 "FROM messung m " + | 94 "FROM messung m " + |
95 " JOIN station s" + | 95 " JOIN station s" + |
96 " on m.stationid = s.stationid " + | 96 " on m.stationid = s.stationid " + |
97 " JOIN gewaesser g " + | 97 " JOIN gewaesser g " + |
98 " on s.gewaesserid = g.gewaesserid " + | 98 " on s.gewaesserid = g.gewaesserid " + |
112 public SQOverview(String riverName) { | 112 public SQOverview(String riverName) { |
113 this(); | 113 this(); |
114 this.riverName = riverName; | 114 this.riverName = riverName; |
115 } | 115 } |
116 | 116 |
117 private static final boolean epsilonEquals(double a, double b) { | |
118 return Math.abs(a - b) < EPSILON; | |
119 } | |
120 | |
117 protected void loadData(Session session) { | 121 protected void loadData(Session session) { |
118 SQLQuery query = session.createSQLQuery(SQL_SQ) | 122 SQLQuery query = session.createSQLQuery(SQL_SQ) |
119 .addScalar("km", StandardBasicTypes.DOUBLE) | 123 .addScalar("km", StandardBasicTypes.DOUBLE) |
120 .addScalar("datum", StandardBasicTypes.DATE); | 124 .addScalar("datum", StandardBasicTypes.DATE); |
121 | 125 |
125 | 129 |
126 if (list.isEmpty()) { | 130 if (list.isEmpty()) { |
127 log.warn("No river '" + riverName + "' found."); | 131 log.warn("No river '" + riverName + "' found."); |
128 } | 132 } |
129 | 133 |
130 Double prevKm = -1d; | 134 Double prevKm = -Double.MAX_VALUE; |
131 List<Date> dates = new ArrayList<Date>(); | 135 List<Date> dates = new ArrayList<Date>(); |
132 for (int i = 0; i < list.size(); i++) { | 136 |
133 Object[] row = list.get(i); | 137 for (Object [] row: list) { |
134 Double km = (Double) row[0]; | 138 Double km = (Double)row[0]; |
135 Date date = (Date) row[1]; | 139 if (!epsilonEquals(km, prevKm) && !dates.isEmpty()) { |
136 if (km.equals(prevKm)) { | |
137 dates.add(date); | |
138 } | |
139 else { | |
140 entries.add(prevKm, dates); | 140 entries.add(prevKm, dates); |
141 dates = new ArrayList<Date>(); | 141 dates = new ArrayList<Date>(); |
142 dates.add(date); | 142 } |
143 } | 143 dates.add((Date)row[1]); |
144 prevKm = km; | 144 prevKm = km; |
145 } | |
146 | |
147 if (!dates.isEmpty()) { | |
148 entries.add(prevKm, dates); | |
145 } | 149 } |
146 } | 150 } |
147 | 151 |
148 public boolean load(Session session) { | 152 public boolean load(Session session) { |
149 | 153 |
156 public void generateOverview(Document document) { | 160 public void generateOverview(Document document) { |
157 generateOverview(document, ACCEPT); | 161 generateOverview(document, ACCEPT); |
158 } | 162 } |
159 | 163 |
160 public KMIndex<List<Date>> filter(Filter f) { | 164 public KMIndex<List<Date>> filter(Filter f) { |
165 // TODO: Apply filter | |
161 return entries; | 166 return entries; |
162 } | 167 } |
163 | 168 |
164 public void generateOverview( | 169 public void generateOverview( |
165 Document document, | 170 Document document, |