X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.app.servlet.odk%2Fsrc%2Forg%2Fargeo%2Fapp%2Fservlet%2Fodk%2FOdkManifestServlet.java;h=6e145c2b951fb0f87013e3887b29258a181973e9;hb=d418dc5bf6dad504ec874286d9b125af013a449e;hp=f296170778a381e05cfbf61a52751ee8bb12839a;hpb=6e56ffa34cb02ab04d028423aea342e3dfed4358;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkManifestServlet.java b/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkManifestServlet.java index f296170..6e145c2 100644 --- a/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkManifestServlet.java +++ b/org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkManifestServlet.java @@ -33,10 +33,11 @@ import org.argeo.app.api.EntityMimeType; import org.argeo.app.odk.OrxManifestName; import org.argeo.cms.auth.RemoteAuthUtils; import org.argeo.cms.servlet.ServletHttpRequest; +import org.argeo.cms.servlet.ServletUtils; +import org.argeo.cms.util.CsvWriter; +import org.argeo.cms.util.DigestUtils; import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; -import org.argeo.util.CsvWriter; -import org.argeo.util.DigestUtils; /** Describe additional files. */ public class OdkManifestServlet extends HttpServlet { @@ -53,9 +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"; + // 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)); @@ -98,9 +99,8 @@ public class OdkManifestServlet extends HttpServlet { writer.append("md5sum:" + DigestUtils.toHexString(out.getMessageDigest().digest())); writer.append(""); } - writer.append("" + protocol + "://" + serverName - + (serverPort == 80 || serverPort == 443 ? "" : ":" + serverPort) - + "/api/odk/formManifest" + file.getPath() + ""); + writer.append("" + baseServer + "/api/odk/formManifest" + file.getPath() + + ""); } writer.append(""); } @@ -136,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 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); @@ -150,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 lst = new ArrayList<>(); - for (int i = 0; i < columnNames.length; i++) + for (int i = 0; i < columnNames.size(); i++) lst.add("-"); csvWriter.writeLine(lst); }