import com.google.common.annotations.Beta;
import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.AbstractFuture;
+import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import javax.annotation.Nonnull;
import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
+import org.opendaylight.mdsal.dom.api.DOMRpcException;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DefaultDOMRpcException;
import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
+import org.opendaylight.yangtools.util.concurrent.ExceptionMapper;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
* DOM operation result from Binding.
*/
@Beta
-final class LazyDOMOperationResultFuture implements ListenableFuture<DOMRpcResult> {
+final class LazyDOMOperationResultFuture extends AbstractFuture<DOMRpcResult> {
+ private static final ExceptionMapper<DOMRpcException> DOM_RPC_EX_MAPPER =
+ new ExceptionMapper<DOMRpcException>("rpc", DOMRpcException.class) {
+ @Override
+ protected DOMRpcException newWithCause(String message, Throwable cause) {
+ return cause instanceof DOMRpcException ? (DOMRpcException)cause
+ : new DefaultDOMRpcException("RPC failed", cause);
+ }
+ };
private final ListenableFuture<RpcResult<?>> bindingFuture;
private final BindingNormalizedNodeCodecRegistry codec;
this.codec = Preconditions.checkNotNull(codec, "codec");
}
- static ListenableFuture<DOMRpcResult> create(final BindingNormalizedNodeCodecRegistry codec,
+ static FluentFuture<DOMRpcResult> create(final BindingNormalizedNodeCodecRegistry codec,
final ListenableFuture<RpcResult<?>> bindingResult) {
return new LazyDOMOperationResultFuture(bindingResult, codec);
}
if (result != null) {
return result;
}
- return transformIfNecessary(bindingFuture.get());
+
+ try {
+ return transformIfNecessary(bindingFuture.get());
+ } catch (ExecutionException e) {
+ throw new ExecutionException(e.getMessage(), DOM_RPC_EX_MAPPER.apply(e));
+ }
}
@Override
if (result != null) {
return result;
}
- return transformIfNecessary(bindingFuture.get(timeout, unit));
+
+ try {
+ return transformIfNecessary(bindingFuture.get(timeout, unit));
+ } catch (ExecutionException e) {
+ throw new ExecutionException(e.getMessage(), DOM_RPC_EX_MAPPER.apply(e));
+ }
}
@Override
return new DefaultDOMRpcResult(input.getErrors());
}
-}
\ No newline at end of file
+}