X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2Fspi%2FProvidedContent.java;h=3cf130a7c456d35e22c5d74e961bc1c2acc0ffd1;hb=54098df1bc3ba263dd1e3290aafa880d54d96805;hp=d9fc781d0317878d1ba0be628e080e9ac112c30d;hpb=7d2a002f5dcfe8a8c7b29803b70d4b1aff265ed1;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.acr/src/org/argeo/api/acr/spi/ProvidedContent.java b/org.argeo.api.acr/src/org/argeo/api/acr/spi/ProvidedContent.java index d9fc781d0..3cf130a7c 100644 --- a/org.argeo.api.acr/src/org/argeo/api/acr/spi/ProvidedContent.java +++ b/org.argeo.api.acr/src/org/argeo/api/acr/spi/ProvidedContent.java @@ -2,8 +2,52 @@ package org.argeo.api.acr.spi; import org.argeo.api.acr.Content; +/** A {@link Content} implementation. */ public interface ProvidedContent extends Content { + final static String ROOT_PATH = "/"; + ProvidedSession getSession(); ContentProvider getProvider(); + + int getDepth(); + + /** + * Whether this is the root node of the related repository. Default checks + * whether {@link #getDepth()} == 0, but it can be optimised by + * implementations. + */ + default boolean isRoot() { + return getDepth() == 0; + } + + /** + * An opaque ID which is guaranteed to uniquely identify this content within the + * session return by {@link #getSession()}. Typically used for UI. + */ + String getSessionLocalId(); + + default ProvidedContent getMountPoint(String relativePath) { + throw new UnsupportedOperationException("This content doe not support mount"); + } + + default ProvidedContent getContent(String path) { + Content fileNode; + if (path.startsWith(ROOT_PATH)) {// absolute + fileNode = getSession().get(path); + } else {// relative + String absolutePath = getPath() + '/' + path; + fileNode = getSession().get(absolutePath); + } + return (ProvidedContent) fileNode; + } + + /* + * ACCESS + */ + /** Whether the session has the right to access the parent. */ + default boolean isParentAccessible() { + return true; + } + }