X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Ffs%2FFsContent.java;h=15917c50359a003affc0b2d853e444a483526019;hb=7e464c3cedfa41ece64811fb55ddc9ce740a1050;hp=e71acdabd2bb973770fccfd5cd0bb5d54e5ce64b;hpb=dcdbf77c4ec46f1dcad5d3fa011fe072e921f187;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java index e71acdabd..15917c503 100644 --- a/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java +++ b/org.argeo.cms/src/org/argeo/cms/acr/fs/FsContent.java @@ -11,10 +11,12 @@ import java.nio.file.Path; import java.nio.file.attribute.FileTime; import java.nio.file.attribute.UserDefinedFileAttributeView; import java.time.Instant; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -41,25 +43,24 @@ public class FsContent extends AbstractContent implements ProvidedContent { private static final Map POSIX_KEYS; static { BASIC_KEYS = new HashMap<>(); - BASIC_KEYS.put(CrName.CREATION_TIME.get(), "basic:creationTime"); - BASIC_KEYS.put(CrName.LAST_MODIFIED_TIME.get(), "basic:lastModifiedTime"); - BASIC_KEYS.put(CrName.SIZE.get(), "basic:size"); - BASIC_KEYS.put(CrName.FILE_KEY.get(), "basic:fileKey"); + BASIC_KEYS.put(CrName.creationTime.qName(), "basic:creationTime"); + BASIC_KEYS.put(CrName.lastModifiedTime.qName(), "basic:lastModifiedTime"); + BASIC_KEYS.put(CrName.size.qName(), "basic:size"); + BASIC_KEYS.put(CrName.fileKey.qName(), "basic:fileKey"); POSIX_KEYS = new HashMap<>(BASIC_KEYS); - POSIX_KEYS.put(CrName.OWNER.get(), "owner:owner"); - POSIX_KEYS.put(CrName.GROUP.get(), "posix:group"); - POSIX_KEYS.put(CrName.PERMISSIONS.get(), "posix:permissions"); + POSIX_KEYS.put(CrName.owner.qName(), "owner:owner"); + POSIX_KEYS.put(CrName.group.qName(), "posix:group"); + POSIX_KEYS.put(CrName.permissions.qName(), "posix:permissions"); } - private final ProvidedSession session; private final FsContentProvider provider; private final Path path; private final boolean isRoot; private final QName name; protected FsContent(ProvidedSession session, FsContentProvider contentProvider, Path path) { - this.session = session; + super(session); this.provider = contentProvider; this.path = path; this.isRoot = contentProvider.isMountRoot(path); @@ -70,7 +71,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { Content mountPoint = session.getMountPoint(mountPath); this.name = mountPoint.getName(); } else { - this.name = CrName.ROOT.get(); + this.name = CrName.root.qName(); } } else { @@ -159,7 +160,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { try { for (String name : udfav.list()) { QName providerName = NamespaceUtils.parsePrefixedName(provider, name); - QName sessionName = new ContentName(providerName, session); + QName sessionName = new ContentName(providerName, getSession()); result.add(sessionName); } } catch (IOException e) { @@ -208,12 +209,12 @@ public class FsContent extends AbstractContent implements ProvidedContent { try { return Files.list(path).map((p) -> { FsContent fsContent = new FsContent(this, p); - Optional isMount = fsContent.get(CrName.MOUNT.get(), String.class); + Optional isMount = fsContent.get(CrName.mount.qName(), String.class); if (isMount.orElse("false").equals("true")) { QName[] classes = null; - ContentProvider contentProvider = session.getRepository().getMountContentProvider(fsContent, - false, classes); - Content mountedContent = contentProvider.get(session, fsContent.getPath(), ""); + ContentProvider contentProvider = getSession().getRepository() + .getMountContentProvider(fsContent, false, classes); + Content mountedContent = contentProvider.get(getSession(), ""); return mountedContent; } else { return (Content) fsContent; @@ -232,7 +233,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { FsContent fsContent; try { Path newPath = path.resolve(NamespaceUtils.toPrefixedName(provider, name)); - if (ContentName.contains(classes, CrName.COLLECTION.get())) + if (ContentName.contains(classes, CrName.collection.qName())) Files.createDirectory(newPath); else Files.createFile(newPath); @@ -245,10 +246,11 @@ public class FsContent extends AbstractContent implements ProvidedContent { throw new ContentResourceException("Cannot create new content", e); } - if (session.getRepository().shouldMount(classes)) { - ContentProvider contentProvider = session.getRepository().getMountContentProvider(fsContent, true, classes); - Content mountedContent = contentProvider.get(session, fsContent.getPath(), ""); - fsContent.put(CrName.MOUNT.get(), "true"); + if (getSession().getRepository().shouldMount(classes)) { + ContentProvider contentProvider = getSession().getRepository().getMountContentProvider(fsContent, true, + classes); + Content mountedContent = contentProvider.get(getSession(), ""); + fsContent.put(CrName.mount.qName(), "true"); return mountedContent; } else { @@ -268,7 +270,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { if (mountPath == null || mountPath.equals("/")) return null; String[] parent = ContentUtils.getParentPath(mountPath); - return session.get(parent[0]); + return getSession().get(parent[0]); } return new FsContent(this, path.getParent()); } @@ -299,13 +301,22 @@ public class FsContent extends AbstractContent implements ProvidedContent { } /* - * ACCESSORS + * TYPING */ + @Override - public ProvidedSession getSession() { - return session; + public List getContentClasses() { + List res = new ArrayList<>(); + if (Files.isDirectory(path)) + res.add(CrName.collection.qName()); + // TODO add other types + return res; } + /* + * ACCESSORS + */ + @Override public FsContentProvider getProvider() { return provider;