1 package net.pterodactylus.fcp.quelaton;
3 import java.io.IOException;
4 import java.util.concurrent.ExecutionException;
5 import java.util.concurrent.ExecutorService;
7 import net.pterodactylus.fcp.UnsubscribeUSK;
9 import com.google.common.util.concurrent.ListenableFuture;
10 import com.google.common.util.concurrent.ListeningExecutorService;
11 import com.google.common.util.concurrent.MoreExecutors;
14 * Default {@link UnsubscribeUskCommand} implementation based on {@link FcpDialog}.
16 * @author <a href="mailto:bombe@freenetproject.org">David ‘Bombe’ Roden</a>
18 public class UnsubscribeUskCommandImpl implements UnsubscribeUskCommand {
20 private static final RandomIdentifierGenerator IDENTIFIER = new RandomIdentifierGenerator();
21 private final ListeningExecutorService threadPool;
22 private final ConnectionSupplier connectionSupplier;
23 private final UnsubscribeUSK unsubscribeUSK = new UnsubscribeUSK(IDENTIFIER.generate());
25 public UnsubscribeUskCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier) {
26 this.threadPool = MoreExecutors.listeningDecorator(threadPool);
27 this.connectionSupplier = connectionSupplier;
31 public Executable<Void> identifier(String identifier) {
35 private ListenableFuture<Void> execute() {
36 return threadPool.submit(this::executeDialog);
39 private Void executeDialog() throws IOException, ExecutionException, InterruptedException {
40 try (UnsubscribeUskDialog unsubscribeUskDialog = new UnsubscribeUskDialog()) {
41 return unsubscribeUskDialog.send(unsubscribeUSK).get();
45 private class UnsubscribeUskDialog extends FcpDialog<Void> {
47 public UnsubscribeUskDialog() throws IOException {
48 super(threadPool, connectionSupplier.get());
52 protected boolean isFinished() {