From: Mathieu Baudier Date: Thu, 22 Jun 2023 05:57:10 +0000 (+0200) Subject: Improve ACR search and edition X-Git-Tag: v2.3.18~14 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=54098df1bc3ba263dd1e3290aafa880d54d96805;p=lgpl%2Fargeo-commons.git Improve ACR search and edition --- diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/QNamed.java b/org.argeo.api.acr/src/org/argeo/api/acr/QNamed.java index 063a7d321..73ae4f02e 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/QNamed.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/QNamed.java @@ -23,6 +23,7 @@ public interface QNamed extends Supplier { return namespaceContext.getPrefix(getNamespace()) + ":" + localName(); } + /** This qualified named with its default prefix. If it is unqualified this method should be overridden, or QNamed.Unqualified be used. */ default String get() { return getDefaultPrefix() + ":" + localName(); } @@ -43,5 +44,10 @@ public interface QNamed extends Supplier { return XMLConstants.DEFAULT_NS_PREFIX; } + @Override + default String get() { + return localName(); + } + } } diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/BasicSearch.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/BasicSearch.java index 2e4f249d4..8cbdebf7e 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/search/BasicSearch.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/BasicSearch.java @@ -34,10 +34,20 @@ public class BasicSearch { return this; } + /** + * Convenience method, to search below this absolute path, with depth + * {@link Depth#INFINITTY}. + */ + public BasicSearch from(String path) { + return from(URI.create(path), Depth.INFINITTY); + } + + /** Search below this URI, with depth {@link Depth#INFINITTY}. */ public BasicSearch from(URI uri) { return from(uri, Depth.INFINITTY); } + /** Search below this URI, with this {@link Depth}. */ public BasicSearch from(URI uri, Depth depth) { Objects.requireNonNull(uri); Objects.requireNonNull(depth); diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Intersection.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Intersection.java index 9ce763204..44ca90605 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/search/Intersection.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Intersection.java @@ -1,7 +1,7 @@ package org.argeo.api.acr.search; /** A composition which is the intersection of sets (AND). */ -class Intersection implements Composition { +public class Intersection implements Composition { ContentFilter filter; @SuppressWarnings("unchecked") diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/search/Union.java b/org.argeo.api.acr/src/org/argeo/api/acr/search/Union.java index df1b00175..d33b13da2 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/search/Union.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/search/Union.java @@ -1,7 +1,7 @@ package org.argeo.api.acr.search; /** A composition which is the union of sets (OR). */ -class Union implements Composition { +public class Union implements Composition { ContentFilter filter; @SuppressWarnings("unchecked") diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/spi/ContentProvider.java b/org.argeo.api.acr/src/org/argeo/api/acr/spi/ContentProvider.java index 56610ef4b..8b59f2fa2 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/spi/ContentProvider.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/spi/ContentProvider.java @@ -7,6 +7,7 @@ import javax.xml.namespace.NamespaceContext; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentNotFoundException; +import org.argeo.api.acr.ContentSession; import org.argeo.api.acr.search.BasicSearch; /** @@ -50,6 +51,17 @@ public interface ContentProvider extends NamespaceContext { throw new UnsupportedOperationException(); } + /* + * EDITION + */ + /** + * Called when an edition cycle is completed. Does nothing by default. + * + * @see ContentSession#edit(java.util.function.Consumer) + */ + default void persist(ProvidedSession session) { + } + /* * NAMESPACE CONTEXT */ 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 af7dca046..8d475fd20 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java @@ -26,7 +26,7 @@ import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedRepository; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.uuid.UuidFactory; -import org.argeo.cms.acr.xml.DomContentProvider; +import org.argeo.cms.CurrentUser; /** Implements {@link ProvidedSession}. */ class CmsContentSession implements ProvidedSession { @@ -137,9 +137,10 @@ class CmsContentSession implements ProvidedSession { synchronized (CmsContentSession.this) { // TODO optimise for (ContentProvider provider : modifiedProviders) { - if (provider instanceof DomContentProvider) { - ((DomContentProvider) provider).persist(s); - } + provider.persist(s); +// if (provider instanceof DomContentProvider) { +// ((DomContentProvider) provider).persist(s); +// } } modifiedProviders.clear(); return s; @@ -179,6 +180,18 @@ class CmsContentSession implements ProvidedSession { return sessionRunDir; } + @Override + public boolean equals(Object o) { + if (o instanceof CmsContentSession session) + return uuid.equals(session.uuid); + return false; + } + + @Override + public String toString() { + return "Content Session " + uuid + " (" + CurrentUser.getUsername(subject) + ")"; + } + /* * SEARCH */ diff --git a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java index d56935097..39d9c2a90 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/xml/DomContentProvider.java @@ -96,6 +96,7 @@ public class DomContentProvider implements ContentProvider, NamespaceContext { return nodes.getLength() != 0; } + @Override public void persist(ProvidedSession session) { if (mountPath != null) { Content mountPoint = session.getMountPoint(mountPath);