X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsContentSession.java;h=4e1c3bcfd0846c53567c82459988564c278cb4a9;hb=eb4324be6ac9cdff15828a21ee7d3f6ca2f19fb9;hp=318080509b02ab624e3bf18c3feb124a7f8817db;hpb=cc1dd97ebcc32e1bd754073ad23def182f460452;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java index 318080509..4e1c3bcfd 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java @@ -5,6 +5,7 @@ import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.function.Consumer; @@ -14,7 +15,9 @@ import javax.security.auth.Subject; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentSession; +import org.argeo.api.acr.CrName; import org.argeo.api.acr.NamespaceUtils; +import org.argeo.api.acr.RuntimeNamespaceContext; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedRepository; @@ -23,8 +26,9 @@ import org.argeo.cms.acr.xml.DomContentProvider; /** Implements {@link ProvidedSession}. */ class CmsContentSession implements ProvidedSession { - final private CmsContentRepository contentRepository; + final private AbstractContentRepository contentRepository; + private final UUID uuid; private Subject subject; private Locale locale; @@ -34,14 +38,21 @@ class CmsContentSession implements ProvidedSession { private Set modifiedProviders = new TreeSet<>(); - public CmsContentSession(CmsContentRepository contentRepository, Subject subject, Locale locale) { + private Content sessionRunDir; + + public CmsContentSession(AbstractContentRepository contentRepository, UUID uuid, Subject subject, Locale locale) { this.contentRepository = contentRepository; this.subject = subject; this.locale = locale; + this.uuid = uuid; + } public void close() { closed.complete(this); + + if (sessionRunDir != null) + sessionRunDir.remove(); } @Override @@ -53,11 +64,24 @@ class CmsContentSession implements ProvidedSession { public Content get(String path) { ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); String mountPath = contentProvider.getMountPath(); + String relativePath = extractRelativePath(mountPath, path); + ProvidedContent content = contentProvider.get(CmsContentSession.this, relativePath); + return content; + } + + @Override + public boolean exists(String path) { + ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); + String mountPath = contentProvider.getMountPath(); + String relativePath = extractRelativePath(mountPath, path); + return contentProvider.exists(this, relativePath); + } + + private String extractRelativePath(String mountPath, String path) { String relativePath = path.substring(mountPath.length()); if (relativePath.length() > 0 && relativePath.charAt(0) == '/') relativePath = relativePath.substring(1); - ProvidedContent content = contentProvider.get(CmsContentSession.this, mountPath, relativePath); - return content; + return relativePath; } @Override @@ -90,17 +114,19 @@ class CmsContentSession implements ProvidedSession { * NAMESPACE CONTEXT */ - @Override - public String getNamespaceURI(String prefix) { - return NamespaceUtils.getNamespaceURI((p) -> contentRepository.getTypesManager().getPrefixes().get(p), prefix); - } - - @Override - public Iterator getPrefixes(String namespaceURI) { - return NamespaceUtils.getPrefixes((ns) -> contentRepository.getTypesManager().getPrefixes().entrySet().stream() - .filter(e -> e.getValue().equals(ns)).map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()), - namespaceURI); - } +// @Override +// public String getNamespaceURI(String prefix) { +// return RuntimeNamespaceContext.getNamespaceContext().getNamespaceURI(prefix); +//// return NamespaceUtils.getNamespaceURI((p) -> contentRepository.getTypesManager().getPrefixes().get(p), prefix); +// } +// +// @Override +// public Iterator getPrefixes(String namespaceURI) { +// return RuntimeNamespaceContext.getNamespaceContext().getPrefixes(namespaceURI); +//// return NamespaceUtils.getPrefixes((ns) -> contentRepository.getTypesManager().getPrefixes().entrySet().stream() +//// .filter(e -> e.getValue().equals(ns)).map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()), +//// namespaceURI); +// } @Override public CompletionStage edit(Consumer work) { @@ -130,6 +156,26 @@ class CmsContentSession implements ProvidedSession { modifiedProviders.add(contentProvider); } + @Override + public UUID getUuid() { + return uuid; + } + + @Override + public Content getSessionRunDir() { + if (sessionRunDir == null) { + String runDirPath = CmsContentRepository.RUN_BASE + '/' + uuid.toString(); + if (exists(runDirPath)) + sessionRunDir = get(runDirPath); + else { + Content runDir = get(CmsContentRepository.RUN_BASE); + // TODO deal with no run dir available? + sessionRunDir = runDir.add(uuid.toString(), CrName.COLLECTION.get()); + } + } + return sessionRunDir; + } + // @Override // public String findNamespace(String prefix) { // return prefixes.get(prefix);