Add method to add peer by noderef
[jFCPlib.git] / src / main / java / net / pterodactylus / fcp / quelaton / ClientPutCommandImpl.java
index 8a2ebfe..df345f3 100644 (file)
@@ -6,6 +6,7 @@ import java.io.InputStream;
 import java.nio.file.Files;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
@@ -54,32 +55,38 @@ class ClientPutCommandImpl implements ClientPutCommand {
        }
 
        @Override
-       public WithUri<Optional<Key>> redirectTo(String uri) {
+       public WithUri<Executable<Optional<Key>>> redirectTo(String uri) {
                this.redirectUri.set(Objects.requireNonNull(uri, "uri must not be null"));
                return this::key;
        }
 
        @Override
-       public WithUri<Optional<Key>> from(File file) {
+       public WithUri<Executable<Optional<Key>>> from(File file) {
                this.file.set(Objects.requireNonNull(file, "file must not be null"));
                return this::key;
        }
 
        @Override
-       public WithLength<WithUri<Optional<Key>>> from(InputStream inputStream) {
+       public WithLength<WithUri<Executable<Optional<Key>>>> from(InputStream inputStream) {
                payload.set(Objects.requireNonNull(inputStream, "inputStream must not be null"));
                return this::length;
        }
 
-       private WithUri<Optional<Key>> length(long length) {
+       private WithUri<Executable<Optional<Key>>> length(long length) {
                this.length.set(length);
                return this::key;
        }
 
-       private ListenableFuture<Optional<Key>> key(String uri) {
+       private Executable<Optional<Key>> key(String uri) {
+               return () -> threadPool.submit(() -> execute(uri));
+       }
+
+       private Optional<Key> execute(String uri) throws InterruptedException, ExecutionException, IOException {
                String identifier = new RandomIdentifierGenerator().generate();
                ClientPut clientPut = createClientPutCommand(uri, identifier);
-               return threadPool.submit(() -> new ClientPutReplySequence().send(clientPut).get());
+               try (ClientPutReplySequence clientPutReplySequence = new ClientPutReplySequence()) {
+                       return clientPutReplySequence.send(clientPut).get();
+               }
        }
 
        private ClientPut createClientPutCommand(String uri, String identifier) {
@@ -184,11 +191,6 @@ class ClientPutCommandImpl implements ClientPutCommand {
                        sendMessage(originalClientPut.get());
                }
 
-               @Override
-               protected void consumeConnectionClosed(Throwable throwable) {
-                       putFinished.set(true);
-               }
-
        }
 
 }