X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Ffile%2Fprovider%2FCmsFileSystem.java;h=f581ea1c4bc97bfef25545ae60fc27f4425fe0ce;hb=60bf0339227cc064a4ead694e3a699581a025233;hp=6d4eea279c85f42f040ca5c6d599c881106f8617;hpb=4086635cfaa04c8a184124048794398b0ba96a55;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/file/provider/CmsFileSystem.java b/org.argeo.cms/src/org/argeo/cms/file/provider/CmsFileSystem.java index 6d4eea279..f581ea1c4 100644 --- a/org.argeo.cms/src/org/argeo/cms/file/provider/CmsFileSystem.java +++ b/org.argeo.cms/src/org/argeo/cms/file/provider/CmsFileSystem.java @@ -7,94 +7,131 @@ import java.nio.file.PathMatcher; import java.nio.file.WatchService; import java.nio.file.attribute.UserPrincipalLookupService; import java.nio.file.spi.FileSystemProvider; +import java.util.Collections; import java.util.Set; import org.argeo.api.acr.fs.AbstractFsSystem; +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.cms.CmsSession; +import org.argeo.cms.acr.ContentUtils; public class CmsFileSystem extends AbstractFsSystem { + private final CmsFileSystemProvider provider; +// private final ProvidedRepository contentRepository; + private final CmsSession cmsSession; + private final ProvidedSession contentSession; + + private final CmsPath rootPath; + private final CmsFileStore baseFileStore; + + public CmsFileSystem(CmsFileSystemProvider provider, ProvidedRepository contentRepository, CmsSession cmsSession) { + this.provider = provider; +// this.contentRepository = contentRepository; + this.cmsSession = cmsSession; + this.contentSession = (ProvidedSession) ContentUtils.openSession(contentRepository, cmsSession); + + rootPath = new CmsPath(this, ProvidedContent.ROOT_PATH); + baseFileStore = new CmsFileStore(rootPath.getContent().getProvider()); + } @Override public CmsFileStore getBaseFileStore() { - // TODO Auto-generated method stub - return null; + return baseFileStore; } @Override public CmsFileStore getFileStore(String path) { - // TODO Auto-generated method stub - return null; + ProvidedContent c = (ProvidedContent) contentSession.get(path); + return new CmsFileStore(c.getProvider()); } @Override public FileSystemProvider provider() { - // TODO Auto-generated method stub - return null; + return provider; } @Override public void close() throws IOException { - // TODO Auto-generated method stub - + // TODO close content session? + provider.close(this); } @Override public boolean isOpen() { - // TODO Auto-generated method stub - return false; + // TODO check provider + return true; } @Override public boolean isReadOnly() { - // TODO Auto-generated method stub return false; } @Override public String getSeparator() { - // TODO Auto-generated method stub - return null; + return CmsPath.SEPARATOR; } @Override public Iterable getRootDirectories() { - // TODO Auto-generated method stub - return null; + return Collections.singleton(rootPath); } @Override public Iterable getFileStores() { - // TODO Auto-generated method stub - return null; + // TODO return all mount points + return Collections.singleton(baseFileStore); } @Override public Set supportedFileAttributeViews() { - // TODO Auto-generated method stub - return null; + return Collections.singleton(ContentAttributeView.NAME); } @Override public Path getPath(String first, String... more) { - // TODO Auto-generated method stub - return null; + StringBuilder sb = new StringBuilder(first); + // TODO Make it more robust + for (String part : more) + sb.append('/').append(part); + return new CmsPath(this, sb.toString()); } @Override public PathMatcher getPathMatcher(String syntaxAndPattern) { - // TODO Auto-generated method stub return null; } @Override public UserPrincipalLookupService getUserPrincipalLookupService() { - // TODO Auto-generated method stub return null; } @Override public WatchService newWatchService() throws IOException { - // TODO Auto-generated method stub return null; } + /* + * ACR + */ + + ProvidedContent getContent(String acrPath) { + return (ProvidedContent) contentSession.get(acrPath); + } + + ProvidedSession getContentSession() { + return contentSession; + } + + /* + * CMS + */ + + CmsSession getCmsSession() { + return cmsSession; + } + }