X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.servlet.odk%2Fsrc%2Forg%2Fargeo%2Fapp%2Fservlet%2Fodk%2FOdkManifestServlet.java;h=2c62ba10cfa647321a6eae52581db4e84a023561;hb=597c7013edda6cd7d846761233bc57e08ef5f99c;hp=06826962a97523401764032233301c1a4ef3bc7e;hpb=6562d5f99ebb2dd850468b6404cce9b80c0c4ff6;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 0682696..2c62ba1 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,12 @@ 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 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); Session session = RemoteAuthUtils.doAs(() -> Jcr.login(repository, null), new ServletHttpRequest(req)); @@ -91,24 +95,15 @@ public class OdkManifestServlet extends HttpServlet { MessageDigest messageDigest = MessageDigest.getInstance(DigestUtils.MD5); // TODO cache a temp file ? - try (DigestOutputStream out = new DigestOutputStream(new NullOutputStream(), + try (DigestOutputStream out = new DigestOutputStream(NullOutputStream.NULL_OUTPUT_STREAM, messageDigest)) { writeMediaFile(out, target, mimeType, charset); writer.append(""); writer.append("md5sum:" + DigestUtils.toHexString(out.getMessageDigest().digest())); writer.append(""); } - -// try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { -// session.exportDocumentView(target.getPath(), out, true, false); -// String fileCsum = DigestUtils.digest(DigestUtils.MD5, out.toByteArray()); -// writer.append(""); -// writer.append("md5sum:" + fileCsum); -// 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(""); } @@ -123,11 +118,6 @@ public class OdkManifestServlet extends HttpServlet { Node target = node.getProperty(Property.JCR_ID).getNode(); writeMediaFile(resp.getOutputStream(), target, mimeType, charset); -// try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { -// session.exportDocumentView(target.getPath(), out, true, false); -// System.out.println(new String(out.toByteArray(), StandardCharsets.UTF_8)); -// resp.getOutputStream().write(out.toByteArray()); -// } } else { throw new IllegalArgumentException("Unsupported node " + node); } @@ -155,13 +145,21 @@ public class OdkManifestServlet extends HttpServlet { CsvWriter csvWriter = new CsvWriter(out, charset); csvWriter.writeLine(columnNames); RowIterator rit = queryResult.getRows(); - while (rit.hasNext()) { - Row row = rit.nextRow(); - Value[] values = row.getValues(); - List lst = new ArrayList<>(); - for (Value value : values) { - lst.add(value.getString()); + if (rit.hasNext()) { + while (rit.hasNext()) { + Row row = rit.nextRow(); + Value[] values = row.getValues(); + List lst = new ArrayList<>(); + for (Value value : values) { + lst.add(value.getString()); + } + csvWriter.writeLine(lst); } + } else { + // corner case of an empty initial database + List lst = new ArrayList<>(); + for (int i = 0; i < columnNames.length; i++) + lst.add("-"); csvWriter.writeLine(lst); } }