use of org.eclipse.milo.opcua.stack.core.types.structured.BrowsePathTarget in project milo by eclipse.
the class BrowsePathsHelper method translate.
private CompletableFuture<BrowsePathResult> translate(BrowsePath browsePath) {
CompletableFuture<BrowsePathResult> future = new CompletableFuture<>();
NodeId startingNode = browsePath.getStartingNode();
RelativePath relativePath = browsePath.getRelativePath();
if (startingNode.isNull()) {
future.complete(new BrowsePathResult(new StatusCode(StatusCodes.Bad_NodeIdInvalid), new BrowsePathTarget[0]));
return future;
}
List<RelativePathElement> relativePathElements = l(relativePath.getElements());
if (relativePathElements.isEmpty()) {
future.complete(new BrowsePathResult(new StatusCode(StatusCodes.Bad_NothingToDo), new BrowsePathTarget[0]));
return future;
}
follow(startingNode, relativePathElements).whenComplete((targets, ex) -> {
if (targets != null) {
BrowsePathResult result;
if (!targets.isEmpty()) {
result = new BrowsePathResult(StatusCode.GOOD, a(targets, BrowsePathTarget.class));
} else {
result = new BrowsePathResult(new StatusCode(StatusCodes.Bad_NoMatch), new BrowsePathTarget[0]);
}
future.complete(result);
} else {
StatusCode statusCode = UaException.extractStatusCode(ex).orElse(new StatusCode(StatusCodes.Bad_NoMatch));
BrowsePathResult result = new BrowsePathResult(statusCode, new BrowsePathTarget[0]);
future.complete(result);
}
});
return future;
}
Aggregations