changeset 2139:923256599afe

Somewhat improved hyk handling and rendering. flys-artifacts/trunk@3717 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Thu, 19 Jan 2012 12:52:44 +0000
parents 59bb5c895be3
children 3d73109005b8
files flys-artifacts/ChangeLog flys-artifacts/src/main/java/de/intevation/flys/artifacts/HYKArtifact.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/StaticHYKState.java
diffstat 4 files changed, 80 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/ChangeLog	Thu Jan 19 11:00:27 2012 +0000
+++ b/flys-artifacts/ChangeLog	Thu Jan 19 12:52:44 2012 +0000
@@ -1,3 +1,18 @@
+2012-01-19	Felix Wolfsteller	<felix.wolfsteller@intevation.de>
+
+	Somewhat improved HYK handling and rendering.
+
+	* src/main/java/de/intevation/flys/artifacts/HYKArtifact.java:
+	  Store ids in more sensibly named data item and expose it.
+	  Spawn all facets in inactive state.
+
+	* src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java:
+	  Make HYK name accessible, do not query hyks by river, but by hyk-id,
+	  made query more real-world.
+	
+	* src/main/java/de/intevation/flys/artifacts/states/StaticHYKState.java:
+	  Use hyks name as facet name, pass hyk-id when asking for hyks.
+
 2012-01-19	Felix Wolfsteller	<felix.wolfsteller@intevation.de>
 
 	Somewhat improved HYK handling and rendering.
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/HYKArtifact.java	Thu Jan 19 11:00:27 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/HYKArtifact.java	Thu Jan 19 12:52:44 2012 +0000
@@ -30,6 +30,9 @@
     /** Name of Artifact. */
     public static final String HYK_ARTIFACT_NAME = "hyk";
 
+    /** Name of data item keeping the hyk id to load formations from. */
+    public static final String HYK_ID = "hyk_artifact.data.id";
+
     /** Name of data item keeping the km of cs master. */
     public static final String HYK_KM = "hyk_artifact.data.km";
 
@@ -56,12 +59,15 @@
     {
         logger.info("HYKArtifact.setup");
 
-        super.setup(identifier, factory, context, callMeta, data);
 
         String ids = XMLUtils.xpathString(
             data, XPATH_IDS, ArtifactNamespaceContext.INSTANCE);
 
-        addStringData("ids", ids);
+        logger.info("HYKArtifact.setup: id is " + ids);
+
+        addStringData(HYK_ID, ids);
+
+        super.setup(identifier, factory, context, callMeta, data);
     }
 
 
@@ -96,6 +102,11 @@
         return getDataAsDouble(HYK_KM);
     }
 
+    /** Get hyk-id from state data. */
+    public int getHykId() {
+        return getDataAsInteger(HYK_ID);
+    }
+
     /** Do not copy data from daddyfact. */
     @Override
     protected void initialize(
@@ -120,5 +131,25 @@
                 + state.getID() + ").");
         }
     }
