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,

http://dive4elements.wald.intevation.org