X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2Ffs%2FFsContent.java;h=77c2f7a7585fe778834ec9735635b749905581d1;hb=c0342975a37c70895c2e8f6b341d790700168d7f;hp=15917c50359a003affc0b2d853e444a483526019;hpb=7e464c3cedfa41ece64811fb55ddc9ce740a1050;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 15917c503..77c2f7a75 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 @@ -8,6 +8,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.nio.file.attribute.FileTime; import java.nio.file.attribute.UserDefinedFileAttributeView; import java.time.Instant; @@ -20,6 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import javax.xml.namespace.QName; @@ -56,16 +58,16 @@ public class FsContent extends AbstractContent implements ProvidedContent { private final FsContentProvider provider; private final Path path; - private final boolean isRoot; + private final boolean isMountBase; private final QName name; protected FsContent(ProvidedSession session, FsContentProvider contentProvider, Path path) { super(session); this.provider = contentProvider; this.path = path; - this.isRoot = contentProvider.isMountRoot(path); + this.isMountBase = contentProvider.isMountBase(path); // TODO check file names with ':' ? - if (isRoot) { + if (isMountBase) { String mountPath = provider.getMountPath(); if (mountPath != null && !mountPath.equals("/")) { Content mountPoint = session.getMountPoint(mountPath); @@ -265,7 +267,7 @@ public class FsContent extends AbstractContent implements ProvidedContent { @Override public Content getParent() { - if (isRoot) { + if (isMountBase) { String mountPath = provider.getMountPath(); if (mountPath == null || mountPath.equals("/")) return null; @@ -322,4 +324,24 @@ public class FsContent extends AbstractContent implements ProvidedContent { return provider; } + /* + * READ / WRITE + */ + public CompletableFuture write(Class clss) { + if (isContentClass(CrName.collection.qName())) { + throw new IllegalStateException("Cannot directly write to a collection"); + } + if (InputStream.class.isAssignableFrom(clss)) { + CompletableFuture res = new CompletableFuture<>(); + res.thenAccept((in) -> { + try { + Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new RuntimeException("Cannot write to " + path, e); + } + }); + return (CompletableFuture) res; + } + return super.write(clss); + } }