Mercurial > dive4elements > river
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);