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;
@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;
*/
@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]);
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;
}
@Override
- public UUID getUuid() {
+ public UUID uuid() {
return uuid;
}
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
*/
NavigableMap<String, ContentProvider> contentProviders = contentRepository.getMountManager()
.findContentProviders(scopePath);
for (Map.Entry<String, ContentProvider> 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;
}
searchPartitions.put(contentProvider.getKey(), searchPartition);
}
}
+ if (searchPartitions.isEmpty())
+ return Stream.empty();
return StreamSupport.stream(new SearchPartitionsSpliterator(searchPartitions), true);
}