X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsContentSession.java;h=17a03fdc501bf9d138998f597c4e1663f0c330f5;hb=3e811ede237ddd38f1565e6980fe0e6d49991fe3;hp=13494dd0a8588825b23c386fa926471bbe5543dc;hpb=c0342975a37c70895c2e8f6b341d790700168d7f;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 13494dd0a..17a03fdc5 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java @@ -12,7 +12,7 @@ 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.DName; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedRepository; @@ -61,6 +61,8 @@ class CmsContentSession implements ProvidedSession { @Override public Content get(String path) { + if (!path.startsWith(ContentUtils.ROOT_SLASH)) + throw new IllegalArgumentException(path + " is not an absolute path"); ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); String mountPath = contentProvider.getMountPath(); String relativePath = extractRelativePath(mountPath, path); @@ -70,6 +72,8 @@ class CmsContentSession implements ProvidedSession { @Override public boolean exists(String path) { + if (!path.startsWith(ContentUtils.ROOT_SLASH)) + throw new IllegalArgumentException(path + " is not an absolute path"); ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); String mountPath = contentProvider.getMountPath(); String relativePath = extractRelativePath(mountPath, path); @@ -114,36 +118,24 @@ class CmsContentSession implements ProvidedSession { } /* - * NAMESPACE CONTEXT + * EDITION */ - -// @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) { edition = CompletableFuture.supplyAsync(() -> { work.accept(this); return this; }).thenApply((s) -> { - // TODO optimise - for (ContentProvider provider : modifiedProviders) { - if (provider instanceof DomContentProvider) { - ((DomContentProvider) provider).persist(s); + synchronized (CmsContentSession.this) { + // TODO optimise + for (ContentProvider provider : modifiedProviders) { + if (provider instanceof DomContentProvider) { + ((DomContentProvider) provider).persist(s); + } } + modifiedProviders.clear(); + return s; } - return s; }); return edition.minimalCompletionStage(); } @@ -154,7 +146,7 @@ class CmsContentSession implements ProvidedSession { } @Override - public void notifyModification(ProvidedContent content) { + public synchronized void notifyModification(ProvidedContent content) { ContentProvider contentProvider = content.getProvider(); modifiedProviders.add(contentProvider); } @@ -164,7 +156,7 @@ class CmsContentSession implements ProvidedSession { return uuid; } - @Override +// @Override public Content getSessionRunDir() { if (sessionRunDir == null) { String runDirPath = CmsContentRepository.RUN_BASE + '/' + uuid.toString(); @@ -173,30 +165,9 @@ class CmsContentSession implements ProvidedSession { else { Content runDir = get(CmsContentRepository.RUN_BASE); // TODO deal with no run dir available? - sessionRunDir = runDir.add(uuid.toString(), CrName.collection.qName()); + sessionRunDir = runDir.add(uuid.toString(), DName.collection.qName()); } } return sessionRunDir; } - -// @Override -// public String findNamespace(String prefix) { -// return prefixes.get(prefix); -// } -// -// @Override -// public Set findPrefixes(String namespaceURI) { -// Set res = prefixes.entrySet().stream().filter(e -> e.getValue().equals(namespaceURI)) -// .map(Map.Entry::getKey).collect(Collectors.toUnmodifiableSet()); -// -// return res; -// } -// -// @Override -// public String findPrefix(String namespaceURI) { -// if (CrName.CR_NAMESPACE_URI.equals(namespaceURI) && prefixes.containsKey(CrName.CR_DEFAULT_PREFIX)) -// return CrName.CR_DEFAULT_PREFIX; -// return ProvidedSession.super.findPrefix(namespaceURI); -// } - } \ No newline at end of file