diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java @ 2565:72f77b2210c2

FixingsOverview: Added XSL transformation which directly converts the output of the fixings overview service into an HTML representation. flys-artifacts/trunk@4091 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 21 Feb 2012 18:22:06 +0000
parents 3f038d54bc87
children 938e2f6c0c9a
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java	Mon Feb 20 19:13:19 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java	Tue Feb 21 18:22:06 2012 +0000
@@ -40,16 +40,6 @@
         "WHERE" +
         "    name = :name";
 
-    public static final String SQL_RIVER_EXTENT =
-        "SELECT" +
-        "    MIN(wcv.position) AS start_km," +
-        "    MAX(wcv.position) AS end_km " +
-        "FROM wst_column_values wcv" +
-        "    JOIN wst_columns wc ON wcv.wst_column_id = wc.id " +
-        "    JOIN wsts        w  ON wc.wst_id = w.id " +
-        "WHERE" +
-        "    w.kind = 0 AND w.river_id = :river_id";
-
     public static final String SQL_GAUGES =
         "SELECT" +
         "    g.id AS gauge_id," +
@@ -153,6 +143,11 @@
             return !disjoint(other);
         }
 
+        public void extend(Range other) {
+            if (other.start < start) start = other.start;
+            if (other.end   > end  ) end   = other.end;
+        }
+
         public boolean clip(Range other) {
             if (disjoint(other)) return false;
 
@@ -539,6 +534,12 @@
             }
         }
 
+        public void adjustExtent(Range extent) {
+            for (Column column: columns) {
+                extent.extend(column);
+            }
+        }
+
         public void loadColumnsQRanges(
             SQLQuery    query,
             GaugeFinder gaugeFinder
@@ -570,6 +571,7 @@
 
     public FixingsOverview() {
         fixings = new ArrayList<Fixing>();
+        extent  = new Range(Double.MAX_VALUE, -Double.MAX_VALUE);
     }
 
     public FixingsOverview(String riverName) {
@@ -599,26 +601,6 @@
         return true;
     }
 
-    protected boolean loadRiverExtent(Session session) {
-        SQLQuery query = session.createSQLQuery(SQL_RIVER_EXTENT)
-            .addScalar("start_km", StandardBasicTypes.DOUBLE)
-            .addScalar("end_km",   StandardBasicTypes.DOUBLE);
-
-        query.setInteger("river_id", riverId);
-
-        List<Object []> list = query.list();
-
-        if (list.isEmpty()) {
-            log.warn("River " + riverId + " has no extent.");
-            return false;
-        }
-
-        Object [] row = list.get(0);
-        extent = new Range((Double)row[0], (Double)row[1]);
-
-        return true;
-    }
-
     protected GaugeFinder loadGauges(Session session) {
         SQLQuery query = session.createSQLQuery(SQL_GAUGES)
             .addScalar("gauge_id", StandardBasicTypes.INTEGER)
@@ -705,10 +687,15 @@
         }
     }
 
+    protected void adjustExtent() {
+        for (Fixing fixing: fixings) {
+            fixing.adjustExtent(extent);
+        }
+    }
+
     public boolean load(Session session) {
 
-        if (!loadRiver(session)
-        ||  !loadRiverExtent(session)) {
+        if (!loadRiver(session)) {
             return false;
         }
 
@@ -722,6 +709,9 @@
         loadFixings(session);
         loadFixingsColumns(session);
         loadFixingsColumnsKmRange(session);
+
+        adjustExtent();
+
         loadFixingsColumnsQRanges(session, gaugeFinder);
 
         return true;
@@ -883,6 +873,7 @@
         riverElement.setAttribute("from", String.valueOf(extent.start));
         riverElement.setAttribute("to",   String.valueOf(extent.end));
         riverElement.setAttribute("rid",  String.valueOf(riverId));
+        riverElement.setAttribute("name", riverName);
 
         fixingsElement.appendChild(riverElement);
 

http://dive4elements.wald.intevation.org