X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=knowledge%2Forg.argeo.support.odk%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fodk%2Fservlet%2FOdkManifestServlet.java;h=207189c4cd071d53c260fe4f50413ac3649a56aa;hb=6bb643f74b8a6ef00aa6f5903ab70d4719695119;hp=88b9c69efdb41f74e0fda931fc4fd13e7ad52be4;hpb=384e41caf78222c53e5cf365bb93310e5b28462b;p=gpl%2Fargeo-suite.git diff --git a/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkManifestServlet.java b/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkManifestServlet.java index 88b9c69..207189c 100644 --- a/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkManifestServlet.java +++ b/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkManifestServlet.java @@ -1,6 +1,5 @@ package org.argeo.support.odk.servlet; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.Writer; import java.nio.charset.StandardCharsets; @@ -8,6 +7,7 @@ import java.nio.charset.StandardCharsets; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.Property; +import javax.jcr.PropertyIterator; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; @@ -62,14 +62,24 @@ public class OdkManifestServlet extends HttpServlet { writer.append(""); writer.append(target.getPath().substring(1) + ".xml"); writer.append(""); - try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { - session.exportDocumentView(target.getPath(), out, true, false); - String fileCsum = DigestUtils.digest(DigestUtils.MD5, out.toByteArray()); -// JcrxApi.addChecksum(file, fileCsum); - writer.append(""); - writer.append("md5sum:" + fileCsum); - writer.append(""); - } + + StringBuilder xml = new StringBuilder(); + xml.append(""); + toSimpleXml(target, xml); + String fileCsum = DigestUtils.digest(DigestUtils.MD5, + xml.toString().getBytes(StandardCharsets.UTF_8)); + writer.append(""); + writer.append("md5sum:" + fileCsum); + writer.append(""); + +// try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { +// session.exportDocumentView(target.getPath(), out, true, false); +// String fileCsum = DigestUtils.digest(DigestUtils.MD5, out.toByteArray()); +//// JcrxApi.addChecksum(file, fileCsum); +// writer.append(""); +// writer.append("md5sum:" + fileCsum); +// writer.append(""); +// } writer.append("" + protocol + "://" + serverName + (serverPort == 80 || serverPort == 443 ? "" : ":" + serverPort) + "/api/odk/formManifest" + file.getPath() + ""); @@ -82,11 +92,18 @@ public class OdkManifestServlet extends HttpServlet { } else if (node.isNodeType(OrxManifestName.mediaFile.get())) { if (node.isNodeType(NodeType.NT_ADDRESS)) { Node target = node.getProperty(Property.JCR_ID).getNode(); - 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()); - } + StringBuilder xml = new StringBuilder(); + xml.append(""); + toSimpleXml(target, xml); + System.out.println(xml); + resp.getOutputStream().write(xml.toString().getBytes(StandardCharsets.UTF_8)); + resp.flushBuffer(); + +// 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); } @@ -101,6 +118,43 @@ public class OdkManifestServlet extends HttpServlet { } + private static void toSimpleXml(Node node, StringBuilder sb) throws RepositoryException { + sb.append('<'); + String nodeName = node.getName(); + int colIndex = nodeName.indexOf(':'); + if (colIndex > 0) { + nodeName = nodeName.substring(colIndex + 1); + } + sb.append(nodeName); + PropertyIterator pit = node.getProperties(); + properties: while (pit.hasNext()) { + Property p = pit.nextProperty(); + if (p.isMultiple()) + continue properties; + String propertyName = p.getName(); + int pcolIndex = propertyName.indexOf(':'); + if (pcolIndex > 0) + continue properties; + sb.append(' '); + sb.append(propertyName); + sb.append('='); + sb.append('\"').append(p.getString()).append('\"'); + } + + if (node.hasNodes()) { + sb.append('>'); + NodeIterator children = node.getNodes(); + while (children.hasNext()) { + toSimpleXml(children.nextNode(), sb); + } + sb.append("'); + } else { + sb.append("/>"); + } + } + public void setRepository(Repository repository) { this.repository = repository; }