X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsContentSession.java;h=04a6fea6cdf15ad231127f66b79c7153981289d1;hb=a97cc867b992ba7543e0ff3fc87b4fc41edeaa88;hp=af7dca046ab636b014c7c601f0908ff3060661a6;hpb=6d463a65d04d641c94a493579a75f8015c82097d;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 af7dca046..04a6fea6c 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/CmsContentSession.java @@ -26,10 +26,11 @@ import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedRepository; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.uuid.UuidFactory; -import org.argeo.cms.acr.xml.DomContentProvider; +import org.argeo.api.uuid.UuidIdentified; +import org.argeo.cms.CurrentUser; /** Implements {@link ProvidedSession}. */ -class CmsContentSession implements ProvidedSession { +class CmsContentSession implements ProvidedSession, UuidIdentified { final private AbstractContentRepository contentRepository; private final UUID uuid; @@ -69,32 +70,25 @@ class CmsContentSession implements ProvidedSession { @Override public Content get(String path) { - if (!path.startsWith(ContentUtils.ROOT_SLASH)) + if (!path.startsWith(Content.ROOT_PATH)) throw new IllegalArgumentException(path + " is not an absolute path"); ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); String mountPath = contentProvider.getMountPath(); - String relativePath = extractRelativePath(mountPath, path); + String relativePath = CmsContent.relativize(mountPath, path); ProvidedContent content = contentProvider.get(CmsContentSession.this, relativePath); return content; } @Override public boolean exists(String path) { - if (!path.startsWith(ContentUtils.ROOT_SLASH)) + if (!path.startsWith(Content.ROOT_PATH)) throw new IllegalArgumentException(path + " is not an absolute path"); ContentProvider contentProvider = contentRepository.getMountManager().findContentProvider(path); String mountPath = contentProvider.getMountPath(); - String relativePath = extractRelativePath(mountPath, path); + String relativePath = CmsContent.relativize(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); - return relativePath; - } - @Override public Subject getSubject() { return subject; @@ -119,7 +113,7 @@ class CmsContentSession implements ProvidedSession { */ @Override public Content getMountPoint(String path) { - String[] parent = ContentUtils.getParentPath(path); + String[] parent = CmsContent.getParentPath(path); ProvidedContent mountParent = (ProvidedContent) get(parent[0]); // Content mountPoint = mountParent.getProvider().get(CmsContentSession.this, null, path); return mountParent.getMountPoint(parent[1]); @@ -137,9 +131,10 @@ class CmsContentSession implements ProvidedSession { synchronized (CmsContentSession.this) { // TODO optimise for (ContentProvider provider : modifiedProviders) { - if (provider instanceof DomContentProvider) { - ((DomContentProvider) provider).persist(s); - } + provider.persist(s); +// if (provider instanceof DomContentProvider) { +// ((DomContentProvider) provider).persist(s); +// } } modifiedProviders.clear(); return s; @@ -160,7 +155,7 @@ class CmsContentSession implements ProvidedSession { } @Override - public UUID getUuid() { + public UUID uuid() { return uuid; } @@ -179,6 +174,25 @@ class CmsContentSession implements ProvidedSession { return sessionRunDir; } + /* + * OBJECT METHODS + */ + + @Override + public boolean equals(Object o) { + return UuidIdentified.equals(this, o); + } + + @Override + public int hashCode() { + return UuidIdentified.hashCode(this); + } + + @Override + public String toString() { + return "Content Session " + uuid + " (" + CurrentUser.getUsername(subject) + ")"; + } + /* * SEARCH */ @@ -192,10 +206,12 @@ class CmsContentSession implements ProvidedSession { NavigableMap contentProviders = contentRepository.getMountManager() .findContentProviders(scopePath); for (Map.Entry contentProvider : contentProviders.entrySet()) { + assert scopePath.startsWith(contentProvider.getKey()) + : "scopePath=" + scopePath + ", contentProvider path=" + contentProvider.getKey(); // TODO deal with depth String relPath; - if (scopePath.startsWith(contentProvider.getKey())) { - relPath = scopePath.substring(contentProvider.getKey().length()); + if (!scopePath.equals(contentProvider.getKey())) { + relPath = scopePath.substring(contentProvider.getKey().length() + 1, scopePath.length()); } else { relPath = null; } @@ -203,6 +219,8 @@ class CmsContentSession implements ProvidedSession { searchPartitions.put(contentProvider.getKey(), searchPartition); } } + if (searchPartitions.isEmpty()) + return Stream.empty(); return StreamSupport.stream(new SearchPartitionsSpliterator(searchPartitions), true); }