Support SVG in FO
[gpl/argeo-suite.git] / org.argeo.app.servlet.publish / src / org / argeo / app / servlet / publish / GeoToSvgServlet.java
diff --git a/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/GeoToSvgServlet.java b/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/GeoToSvgServlet.java
new file mode 100644 (file)
index 0000000..c22b834
--- /dev/null
@@ -0,0 +1,67 @@
+package org.argeo.app.servlet.publish;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.acr.ContentRepository;
+import org.argeo.api.acr.ContentSession;
+import org.argeo.app.geo.GeoUtils;
+import org.argeo.app.geo.GpxUtils;
+import org.argeo.cms.auth.RemoteAuthUtils;
+import org.argeo.cms.servlet.ServletHttpRequest;
+import org.geotools.data.collection.ListFeatureCollection;
+import org.geotools.data.simple.SimpleFeatureCollection;
+import org.opengis.feature.simple.SimpleFeature;
+
+/**
+ * A servlet transforming an geographical data to SVG.
+ */
+public class GeoToSvgServlet extends HttpServlet {
+       private static final long serialVersionUID = -6346379324580671894L;
+       private ContentRepository contentRepository;
+
+       @Override
+       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+               String servletPath = req.getServletPath();
+
+               servletPath = servletPath.substring(1, servletPath.lastIndexOf('.'));
+               servletPath = servletPath.substring(servletPath.indexOf('/'), servletPath.length());
+               String path = URLDecoder.decode(servletPath, StandardCharsets.UTF_8);
+               String ext = servletPath.substring(path.lastIndexOf('.'));
+
+               resp.setContentType("image/svg+xml");
+
+               ContentSession session = RemoteAuthUtils.doAs(() -> contentRepository.get(), new ServletHttpRequest(req));
+               Content content = session.get(path);
+               if (".gpx".equals(ext)) {
+                       try (InputStream in = content.open(InputStream.class)) {
+                               SimpleFeature field = GpxUtils.parseGpxToPolygon(in);
+
+                               SimpleFeatureCollection features = new ListFeatureCollection(field.getType(), field);
+                               GeoUtils.exportToSvg(features, resp.getWriter(), 100, 100);
+//                     log.debug("SVG:\n" + writer.toString() + "\n");
+                       }
+               }
+       }
+
+       public void start(Map<String, Object> properties) {
+       }
+
+       public void stop(Map<String, Object> properties) {
+
+       }
+
+       public void setContentRepository(ContentRepository contentRepository) {
+               this.contentRepository = contentRepository;
+       }
+
+}