]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/GeoToSvgServlet.java
Experiment with streaming GeoJSON directly
[gpl/argeo-suite.git] / org.argeo.app.servlet.publish / src / org / argeo / app / servlet / publish / GeoToSvgServlet.java
1 package org.argeo.app.servlet.publish;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.net.URLDecoder;
6 import java.nio.charset.StandardCharsets;
7 import java.util.Map;
8
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.argeo.api.acr.Content;
15 import org.argeo.api.acr.ContentRepository;
16 import org.argeo.api.acr.ContentSession;
17 import org.argeo.app.geo.GeoUtils;
18 import org.argeo.app.geo.GpxUtils;
19 import org.argeo.cms.auth.RemoteAuthUtils;
20 import org.argeo.cms.servlet.ServletHttpRequest;
21 import org.geotools.data.collection.ListFeatureCollection;
22 import org.geotools.data.simple.SimpleFeatureCollection;
23 import org.opengis.feature.simple.SimpleFeature;
24
25 /**
26 * A servlet transforming an geographical data to SVG.
27 */
28 public class GeoToSvgServlet extends HttpServlet {
29 private static final long serialVersionUID = -6346379324580671894L;
30 private ContentRepository contentRepository;
31
32 @Override
33 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
34 String servletPath = req.getServletPath();
35
36 servletPath = servletPath.substring(1, servletPath.lastIndexOf('.'));
37 servletPath = servletPath.substring(servletPath.indexOf('/'), servletPath.length());
38 String path = URLDecoder.decode(servletPath, StandardCharsets.UTF_8);
39 String ext = servletPath.substring(path.lastIndexOf('.'));
40
41 resp.setContentType("image/svg+xml");
42
43 ContentSession session = RemoteAuthUtils.doAs(() -> contentRepository.get(), new ServletHttpRequest(req));
44 Content content = session.get(path);
45 if (".gpx".equals(ext)) {
46 try (InputStream in = content.open(InputStream.class)) {
47 SimpleFeature field = GpxUtils.parseGpxToPolygon(in);
48
49 SimpleFeatureCollection features = new ListFeatureCollection(field.getType(), field);
50 GeoUtils.exportToSvg(features, resp.getWriter(), 100, 100);
51 // log.debug("SVG:\n" + writer.toString() + "\n");
52 }
53 }
54 }
55
56 public void start(Map<String, Object> properties) {
57 }
58
59 public void stop(Map<String, Object> properties) {
60
61 }
62
63 public void setContentRepository(ContentRepository contentRepository) {
64 this.contentRepository = contentRepository;
65 }
66
67 }