+ public FluentFuture<Optional<NormalizedNode<?, ?>>> getConfigRunningData(
+ final FutureCallback<DOMRpcResult> callback, final Optional<YangInstanceIdentifier> filterPath) {
+ final FluentFuture<DOMRpcResult> configRunning = getConfigRunning(callback, filterPath);
+ return extractData(filterPath, configRunning);
+ }
+
+ public FluentFuture<Optional<NormalizedNode<?, ?>>> getData(final FutureCallback<DOMRpcResult> callback,
+ final Optional<YangInstanceIdentifier> filterPath) {
+ final FluentFuture<DOMRpcResult> configRunning = get(callback, filterPath);
+ return extractData(filterPath, configRunning);
+ }
+
+ private FluentFuture<Optional<NormalizedNode<?, ?>>> extractData(
+ final Optional<YangInstanceIdentifier> path, final FluentFuture<DOMRpcResult> configRunning) {
+ return configRunning.transform(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.NETCONF_DATA_NODEID)
+ .get();
+ return transformer.selectFromDataStructure(dataNode, path.get());
+ }, MoreExecutors.directExecutor());
+ }
+
+ public FluentFuture<DOMRpcResult> getConfigRunning(final FutureCallback<DOMRpcResult> callback,
+ final Optional<YangInstanceIdentifier> filterPath) {