+
+
+    /**
+     * Determines Facets initial disposition regarding activity (think of
+     * selection in Client ThemeList GUI). This will be checked one time
+     * when the facet enters a collections describe document.
+     *
+     * @param facetName name of the facet.
+     * @param index     index of the facet.
+     *
+     * @return Always 0. Hyk Data will enter plots inactive.
+     */
+    @Override
+    public int getInitialFacetActivity(
+        String outputName,
+        String facetName,
+        int index)
+    {
+        return 0;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java	Thu Jan 19 11:00:27 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java	Thu Jan 19 12:52:44 2012 +0000
@@ -39,7 +39,7 @@
     /**
      * Get List of Zones for given river and km.
      */
-    public static Object getHYKs(int riverId, double km) {
+    public static Object getHYKs(int hykid, double km) {
         logger.debug("HYKFactory.getHYKs");
 
         Cache cache = CacheFactory.getCache(HYK_CACHE_NAME);
@@ -47,7 +47,7 @@
         String cacheKey;
 
         if (cache != null) {
-            cacheKey = "" + riverId + "_" + km;
+            cacheKey = "" + hykid + "_" + km;
             Element element = cache.get(cacheKey);
             if (element != null) {
                 logger.debug("Got hyk from cache");
@@ -58,7 +58,7 @@
             cacheKey = null;
         }
 
-        List<Zone> zones = getZonesUncached(riverId, km);
+        List<Zone> zones = getZonesUncached(hykid, km);
 
         if (zones != null && cacheKey != null) {
             logger.debug("Store hykzones in cache.");
@@ -70,6 +70,21 @@
     }
 
 
+    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);
+
+        return (String) query.uniqueResult();
+    }
+
+
     /**
      * 
      * @param column the position columns value
@@ -78,10 +93,10 @@
      */
     // TODO we also need to know the HYK-id to specify which set we are
     //      inspecting.
-    public static List<Zone> getZonesUncached(int riverId, double km) {
+    public static List<Zone> getZonesUncached(int hykid, double km) {
 
         if (logger.isDebugEnabled()) {
-            logger.debug("HYKFactory.getZoneUncached " + riverId + " km " + km);
+            logger.debug("HYKFactory.getZoneUncached " + hykid + " km " + km);
         }
 
         Session session = SessionHolder.HOLDER.get();
@@ -89,21 +104,20 @@
         // TODO respect interval better. respect multiples (sort, limit),
         // TODO respect flow direction of river.
         Query query = session.createQuery(
-            "from HYKFormation where entry.HYK.river.id = :riverid " +
-            " and entry.km between " +
-                ":km - cast(distance_vl/1000.0 - 0.001 as big_decimal) and " +
-                ":km + cast(distance_vl/1000.0 + 0.001 as big_decimal)");
-        query.setParameter("riverid", riverId);
+            "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)" +
+            " order by entry.km asc");
+        query.setParameter("hykid", hykid);
         query.setParameter("km", new BigDecimal(km));
         logger.debug("Big km " + new BigDecimal(km));
         List<HYKFormation> forms = query.list();
 
         List<Zone> zones = new ArrayList<Zone>();
-        for (HYKFormation form : forms) {
-            logger.debug("One HYKFormation found (entry: "
-                + form.getEntry().getId()
-                + ") /km " + form.getEntry().getKm() + ".");
-
+        // TODO limit query by one; sensible sorting.
+        // Take the first one.
+        if (forms.size() >= 1) {
+            HYKFormation form = forms.get(0);
             // Create respective zones.
             for (HYKFlowZone flowZone: form.getZones()) {
                 Zone z = new Zone(flowZone.getA().doubleValue(),
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/StaticHYKState.java	Thu Jan 19 11:00:27 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/StaticHYKState.java	Thu Jan 19 12:52:44 2012 +0000
@@ -27,7 +27,7 @@
 implements   FacetTypes
 {
     /** The logger that is used in this state. */
-    private static Logger logger = Logger.getLogger(StaticHYKState.class);
+    transient private static final Logger logger = Logger.getLogger(StaticHYKState.class);
 
 
     /**
@@ -69,14 +69,14 @@
 
         // Need river id and km.
         List<HYKFactory.Zone> zones = (List<HYKFactory.Zone>)
-            HYKFactory.getHYKs(FLYSUtils.getRiver(hyk).getId(), hyk.getKm());
+            HYKFactory.getHYKs(hyk.getHykId(), hyk.getKm());
 
         if (facets == null) {
             logger.debug("StaticHYKState.compute no facets");
             return zones;
         }
 
-        Facet facet = new HYKFacet(0, "I am hyked.");
+        Facet facet = new HYKFacet(0, HYKFactory.getHykName(hyk.getHykId()));
 
         facets.add(facet);
 

http://dive4elements.wald.intevation.org