Introduce graphical support based on SVG naming.
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 10 Nov 2020 07:32:26 +0000 (08:32 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 10 Nov 2020 07:32:26 +0000 (08:32 +0100)
knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkSubmissionServlet.java
org.argeo.entity.api/src/org/argeo/entity/EntityType.java
org.argeo.entity.api/src/org/argeo/entity/entity.cnd

index 862ff3665d9c2341ce2cc8c900a560b9b90db18a..f1a1d843389eb76193bc6ad159eec5a11465e74d 100644 (file)
@@ -8,6 +8,7 @@ import java.time.format.DateTimeFormatter;
 
 import javax.jcr.ImportUUIDBehavior;
 import javax.jcr.Node;
+import javax.jcr.Property;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -22,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.cms.servlet.ServletAuthUtils;
 import org.argeo.entity.EntityNames;
+import org.argeo.entity.EntityType;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.support.odk.OrxType;
@@ -49,7 +51,7 @@ public class OdkSubmissionServlet extends HttpServlet {
 
                try {
                        Node submissions = JcrUtils.mkdirs(session,
-                                       "/" + EntityNames.FORM_BASE + "/" + EntityNames.SUBMISSIONS_BASE);
+                                       "/" + EntityType.form.get() + "/" + EntityNames.SUBMISSIONS_BASE);
                        Node submission = submissions.addNode(submissionNameFormatter.format(Instant.now()),
                                        OrxType.submission.get());
                        for (Part part : req.getParts()) {
@@ -61,25 +63,17 @@ public class OdkSubmissionServlet extends HttpServlet {
                                        session.importXML(xml.getPath(), part.getInputStream(),
                                                        ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING);
 
-//                                     Part xmlSubmissionPart = req.getPart(XML_SUBMISSION_FILE);
-//                                     if (xmlSubmissionPart == null)
-//                                             throw new ServletException("No " + XML_SUBMISSION_FILE + " part");
-//                             try (InputStream in = xmlSubmissionPart.getInputStream();) {
-//                                     // pretty print
-//                                     Transformer transformer = TransformerFactory.newInstance().newTransformer();
-//                                     transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-//                                     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
-//                                     StreamResult result = new StreamResult(new StringWriter());
-//                                     StreamSource source = new StreamSource(in);
-//                                     transformer.transform(source, result);
-//                                     String xmlString = result.getWriter().toString();
-//                                     System.out.println(xmlString);
-//                             } catch (TransformerException e) {
-//                                     e.printStackTrace();
-//                             }
-
                                } else {
-                                       JcrUtils.copyStreamAsFile(submission, part.getName(), part.getInputStream());
+                                       Node fileNode = JcrUtils.copyStreamAsFile(submission, part.getName(), part.getInputStream());
+                                       String contentType = part.getContentType();
+                                       if (contentType != null) {
+                                               fileNode.addMixin(NodeType.MIX_MIMETYPE);
+                                               fileNode.setProperty(Property.JCR_MIMETYPE, contentType);
+
+                                       }
+                                       if (part.getName().endsWith(".jpg") || part.getName().endsWith(".png")) {
+                                               // TODO meta data and thumbnails
+                                       }
                                }
                        }
                        session.save();
index 7b470bbc5c65e95c106b4fd3786dfac66acd8e2e..822bbd98c19304b65efb7aeed193bdf47498cd57 100644 (file)
@@ -8,6 +8,8 @@ public enum EntityType implements JcrName {
        typologies, terms, term,
        // form
        form, formSet, formSubmission,
+       // graphics
+       box,
        // ldap
        person;
 
index 12d1ba69a2fa25b70bc347f7f3212dc30d1fe7f8..80328dbc8761b557dff7c3b62bab81caa03ec455 100644 (file)
@@ -3,6 +3,7 @@
 <h = "http://www.w3.org/1999/xhtml">
 // see https://www.w3.org/2003/01/geo/
 //<geo = "http://www.w3.org/2003/01/geo/wgs84_pos#">
+<svg = "http://www.w3.org/2000/svg">
 
 <ldif = "http://www.argeo.org/ns/ldif">
 <entity = 'http://www.argeo.org/ns/entity'>
@@ -56,6 +57,17 @@ mixin
 [entity:formSet] > mix:title
 mixin
 
+//
+// GRAPHICS
+//
+[entity:box]
+mixin
+- svg:width (DOUBLE)
+- svg:height (DOUBLE)
+- svg:length (DOUBLE)
+- svg:unit (STRING)
+- svg:dur (DOUBLE)
+
 // LDAP-LIKE ENTITIES
 // A real person
 [entity:person] > entity:entity