Mercurial > dive4elements > river
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 : |