+ public ListenableFuture<Optional<NormalizedNode<?, ?>>> getConfigRunningData(
+ final FutureCallback<DOMRpcResult> callback, final Optional<YangInstanceIdentifier> filterPath) {
+ final ListenableFuture<DOMRpcResult> configRunning = getConfigRunning(callback, filterPath);
+ return extractData(filterPath, configRunning);
+ }
+
+ public ListenableFuture<Optional<NormalizedNode<?, ?>>> getData(final FutureCallback<DOMRpcResult> callback,
+ final Optional<YangInstanceIdentifier> filterPath) {
+ final ListenableFuture<DOMRpcResult> configRunning = get(callback, filterPath);
+ return extractData(filterPath, configRunning);
+ }
+
+ private ListenableFuture<Optional<NormalizedNode<?, ?>>> extractData(
+ final Optional<YangInstanceIdentifier> path, final ListenableFuture<DOMRpcResult> configRunning) {
+ return Futures.transform(configRunning, (Function<DOMRpcResult, Optional<NormalizedNode<?, ?>>>) result -> {
+ Preconditions.checkArgument(
+ result.getErrors().isEmpty(), "Unable to read data: %s, errors: %s", path, result.getErrors());
+ final DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?> dataNode =
+ ((ContainerNode) result.getResult()).getChild(
+ NetconfMessageTransformUtil.toId(NetconfMessageTransformUtil.NETCONF_DATA_QNAME)).get();
+ return transformer.selectFromDataStructure(dataNode, path.get());
+ });
+ }
+
+ public ListenableFuture<DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
+ final Optional<YangInstanceIdentifier> filterPath) {