Remove BaseCallHomeTopology
[netconf.git] / apps / callhome-provider / src / main / java / org / opendaylight / netconf / callhome / mount / SingleReconnectFuture.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.callhome.mount;
9
10 import static java.util.Objects.requireNonNull;
11
12 import io.netty.util.concurrent.DefaultPromise;
13 import io.netty.util.concurrent.EventExecutor;
14 import io.netty.util.concurrent.Future;
15 import org.opendaylight.netconf.client.NetconfClientSession;
16 import org.opendaylight.netconf.nettyutil.ReconnectFuture;
17 import org.opendaylight.yangtools.yang.common.Empty;
18
19 final class SingleReconnectFuture extends DefaultPromise<Empty> implements ReconnectFuture {
20     private final Future<NetconfClientSession> sessionFuture;
21
22     SingleReconnectFuture(final EventExecutor eventExecutor, final Future<NetconfClientSession> sessionFuture) {
23         super(eventExecutor);
24         this.sessionFuture = requireNonNull(sessionFuture);
25         sessionFuture.addListener(future -> {
26             if (!isDone()) {
27                 if (future.isCancelled()) {
28                     cancel(false);
29                 } else if (future.isSuccess()) {
30                     setSuccess(Empty.value());
31                 } else {
32                     setFailure(future.cause());
33                 }
34             }
35         });
36     }
37
38     @Override
39     public boolean cancel(final boolean mayInterruptIfRunning) {
40         if (super.cancel(mayInterruptIfRunning)) {
41             if (!sessionFuture.isDone()) {
42                 sessionFuture.cancel(mayInterruptIfRunning);
43             }
44             return true;
45         }
46         return false;
47     }
48
49     @Override
50     public Future<?> firstSessionFuture() {
51         return sessionFuture;
52     }
53 }