Improve content edition and validation
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 6 Sep 2022 05:41:13 +0000 (07:41 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 6 Sep 2022 05:41:13 +0000 (07:41 +0200)
jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentUtils.java
org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java
org.argeo.cms/src/org/argeo/cms/acr/TypesManager.java

index b8d9e70dec1b6734fedc766a925156d4fc4a8b45..c85e3644190bb50d73d4e4b704cda3084a0d0af4 100644 (file)
@@ -92,7 +92,21 @@ public class JcrContentUtils {
                }
        }
 
-       private static Source toSource(Node node) {
+       private static Source toSource(Node node) throws RepositoryException {
+
+//             try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+//                     node.getSession().exportDocumentView(node.getPath(), out, true, false);
+//                     DocumentBuilder documentBuilder = DocumentBuilderFactory.newNSInstance().newDocumentBuilder();
+//                     Document document;
+//                     try (ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray())) {
+//                             document = documentBuilder.parse(in);
+//                     }
+//                     cleanJcrDom(document);
+//                     return new DOMSource(document);
+//             } catch (IOException | SAXException | ParserConfigurationException e) {
+//                     throw new RuntimeException(e);
+//             }
+
                try (PipedInputStream in = new PipedInputStream();) {
 
                        CompletableFuture<Document> toDo = CompletableFuture.supplyAsync(() -> {
index 13494dd0a8588825b23c386fa926471bbe5543dc..9f10d3f3176ce2d127b679035f42b1d323e26d9b 100644 (file)
@@ -137,13 +137,16 @@ class CmsContentSession implements ProvidedSession {
                        work.accept(this);
                        return this;
                }).thenApply((s) -> {
-                       // TODO optimise
-                       for (ContentProvider provider : modifiedProviders) {
-                               if (provider instanceof DomContentProvider) {
-                                       ((DomContentProvider) provider).persist(s);
+                       synchronized (CmsContentSession.this) {
+                               // TODO optimise
+                               for (ContentProvider provider : modifiedProviders) {
+                                       if (provider instanceof DomContentProvider) {
+                                               ((DomContentProvider) provider).persist(s);
+                                       }
                                }
+                               modifiedProviders.clear();
+                               return s;
                        }
-                       return s;
                });
                return edition.minimalCompletionStage();
        }
@@ -154,7 +157,7 @@ class CmsContentSession implements ProvidedSession {
        }
 
        @Override
-       public void notifyModification(ProvidedContent content) {
+       public synchronized void notifyModification(ProvidedContent content) {
                ContentProvider contentProvider = content.getProvider();
                modifiedProviders.add(contentProvider);
        }
index 23d6042d7ac23c53a8d7a797c74cd8274e07c4f0..d3617e128729dd3678b09058e9cd12027ae9d299 100644 (file)
@@ -65,7 +65,7 @@ class TypesManager {
        private XSModel xsModel;
        private SortedMap<QName, Map<QName, CrAttributeType>> types;
 
-       private boolean validating = false;
+       private boolean validating = true;
 
        private final static boolean limited = false;
 
@@ -453,7 +453,7 @@ class TypesManager {
                try {
                        validator.validate(source);
                } catch (SAXException e) {
-                       log.error(source + " is not valid ", e);
+                       log.error(source + " is not valid " + e);
                        // throw new IllegalArgumentException("Provided source is not valid", e);
                }
        }