Introduce UUID identified and openForEdit/freeze cycle
[lgpl/argeo-commons.git] / org.argeo.cms.ux / src / org / argeo / cms / ux / acr / ContentCmsEditable.java
diff --git a/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentCmsEditable.java b/org.argeo.cms.ux/src/org/argeo/cms/ux/acr/ContentCmsEditable.java
new file mode 100644 (file)
index 0000000..7278c28
--- /dev/null
@@ -0,0 +1,48 @@
+package org.argeo.cms.ux.acr;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.acr.spi.ContentProvider;
+import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.api.cms.ux.CmsEditable;
+import org.argeo.cms.acr.ContentUtils;
+import org.argeo.cms.ux.AbstractCmsEditable;
+
+/** {@link CmsEditable} semantics for a {@link Content}. */
+public class ContentCmsEditable extends AbstractCmsEditable {
+
+       private final boolean canEdit;
+       /** The path of this content, relative to its content provider. */
+       private final String relativePath;
+       private final ProvidedSession session;
+       private final ContentProvider provider;
+
+       public ContentCmsEditable(Content content) {
+               ProvidedContent providedContent = (ProvidedContent) content;
+               canEdit = providedContent.canEdit();
+               session = providedContent.getSession();
+               provider = providedContent.getProvider();
+               relativePath = ContentUtils.relativize(provider.getMountPath(), content.getPath());
+       }
+
+       @Override
+       public Boolean canEdit() {
+               return canEdit;
+       }
+
+       @Override
+       public Boolean isEditing() {
+               return provider.isOpenForEdit(session, relativePath);
+       }
+
+       @Override
+       public void startEditing() {
+               provider.openForEdit(session, relativePath);
+       }
+
+       @Override
+       public void stopEditing() {
+               provider.freeze(session, relativePath);
+       }
+
+}