Add display column in ODK CSV queries
[gpl/argeo-suite.git] / org.argeo.app.servlet.odk / src / org / argeo / app / servlet / odk / OdkManifestServlet.java
index 2c62ba10cfa647321a6eae52581db4e84a023561..6e145c2b951fb0f87013e3887b29258a181973e9 100644 (file)
@@ -54,12 +54,9 @@ public class OdkManifestServlet extends HttpServlet {
                if (pathInfo.startsWith("//"))
                        pathInfo = pathInfo.substring(1);
 
-//             String serverName = req.getServerName();
-//             int serverPort = req.getServerPort();
-//             String protocol = serverPort == 443 || req.isSecure() ? "https" : "http";
-//             String baseServer = protocol + "://" + serverName
-//                             + (serverPort == 80 || serverPort == 443 ? "" : ":" + serverPort);
-               StringBuilder baseServer = ServletUtils.getRequestUrlBase(req);
+               // we force HTTPS since ODK Collect will fail anyhow when sending http
+               // cf. https://forum.getodk.org/t/authentication-for-non-https-schems/32967/4
+               StringBuilder baseServer = ServletUtils.getRequestUrlBase(req, true);
 
                Session session = RemoteAuthUtils.doAs(() -> Jcr.login(repository, null), new ServletHttpRequest(req));
 
@@ -139,7 +136,13 @@ public class OdkManifestServlet extends HttpServlet {
                if (target.isNodeType(NodeType.NT_QUERY)) {
                        Query query = target.getSession().getWorkspace().getQueryManager().getQuery(target);
                        QueryResult queryResult = query.execute();
-                       String[] columnNames = queryResult.getColumnNames();
+                       List<String> columnNames = new ArrayList<>();
+                       for (String c : queryResult.getColumnNames()) {
+                               columnNames.add(c);
+                       }
+                       // TODO make it more configurable
+                       columnNames.add("display");
+
                        if (EntityMimeType.XML.equals(mimeType)) {
                        } else if (EntityMimeType.CSV.equals(mimeType)) {
                                CsvWriter csvWriter = new CsvWriter(out, charset);
@@ -153,12 +156,14 @@ public class OdkManifestServlet extends HttpServlet {
                                                for (Value value : values) {
                                                        lst.add(value.getString());
                                                }
+                                               // display
+                                               lst.add(row.getValue("name").getString() + " (" + row.getValue("label").getString() + ")");
                                                csvWriter.writeLine(lst);
                                        }
                                } else {
                                        // corner case of an empty initial database
                                        List<String> lst = new ArrayList<>();
-                                       for (int i = 0; i < columnNames.length; i++)
+                                       for (int i = 0; i < columnNames.size(); i++)
                                                lst.add("-");
                                        csvWriter.writeLine(lst);
                                }