X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2Flistener%2FUncancellableFuture.java;fp=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2Flistener%2FUncancellableFuture.java;h=8d89ff8b93c73aefdd901c68bac7f79b148a5a32;hp=0000000000000000000000000000000000000000;hb=bee5972562efede5581a4655b439023837aa261c;hpb=82eb3f94c133e091ca5dd2f26450da9f121c12ca diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/listener/UncancellableFuture.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/listener/UncancellableFuture.java new file mode 100644 index 0000000000..8d89ff8b93 --- /dev/null +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/listener/UncancellableFuture.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.sal.connect.netconf.listener; + +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.AbstractFuture; + +final class UncancellableFuture extends AbstractFuture { + @GuardedBy("this") + private boolean uncancellable = false; + + public UncancellableFuture(final boolean uncancellable) { + this.uncancellable = uncancellable; + } + + public synchronized boolean setUncancellable() { + if (isCancelled()) { + return false; + } + + uncancellable = true; + return true; + } + + public synchronized boolean isUncancellable() { + return uncancellable; + } + + @Override + public synchronized boolean cancel(final boolean mayInterruptIfRunning) { + return uncancellable ? false : super.cancel(mayInterruptIfRunning); + } + + @Override + public synchronized boolean set(@Nullable final V value) { + Preconditions.checkState(uncancellable); + return super.set(value); + } + + @Override + protected boolean setException(final Throwable throwable) { + Preconditions.checkState(uncancellable); + return super.setException(throwable); + } +}