44450b5583c709ef092ab994da4c541ac1df80da
[jFCPlib.git] / src / main / java / net / pterodactylus / fcp / quelaton / UnsubscribeUskCommandImpl.java
1 package net.pterodactylus.fcp.quelaton;
2
3 import java.io.IOException;
4 import java.util.concurrent.ExecutionException;
5 import java.util.concurrent.ExecutorService;
6
7 import net.pterodactylus.fcp.UnsubscribeUSK;
8
9 import com.google.common.util.concurrent.ListenableFuture;
10 import com.google.common.util.concurrent.ListeningExecutorService;
11 import com.google.common.util.concurrent.MoreExecutors;
12
13 /**
14  * Default {@link UnsubscribeUskCommand} implementation based on {@link FcpDialog}.
15  *
16  * @author <a href="mailto:bombe@freenetproject.org">David ‘Bombe’ Roden</a>
17  */
18 public class UnsubscribeUskCommandImpl implements UnsubscribeUskCommand {
19
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());
24
25         public UnsubscribeUskCommandImpl(ExecutorService threadPool, ConnectionSupplier connectionSupplier) {
26                 this.threadPool = MoreExecutors.listeningDecorator(threadPool);
27                 this.connectionSupplier = connectionSupplier;
28         }
29
30         @Override
31         public Executable<Void> identifier(String identifier) {
32                 return this::execute;
33         }
34
35         private ListenableFuture<Void> execute() {
36                 return threadPool.submit(this::executeDialog);
37         }
38
39         private Void executeDialog() throws IOException, ExecutionException, InterruptedException {
40                 try (UnsubscribeUskDialog unsubscribeUskDialog = new UnsubscribeUskDialog()) {
41                         return unsubscribeUskDialog.send(unsubscribeUSK).get();
42                 }
43         }
44
45         private class UnsubscribeUskDialog extends FcpDialog<Void> {
46
47                 public UnsubscribeUskDialog() throws IOException {
48                         super(threadPool, connectionSupplier.get());
49                 }
50
51                 @Override
52                 protected boolean isFinished() {
53                         return true;
54                 }
55
56         }
57
58 }