X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Ffcp%2Fquelaton%2FClientPutCommandImpl.java;h=1b322f35a7fbfac515e2977063b3b648ef35566c;hb=1d2048edc0856425c91337bb103ee526de663e9d;hp=df345f349fc491381f55cb81164e3ee2f6f7574d;hpb=b315e585ac78058d727eea98aca2ba9c7ed93c51;p=jFCPlib.git diff --git a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java index df345f3..1b322f3 100644 --- a/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java +++ b/src/main/java/net/pterodactylus/fcp/quelaton/ClientPutCommandImpl.java @@ -4,13 +4,16 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; import net.pterodactylus.fcp.ClientPut; import net.pterodactylus.fcp.FcpMessage; @@ -22,6 +25,7 @@ import net.pterodactylus.fcp.TestDDAComplete; import net.pterodactylus.fcp.TestDDAReply; import net.pterodactylus.fcp.TestDDARequest; import net.pterodactylus.fcp.TestDDAResponse; +import net.pterodactylus.fcp.URIGenerated; import net.pterodactylus.fcp.UploadFrom; import com.google.common.util.concurrent.ListenableFuture; @@ -29,7 +33,7 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; /** - * Default {@link ClientPutCommand} implemented based on {@link FcpReplySequence}. + * Default {@link ClientPutCommand} implemented based on {@link FcpDialog}. * * @author David ‘Bombe’ Roden */ @@ -42,6 +46,7 @@ class ClientPutCommandImpl implements ClientPutCommand { private final AtomicReference payload = new AtomicReference<>(); private final AtomicLong length = new AtomicLong(); private final AtomicReference targetFilename = new AtomicReference<>(); + private final List> keyGenerateds = new CopyOnWriteArrayList<>(); public ClientPutCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier) { this.threadPool = MoreExecutors.listeningDecorator(threadPool); @@ -49,6 +54,12 @@ class ClientPutCommandImpl implements ClientPutCommand { } @Override + public ClientPutCommand onKeyGenerated(Consumer keyGenerated) { + keyGenerateds.add(keyGenerated); + return this; + } + + @Override public ClientPutCommand named(String targetFilename) { this.targetFilename.set(targetFilename); return this; @@ -84,8 +95,8 @@ class ClientPutCommandImpl implements ClientPutCommand { private Optional execute(String uri) throws InterruptedException, ExecutionException, IOException { String identifier = new RandomIdentifierGenerator().generate(); ClientPut clientPut = createClientPutCommand(uri, identifier); - try (ClientPutReplySequence clientPutReplySequence = new ClientPutReplySequence()) { - return clientPutReplySequence.send(clientPut).get(); + try (ClientPutDialog clientPutDialog = new ClientPutDialog()) { + return clientPutDialog.send(clientPut).get(); } } @@ -123,14 +134,14 @@ class ClientPutCommandImpl implements ClientPutCommand { return clientPut; } - private class ClientPutReplySequence extends FcpReplySequence> { + private class ClientPutDialog extends FcpDialog> { private final AtomicReference originalClientPut = new AtomicReference<>(); private final AtomicReference directory = new AtomicReference<>(); private final AtomicReference finalKey = new AtomicReference<>(); private final AtomicBoolean putFinished = new AtomicBoolean(); - public ClientPutReplySequence() throws IOException { + public ClientPutDialog() throws IOException { super(ClientPutCommandImpl.this.threadPool, ClientPutCommandImpl.this.connectionSupplier.get()); } @@ -155,6 +166,13 @@ class ClientPutCommandImpl implements ClientPutCommand { } @Override + protected void consumeURIGenerated(URIGenerated uriGenerated) { + for (Consumer keyGenerated : keyGenerateds) { + keyGenerated.accept(uriGenerated.getURI()); + } + } + + @Override protected void consumePutSuccessful(PutSuccessful putSuccessful) { finalKey.set(new Key(putSuccessful.getURI())); putFinished.set(true);