diff flys-client/src/main/java/de/intevation/flys/client/server/ChartInfoServiceImpl.java @ 561:460b8e0f0563

Parse the min/max axes ranges for the ChartInfo and modified the zoom and pan actions to match the current server implementation. flys-client/trunk@2096 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 09 Jun 2011 10:57:42 +0000
parents 046f43e1d305
children ab8eb2f544f2
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/server/ChartInfoServiceImpl.java	Thu Jun 09 06:05:44 2011 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/ChartInfoServiceImpl.java	Thu Jun 09 10:57:42 2011 +0000
@@ -2,6 +2,8 @@
 
 import java.io.InputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.xpath.XPathConstants;
@@ -39,7 +41,7 @@
 implements   ChartInfoService
 {
     public static final String XPATH_TRANSFORM_MATRIX =
-        "/art:chartinfo/art:transformation-matrix";
+        "/art:chartinfo/art:transformation-matrix/art:matrix";
 
     public static final String XPATH_X_AXES =
         "/art:chartinfo/art:axes/art:domain";
@@ -91,9 +93,9 @@
 
 
     protected ChartInfo parseInfoDocument(Document doc) {
-        Transform2D transformer = parseTransformationMatrix(doc);
-        Axis[]      xAxes       = parseXAxes(doc);
-        Axis[]      yAxes       = parseYAxes(doc);
+        Transform2D[] transformer = parseTransformationMatrix(doc);
+        Axis[]      xAxes         = parseXAxes(doc);
+        Axis[]      yAxes         = parseYAxes(doc);
 
         return new ChartInfo(xAxes, yAxes, transformer);
     }
@@ -150,10 +152,18 @@
             String toStr = XMLUtils.xpathString(
                 node, "@art:to", ArtifactNamespaceContext.INSTANCE);
 
+            String minStr = XMLUtils.xpathString(
+                node, "@art:min", ArtifactNamespaceContext.INSTANCE);
+
+            String maxStr = XMLUtils.xpathString(
+                node, "@art:max", ArtifactNamespaceContext.INSTANCE);
+
             try {
                 int    pos  = Integer.parseInt(posStr);
                 double from = Double.parseDouble(fromStr);
                 double to   = Double.parseDouble(toStr);
+                double min  = Double.parseDouble(minStr);
+                double max  = Double.parseDouble(maxStr);
 
                 if (pos >= result.length) {
                     // this should never happen
@@ -161,7 +171,7 @@
                     continue;
                 }
 
-                result[pos] = new Axis(pos, from, to);
+                result[pos] = new Axis(pos, from, to, min, max);
             }
             catch (NumberFormatException nfe) {
                 nfe.printStackTrace();
@@ -182,19 +192,35 @@
      * @return a Transform2D object to transfrom pixel coordinates into chart
      * coordinates.
      */
-    protected Transform2D parseTransformationMatrix(Document doc) {
+    protected Transform2D[] parseTransformationMatrix(Document doc) {
         System.out.println("ChartInfoServiceImpl.parseTransformationMatrix");
 
-        Node matrix = (Node) XMLUtils.xpath(
+        NodeList matrix = (NodeList) XMLUtils.xpath(
             doc,
             XPATH_TRANSFORM_MATRIX,
-            XPathConstants.NODE,
+            XPathConstants.NODESET,
             ArtifactNamespaceContext.INSTANCE);
 
-        if (matrix == null) {
-            return new Transform2D(1d, 1d, 0d, 0d);
+        int num = matrix != null ? matrix.getLength() : 0;
+
+        List<Transform2D> transformer = new ArrayList<Transform2D>(num);
+
+        for (int i = 0; i < num; i++) {
+            Transform2D t = createTransformer(matrix.item(i));
+
+            if (t == null) {
+                System.err.println("Broken transformation matrix at pos: " + i);
+                continue;
+            }
+
+            transformer.add(t);
         }
 
+        return (Transform2D[]) transformer.toArray(new Transform2D[num]);
+    }
+
+
+    protected Transform2D createTransformer(Node matrix) {
         String sx = XMLUtils.xpathString(
             matrix, "@art:sx", ArtifactNamespaceContext.INSTANCE);
 

http://dive4elements.wald.intevation.org