# HG changeset patch # User Felix Wolfsteller # Date 1327052323 0 # Node ID 8c9c40459d8f179d8566f982758bdf639e9fdc35 # Parent ce9b15673f3f537bc7eebbf30eff6f3ed599dcac Respect rivers flow direction when looking for hyk-formations. flys-artifacts/trunk@3738 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r ce9b15673f3f -r 8c9c40459d8f flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Jan 20 09:18:56 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri Jan 20 09:38:43 2012 +0000 @@ -1,3 +1,9 @@ +2012-01-20 Felix Wolfsteller + + * src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java: + Respect flowing direction of river when finding valid + hykformations. + 2012-01-20 Raimund Renkert * src/main/java/de/intevation/flys/artifacts/states/WaterlevelState.java: diff -r ce9b15673f3f -r 8c9c40459d8f flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java Fri Jan 20 09:18:56 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java Fri Jan 20 09:38:43 2012 +0000 @@ -15,6 +15,7 @@ import org.hibernate.Query; import org.hibernate.Session; +import de.intevation.flys.model.HYK; import de.intevation.flys.model.HYKFormation; import de.intevation.flys.model.HYKFlowZone; @@ -72,13 +73,12 @@ } + /** Return name for hyk with given id. */ public static String getHykName(int hykid) { logger.debug("HYKFactory.getHykName " + hykid); Session session = SessionHolder.HOLDER.get(); - // TODO respect interval better. respect multiples (sort, limit), - // TODO respect flow direction of river. Query query = session.createQuery( "select description from HYK where id = :hykid "); query.setParameter("hykid", hykid); @@ -88,13 +88,11 @@ /** - * - * @param column the position columns value - * @param wst_id database id of the wst - * @return according WKms. + * Ask DB for hyk zones. + * @param hykid ID of the 'main' HYK to query. + * @param km for which to get the hyk-zones. + * @return according zones. */ - // TODO we also need to know the HYK-id to specify which set we are - // inspecting. public static List getZonesUncached(int hykid, double km) { if (logger.isDebugEnabled()) { @@ -103,20 +101,30 @@ Session session = SessionHolder.HOLDER.get(); - // TODO respect interval better. respect multiples (sort, limit), - // TODO respect flow direction of river. + // Find out flow-direction of river. + // OPTIMIZE: 1) query kmUp directly 2) merge queries. + Query rQuery = session.createQuery("from HYK where id = :hykid"); + rQuery.setParameter("hykid", hykid); + rQuery.setMaxResults(1); + HYK hyk = (HYK) rQuery.uniqueResult(); + BigDecimal flowDir = (hyk.getRiver().getKmUp()) ? new BigDecimal(1) : new BigDecimal(-1); + + // Query HYKFormations in range. Query query = session.createQuery( "from HYKFormation where entry.HYK.id = :hykid " + - " and :km between entry.km - cast(distance_vl/1000.0 + 0.001 as big_decimal) and " + - " entry.km + cast(distance_vl/1000.0 + 0.001 as big_decimal)" + + " and :km between entry.km and " + + " entry.km + :flowDir * "+ + " cast(distance_vl/1000.0 + 0.001 as big_decimal)" + " order by entry.km asc"); - query.setParameter("hykid", hykid); - query.setParameter("km", new BigDecimal(km)); + query.setParameter("hykid", hykid); + query.setParameter("km", new BigDecimal(km)); + query.setParameter("flowDir", flowDir); + query.setMaxResults(1); List forms = query.list(); List zones = new ArrayList(); - // TODO limit query by one; sensible sorting. + // Take the first one. if (forms.size() >= 1) { HYKFormation form = forms.get(0);