Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/server/MapInfoServiceImpl.java @ 828:910b03de6857
Added a service to get some basic spatial information used for map creation.
flys-client/trunk@2529 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 23 Aug 2011 09:43:12 +0000 |
parents | |
children | ab8eb2f544f2 |
comparison
equal
deleted
inserted
replaced
827:bd56dc762e7f | 828:910b03de6857 |
---|---|
1 package de.intevation.flys.client.server; | |
2 | |
3 import org.w3c.dom.Document; | |
4 import org.w3c.dom.Element; | |
5 | |
6 import com.google.gwt.user.server.rpc.RemoteServiceServlet; | |
7 | |
8 import de.intevation.artifacts.common.utils.XMLUtils; | |
9 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; | |
10 | |
11 import de.intevation.artifacts.httpclient.exceptions.ConnectionException; | |
12 import de.intevation.artifacts.httpclient.http.HttpClient; | |
13 import de.intevation.artifacts.httpclient.http.HttpClientImpl; | |
14 | |
15 import de.intevation.flys.client.shared.exceptions.ServerException; | |
16 import de.intevation.flys.client.shared.model.BBox; | |
17 import de.intevation.flys.client.shared.model.MapInfo; | |
18 | |
19 import de.intevation.flys.client.client.services.MapInfoService; | |
20 | |
21 | |
22 /** | |
23 * This service fetches a document that contains meta information for a specific | |
24 * chart. | |
25 * | |
26 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | |
27 */ | |
28 public class MapInfoServiceImpl | |
29 extends RemoteServiceServlet | |
30 implements MapInfoService | |
31 { | |
32 public static final String XPATH_RIVER = | |
33 "/mapinfo/river/@name"; | |
34 | |
35 public static final String XPATH_SRID = | |
36 "/mapinfo/river/srid/@value"; | |
37 | |
38 public static final String XPATH_BBOX = | |
39 "/mapinfo/river/bbox/@value"; | |
40 | |
41 public static final String XPATH_RIVER_WMS = | |
42 "/mapinfo/river/river-wms/@url"; | |
43 | |
44 public static final String XPATH_WMS_URL = | |
45 "/mapinfo/river/background-wms/@url"; | |
46 | |
47 public static final String XPATH_WMS_LAYERS = | |
48 "/mapinfo/river/background-wms/@layers"; | |
49 | |
50 public static final String ERROR_NO_MAPINFO_FOUND = | |
51 "mapinfo_service_no_result"; | |
52 | |
53 | |
54 public MapInfo getMapInfo(String url, String locale, String river) | |
55 throws ServerException | |
56 { | |
57 System.out.println("MapInfoServiceImpl.getMapInfo"); | |
58 | |
59 Document request = getRequestDocument(river);; | |
60 | |
61 HttpClient client = new HttpClientImpl(url, locale); | |
62 | |
63 try { | |
64 System.out.println("MapInfoServiceImpl.callService"); | |
65 Document result = client.callService(url, "mapinfo", request); | |
66 | |
67 if (result == null) { | |
68 System.err.println("MapInfo service returned no result."); | |
69 throw new ServerException(ERROR_NO_MAPINFO_FOUND); | |
70 } | |
71 | |
72 return getMapInfo(result); | |
73 } | |
74 catch (ConnectionException ce) { | |
75 System.err.println(ce.getLocalizedMessage()); | |
76 } | |
77 | |
78 throw new ServerException(ERROR_NO_MAPINFO_FOUND); | |
79 } | |
80 | |
81 | |
82 public static Document getRequestDocument(String rivername) { | |
83 System.out.println("MapInfoServiceImpl.getRequestDocument"); | |
84 | |
85 Document request = XMLUtils.newDocument(); | |
86 ElementCreator cr = new ElementCreator(request, null, null); | |
87 | |
88 Element root = cr.create("mapinfo"); | |
89 Element river = cr.create("river"); | |
90 | |
91 river.setTextContent(rivername); | |
92 | |
93 request.appendChild(root); | |
94 root.appendChild(river); | |
95 | |
96 return request; | |
97 } | |
98 | |
99 | |
100 public static MapInfo getMapInfo(Document result) { | |
101 System.out.println("MapInfoServiceImpl.getMapInfo"); | |
102 | |
103 String river = XMLUtils.xpathString(result, XPATH_RIVER, null); | |
104 String sridStr = XMLUtils.xpathString(result, XPATH_SRID, null); | |
105 String bboxS = XMLUtils.xpathString(result, XPATH_BBOX, null); | |
106 BBox bbox = BBox.getBBoxFromString(bboxS); | |
107 | |
108 String riverWMS = XMLUtils.xpathString(result, XPATH_RIVER_WMS, null); | |
109 String wmsURL = XMLUtils.xpathString(result, XPATH_WMS_URL, null); | |
110 String wmsLayers = XMLUtils.xpathString(result, XPATH_WMS_LAYERS, null); | |
111 | |
112 int srid = 4326; | |
113 | |
114 try { | |
115 srid = Integer.parseInt(sridStr); | |
116 } | |
117 catch (NumberFormatException nfe) { | |
118 // do nothing | |
119 } | |
120 | |
121 return new MapInfo(river, srid, bbox, riverWMS, wmsURL, wmsLayers); | |
122 } | |
123 } | |
124 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |