X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.api.acr%2Fsrc%2Forg%2Fargeo%2Fapi%2Facr%2Fspi%2FProvidedContent.java;h=f1e5aaaa80f24af4dce505a935b342645d9910c8;hb=9e6715d360fb29bb817ecaf6d49f0c8a3cc014f5;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..f1e5aaaa8 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
@@ -1,9 +1,64 @@
package org.argeo.api.acr.spi;
+import java.util.Optional;
+
import org.argeo.api.acr.Content;
+/** A {@link Content} implementation. */
public interface ProvidedContent extends Content {
+ /** The related {@link ProvidedSession}. */
ProvidedSession getSession();
+ /** The {@link ContentProvider} this {@link Content} belongs to. */
ContentProvider getProvider();
+
+ /** Depth relative to the root of the repository. */
+ 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();
+
+ /**
+ * The {@link Content} within the same {@link ContentProvider} which can be used
+ * to mount another {@link ContentProvider}.
+ */
+ default ProvidedContent getMountPoint(String relativePath) {
+ throw new UnsupportedOperationException("This content doe not support mount");
+ }
+
+ @Override
+ default Optional getContent(String path) {
+ String absolutePath;
+ if (path.startsWith(Content.ROOT_PATH)) {// absolute
+ absolutePath = path;
+ } else {// relative
+ absolutePath = getPath() + '/' + path;
+ }
+ return getSession().exists(absolutePath) ? Optional.of(getSession().get(absolutePath)) : Optional.empty();
+ }
+
+ /*
+ * ACCESS
+ */
+ /** Whether the session has the right to access the parent. */
+ default boolean isParentAccessible() {
+ return true;
+ }
+
+ /** Whether the related session can open this content for edit. */
+ default boolean canEdit() {
+ return false;
+ }
}