X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=knowledge%2Forg.argeo.support.odk%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fodk%2Fservlet%2FOdkManifestServlet.java;h=091f4dabfc7340cda6b95ad4092a7918572890ec;hp=54620a3a97902c31bdf24d1d02c59dfe8866fb52;hb=30b97a74faf0dcbc6d787bb88b524bfc53a7f251;hpb=df5fdbc43d45908a7aa713bb3c5762cb8dc284c7
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 54620a3..091f4da 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,5 +1,6 @@
package org.argeo.support.odk.servlet;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
@@ -7,7 +8,6 @@ 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;
@@ -60,27 +60,28 @@ public class OdkManifestServlet extends HttpServlet {
if (file.isNodeType(NodeType.NT_ADDRESS)) {
Node target = file.getProperty(Property.JCR_ID).getNode();
writer.append("");
-// writer.append(target.getPath().substring(1) + ".xml");
- writer.append(target.getName() + ".xml");
+ // Work around bug in ODK Collect not supporting paths
+ // writer.append(target.getPath().substring(1) + ".xml");
+ writer.append(target.getIdentifier() + ".xml");
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("");
-// }
+// StringBuilder xml = new StringBuilder();
+// xml.append("");
+// JcrUtils.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() + "");
@@ -93,18 +94,19 @@ 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();
- 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());
-// }
+
+// StringBuilder xml = new StringBuilder();
+// xml.append("");
+// JcrUtils.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);
}
@@ -119,43 +121,6 @@ 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("");
- sb.append(nodeName);
- sb.append('>');
- } else {
- sb.append("/>");
- }
- }
-
public void setRepository(Repository repository) {
this.repository = repository;
}