comparison flys-client/src/main/java/de/intevation/flys/client/server/ChartInfoServiceImpl.java @ 535:017371801479

Added a chart info service to fetch the info document for a specific chart from artifact server. flys-client/trunk@2033 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 01 Jun 2011 08:15:58 +0000
parents
children fe2860653f8d
comparison
equal deleted inserted replaced
534:e08777967bad 535:017371801479
1 package de.intevation.flys.client.server;
2
3 import java.io.InputStream;
4 import java.io.IOException;
5
6 import javax.xml.xpath.XPathConstants;
7
8 import org.w3c.dom.Document;
9 import org.w3c.dom.Element;
10 import org.w3c.dom.Node;
11
12 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
13
14 import de.intevation.artifacts.common.ArtifactNamespaceContext;
15 import de.intevation.artifacts.common.utils.ClientProtocolUtils;
16 import de.intevation.artifacts.common.utils.XMLUtils;
17 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
18
19 import de.intevation.artifacts.httpclient.http.HttpClient;
20 import de.intevation.artifacts.httpclient.http.HttpClientImpl;
21
22 import de.intevation.flys.client.shared.Transform2D;
23 import de.intevation.flys.client.shared.exceptions.ServerException;
24 import de.intevation.flys.client.shared.model.Collection;
25
26 import de.intevation.flys.client.client.services.ChartInfoService;
27
28
29 /**
30 * This service fetches a document that contains meta information for a specific
31 * chart.
32 *
33 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
34 */
35 public class ChartInfoServiceImpl
36 extends RemoteServiceServlet
37 implements ChartInfoService
38 {
39 public static final String XPATH_TRANSFORM_MATRIX =
40 "/art:chartinfo/art:transformation-matrix";
41
42 public static final String EXCEPTION_STRING = "error_chart_info_service";
43
44
45 public Transform2D getChartInfo(
46 Collection collection,
47 String url,
48 String locale,
49 String type,
50 int width,
51 int height)
52 throws ServerException
53 {
54 System.out.println("ChartInfoServiceImpl.getChartInfo");
55
56 Document request = ClientProtocolUtils.newOutCollectionDocument(
57 collection.identifier(),
58 type,
59 type,
60 getChartAttributes(width, height));
61
62 try {
63 HttpClient client = new HttpClientImpl(url, locale);
64 InputStream in = client.collectionOut(
65 request,
66 collection.identifier(),
67 type + "_chartinfo");
68
69 Document info = XMLUtils.parseDocument(in);
70
71 return parseInfoDocument(info);
72 }
73 catch (IOException ioe) {
74 // do nothing
75 }
76
77 System.err.println("Error while fetching chart info.");
78
79 throw new ServerException(EXCEPTION_STRING);
80 }
81
82
83 /**
84 * This method returns a document which might contain parameters to adjust
85 * chart settings. The document is created using the information that are
86 * contained in the request object.
87 *
88 * @param req The request document.
89 *
90 * @return a document to adjust chart settings.
91 */
92 protected Document getChartAttributes(int width, int height) {
93 Document doc = XMLUtils.newDocument();
94
95 ElementCreator ec = new ElementCreator(
96 doc,
97 ArtifactNamespaceContext.NAMESPACE_URI,
98 ArtifactNamespaceContext.NAMESPACE_PREFIX);
99
100 Element size = ec.create("size");
101
102 ec.addAttr(size, "width", String.valueOf(width), true);
103 ec.addAttr(size, "height", String.valueOf(height), true);
104
105 doc.appendChild(size);
106
107 return doc;
108 }
109
110
111 /**
112 * Parses the chart info document and extract the Transform2D values.
113 *
114 * @param doc The chart info document.
115 *
116 * @return a Transform2D object to transfrom pixel coordinates into chart
117 * coordinates.
118 */
119 protected Transform2D parseInfoDocument(Document doc) {
120 System.out.println("ChartInfoServiceImpl.parseInfoDocument");
121
122 XMLDebug.out(doc);
123
124 Node matrix = (Node) XMLUtils.xpath(
125 doc,
126 XPATH_TRANSFORM_MATRIX,
127 XPathConstants.NODE,
128 ArtifactNamespaceContext.INSTANCE);
129
130 if (matrix == null) {
131 return new Transform2D(1d, 1d, 0d, 0d);
132 }
133
134 String sx = XMLUtils.xpathString(
135 matrix, "@art:sx", ArtifactNamespaceContext.INSTANCE);
136
137 String sy = XMLUtils.xpathString(
138 matrix, "@art:sy", ArtifactNamespaceContext.INSTANCE);
139
140 String tx = XMLUtils.xpathString(
141 matrix, "@art:tx", ArtifactNamespaceContext.INSTANCE);
142
143 String ty = XMLUtils.xpathString(
144 matrix, "@art:ty", ArtifactNamespaceContext.INSTANCE);
145
146 if (sx != null && sy != null && tx != null && ty != null) {
147 try {
148 return new Transform2D(
149 Double.parseDouble(sx),
150 Double.parseDouble(sy),
151 Double.parseDouble(tx),
152 Double.parseDouble(ty));
153 }
154 catch (NumberFormatException nfe) {
155 System.err.println("Error while parsing matrix values.");
156 }
157 }
158
159 System.err.println("No matrix values found.");
160
161 return new Transform2D(1d, 1d, 0d, 0d);
162 }
163 }
164 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org