X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientPutDiskDirCommandImpl.java;fp=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientPutDiskDirCommandImpl.java;h=861522cbbf2114de16643d907827e2b78f8958b9;hb=8ff9728f5a6fd4dd1f541c0a8caa7f8fc7401b76;hp=0000000000000000000000000000000000000000;hpb=02ab574b5554f822f0b1899eac24c4229c83e263;p=jFCPlib.git
diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java
new file mode 100644
index 0000000..861522c
--- /dev/null
+++ b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutDiskDirCommandImpl.java
@@ -0,0 +1,69 @@
+package net.pterodactylus.fcp.quelaton;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
+
+import net.pterodactylus.fcp.ClientPutDiskDir;
+import net.pterodactylus.fcp.Key;
+import net.pterodactylus.fcp.PutSuccessful;
+
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+
+/**
+ * Default {@link ClientPutDiskDirCommand} implemented based on {@link FcpDialog}.
+ *
+ * @author David âBombeâ Roden
+ */
+public class ClientPutDiskDirCommandImpl implements ClientPutDiskDirCommand {
+
+ private final ListeningExecutorService threadPool;
+ private final ConnectionSupplier connectionSupplier;
+ private final Supplier identifierGenerator;
+ private final AtomicReference directory = new AtomicReference<>();
+ private final AtomicReference uri = new AtomicReference<>();
+
+ public ClientPutDiskDirCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier, Supplier identifierGenerator) {
+ this.threadPool = MoreExecutors.listeningDecorator(threadPool);
+ this.connectionSupplier = connectionSupplier;
+ this.identifierGenerator = identifierGenerator;
+ }
+
+ @Override
+ public WithUri fromDirectory(File directory) {
+ this.directory.set(Objects.requireNonNull(directory).getPath());
+ return this::uri;
+ }
+
+ public Executable> uri(String uri) {
+ this.uri.set(Objects.requireNonNull(uri));
+ return () -> threadPool.submit(this::execute);
+ }
+
+ private Optional execute() throws IOException, ExecutionException, InterruptedException {
+ ClientPutDiskDir clientPutDiskDir = new ClientPutDiskDir(uri.get(), identifierGenerator.get(), directory.get());
+ try (ClientPutDiskDirDialog clientPutDiskDirDialog = new ClientPutDiskDirDialog()) {
+ return clientPutDiskDirDialog.send(clientPutDiskDir).get();
+ }
+ }
+
+ private class ClientPutDiskDirDialog extends FcpDialog> {
+
+ public ClientPutDiskDirDialog() throws IOException {
+ super(threadPool, connectionSupplier.get(), Optional.empty());
+ }
+
+ @Override
+ protected void consumePutSuccessful(PutSuccessful putSuccessful) {
+ setResult(Optional.of(new Key(putSuccessful.getURI())));
+ }
+
+ }
+
+}