+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);
+ }
+
+}