From: Mathieu Baudier Date: Wed, 13 Oct 2021 09:35:19 +0000 (+0200) Subject: Generate simple XML for external form instances. X-Git-Tag: v2.3.2~25 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=d82ac64eb9379aec9b5c3b2c66844ddbfebf6806 Generate simple XML for external form instances. --- 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..385024c 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 @@ -8,6 +8,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; @@ -82,11 +83,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 +109,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; }