use of org.eclipse.milo.opcua.stack.core.types.structured.RelativePath 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;
}
use of org.eclipse.milo.opcua.stack.core.types.structured.RelativePath in project milo by eclipse.
the class TranslateBrowsePathExample method run.
@Override
public void run(OpcUaClient client, CompletableFuture<OpcUaClient> future) throws Exception {
// synchronous connect
client.connect().get();
TranslateBrowsePathsToNodeIdsResponse response = client.translateBrowsePaths(newArrayList(new BrowsePath(Identifiers.ObjectsFolder, new RelativePath(new RelativePathElement[] { new RelativePathElement(Identifiers.HierarchicalReferences, false, true, new QualifiedName(2, "HelloWorld")), new RelativePathElement(Identifiers.HierarchicalReferences, false, true, new QualifiedName(2, "ScalarTypes")), new RelativePathElement(Identifiers.HierarchicalReferences, false, true, new QualifiedName(2, "UInt64")) })))).get();
BrowsePathResult result = l(response.getResults()).get(0);
StatusCode statusCode = result.getStatusCode();
logger.info("Status={}", statusCode);
l(result.getTargets()).forEach(target -> logger.info("TargetId={}", target.getTargetId()));
future.complete(client);
}
Aggregations