1 package net.pterodactylus.fcp.quelaton;
3 import java.io.IOException;
4 import java.util.concurrent.ExecutionException;
5 import java.util.concurrent.ExecutorService;
6 import java.util.function.Supplier;
8 import net.pterodactylus.fcp.UnsubscribeUSK;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import com.google.common.util.concurrent.ListeningExecutorService;
12 import com.google.common.util.concurrent.MoreExecutors;
15 * Default {@link UnsubscribeUskCommand} implementation based on {@link FcpDialog}.
17 * @author <a href="mailto:bombe@freenetproject.org">David ‘Bombe’ Roden</a>
19 public class UnsubscribeUskCommandImpl implements UnsubscribeUskCommand {
21 private final ListeningExecutorService threadPool;
22 private final ConnectionSupplier connectionSupplier;
23 private final UnsubscribeUSK unsubscribeUSK;
25 public UnsubscribeUskCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier, Supplier<String> identifierGenerator) {
26 this.threadPool = MoreExecutors.listeningDecorator(threadPool);
27 this.connectionSupplier = connectionSupplier;
28 unsubscribeUSK = new UnsubscribeUSK(identifierGenerator.get());
32 public Executable<Void> identifier(String identifier) {
36 private ListenableFuture<Void> execute() {
37 return threadPool.submit(this::executeDialog);
40 private Void executeDialog() throws IOException, ExecutionException, InterruptedException {
41 try (UnsubscribeUskDialog unsubscribeUskDialog = new UnsubscribeUskDialog()) {
42 return unsubscribeUskDialog.send(unsubscribeUSK).get();
46 private class UnsubscribeUskDialog extends FcpDialog<Void> {
48 public UnsubscribeUskDialog() throws IOException {
49 super(threadPool, connectionSupplier.get(), null);