X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2Fspi%2FContentProvider.java;h=56610ef4b097c917ceec3a155fc59e95b1f5893d;hb=ddfa9d4306fbd4fb680cf5d969fdfc32868d60f5;hp=9d2215f6579436e14f4d5dc3d9814d51419a5184;hpb=c615307d7b87bcb260d8a9f402c6e0a880862f38;p=lgpl%2Fargeo-commons.git 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 9d2215f65..56610ef4b 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 @@ -1,14 +1,54 @@ package org.argeo.api.acr.spi; import java.util.Iterator; +import java.util.Spliterator; import javax.xml.namespace.NamespaceContext; import org.argeo.api.acr.Content; +import org.argeo.api.acr.ContentNotFoundException; +import org.argeo.api.acr.search.BasicSearch; +/** + * A prover of {@link Content}, which can be mounted in a + * {@link ProvidedRepository}. + */ public interface ContentProvider extends NamespaceContext { - Content get(ProvidedSession session, String mountPath, String relativePath); + /** + * Return the content at this path, relative to the mount path. + * + * @return the content at this relative path, never null + * @throws ContentNotFoundException if there is no content at this relative path + */ + ProvidedContent get(ProvidedSession session, String relativePath) throws ContentNotFoundException; + + /** + * Whether a content exist at his relative path. The default implementation call + * {@link #get(ProvidedSession, String)} and check whether a + * {@link ContentNotFoundException} is thrown or not. It should be overridden as + * soon as there is a mechanism to check existence before actually getting the + * content. + */ + default boolean exists(ProvidedSession session, String relativePath) { + try { + get(session, relativePath); + return true; + } catch (ContentNotFoundException e) { + return false; + } + } + + /** The absolute path where this provider is mounted. */ + String getMountPath(); + + /** + * Search content within this provider. The default implementation throws an + * {@link UnsupportedOperationException}. + */ + default Spliterator search(ProvidedSession session, BasicSearch search, String relPath) { + throw new UnsupportedOperationException(); + } /* * NAMESPACE CONTEXT @@ -19,12 +59,4 @@ public interface ContentProvider extends NamespaceContext { return prefixes.hasNext() ? prefixes.next() : null; } -// default ContentName parsePrefixedName(String nameWithPrefix) { -// return NamespaceUtils.parsePrefixedName(this, nameWithPrefix); -// } -// -// default String toPrefixedName(QName name) { -// return NamespaceUtils.toPrefixedName(this, name); -// } - }