From: Mathieu Baudier Date: Tue, 6 Sep 2022 05:41:13 +0000 (+0200) Subject: Improve content edition and validation X-Git-Tag: v2.3.10~50 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=5a7b8b145ad29401b9940f7e1493a7dec1cd0156 Improve content edition and validation --- diff --git a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentUtils.java b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentUtils.java index b8d9e70de..c85e36441 100644 --- a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentUtils.java +++ b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentUtils.java @@ -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 toDo = CompletableFuture.supplyAsync(() -> { diff --git a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java index 13494dd0a..9f10d3f31 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java @@ -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); } diff --git a/org.argeo.cms/src/org/argeo/cms/acr/TypesManager.java b/org.argeo.cms/src/org/argeo/cms/acr/TypesManager.java index 23d6042d7..d3617e128 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/TypesManager.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/TypesManager.java @@ -65,7 +65,7 @@ class TypesManager { private XSModel xsModel; private SortedMap> 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); } }