Java源码示例:org.eclipse.milo.opcua.stack.core.Identifiers

示例1
private void showRootNodes() throws Exception {
	TreeItem<OpcUaTreeNode> rootItem = new TreeItem<>();
	tvBrowser.setRoot(rootItem);
	rootItem.setExpanded(true);

	// browse root folder
	List<ReferenceDescription> refs = getApp().getOpcUaClient().browseSynch(Identifiers.RootFolder);

	for (ReferenceDescription ref : refs) {
		// child nodes
		TreeItem<OpcUaTreeNode> childItem = new TreeItem<>(new OpcUaTreeNode(ref));
		ImageView imageView = new ImageView(getNodeImage(ref));
		childItem.setGraphic(imageView);

		rootItem.getChildren().add(childItem);
	}
}
 
示例2
public static CompletableFuture<BrowsePathResult> translate(
        final OpcUaClient client,
        final NodeId startingNode,
        final String... path) {

    Objects.requireNonNull(startingNode);
    Objects.requireNonNull(path);

    // convert to elements

    final RelativePathElement[] elements = new RelativePathElement[path.length];
    for (int i = 0; i < path.length; i++) {
        elements[i] = new RelativePathElement(
                Identifiers.HierarchicalReferences,
                false, true,
                QualifiedName.parse(path[i]));
    }

    // translate

    final BrowsePath request = new BrowsePath(startingNode, new RelativePath(elements));
    return client.translateBrowsePaths(singletonList(request)).thenApply(response -> response.getResults()[0]);
}
 
示例3
private NodeId translateBrowsePath ( final String itemName )
{
    try
    {
        final RelativePathElement[] relativePaths = Arrays.asList ( itemName.split ( "\\." ) ).stream ().map ( //
                element -> new RelativePathElement ( Identifiers.HierarchicalReferences, false, true, new QualifiedName ( itemName.startsWith ( "Server." ) ? 0 : 2, element ) ) ).toArray ( RelativePathElement[]::new );
        final TranslateBrowsePathsToNodeIdsResponse response = this.client.translateBrowsePaths ( Arrays.asList ( //
                new BrowsePath ( Identifiers.ObjectsFolder, new RelativePath ( //
                        relativePaths ) ) //
        ) ).get ( 30, TimeUnit.SECONDS );

        final BrowsePathResult browsePathResult = response.getResults ()[0];
        final NodeId n = browsePathResult.getTargets ()[browsePathResult.getTargets ().length - 1].getTargetId ().local ().get ();
        return n;
    }
    catch ( final Exception e )
    {
        return null;
    }
}
 
示例4
private Variant convertValue ( final DataValue value, final Map<String, Variant> attributes )
{
    if ( ( value == null ) || ( value.getValue () == null ) || !value.getValue ().getDataType ().isPresent () )
    {
        return Variant.NULL;
    }
    final NodeId dataType = value.getValue ().getDataType ().get ();
    if ( Identifiers.DateTime.equals ( dataType ) )
    {
        final long ts = ( (DateTime)value.getValue ().getValue () ).getJavaDate ().getTime ();
        attributes.put ( "formatted", Variant.valueOf ( String.format ( "%s", ( (DateTime)value.getValue ().getValue () ) ) ) );
        return Variant.valueOf ( ts );
    }
    else if ( Identifiers.LocalizedText.equals ( dataType ) )
    {
        final String t = ( (LocalizedText)value.getValue ().getValue () ).getText ();
        attributes.put ( "formatted", Variant.valueOf ( String.format ( "%s", ( (LocalizedText)value.getValue ().getValue () ) ) ) );
        return Variant.valueOf ( t );
    }
    return Variant.valueOf ( value.getValue ().getValue () );
}
 
示例5
public static void main(final String[] args) throws Exception {

        final OpcUaClient client = Connect.connect().get();

        try {
            System.out.format("%-60s %-15s %s%n", "Name", "Type", "NodeID");
            System.out.println(
                    "==========================================================================================");
            browse(client, Identifiers.RootFolder, "");

        } finally {
            client.disconnect().get();
        }
    }
 
示例6
private BrowseDescription createBrowseDescription ( final NodeId nodeId )
{
    return new BrowseDescription ( nodeId, //
            BrowseDirection.Forward, //
            Identifiers.References, //
            true, //
            uint ( NodeClass.Object.getValue () | NodeClass.Variable.getValue () ), //
            uint ( BrowseResultMask.All.getValue () ) );
}
 
示例7
private void browseNodes() {
  LinkedHashMap<String, Field> rootFieldMap = new LinkedHashMap<>();
  Map<String, Boolean> visitedMap = new HashMap<>();
  browseNode(Identifiers.RootFolder, rootFieldMap, visitedMap);
  BatchContext batchContext = context.startBatch();
  String requestId = System.currentTimeMillis() + "." + counter.getAndIncrement();
  Record record = context.createRecord(requestId);
  record.set("/", Field.create(rootFieldMap));
  batchContext.getBatchMaker().addRecord(record);
  context.processBatch(batchContext);
}
 
示例8
public ExampleNamespace(OpcUaServer server, UShort namespaceIndex) {
    this.server = server;
    this.namespaceIndex = namespaceIndex;

    subscriptionModel = new SubscriptionModel(server, this);

    try {
        // Create a "HelloWorld" folder and add it to the node manager
        NodeId folderNodeId = new NodeId(namespaceIndex, "HelloWorld");

        UaFolderNode folderNode = new UaFolderNode(
            server.getNodeMap(),
            folderNodeId,
            new QualifiedName(namespaceIndex, "HelloWorld"),
            LocalizedText.english("HelloWorld")
        );

        server.getNodeMap().addNode(folderNode);

        // Make sure our new folder shows up under the server's Objects folder
        server.getUaNamespace().addReference(
            Identifiers.ObjectsFolder,
            Identifiers.Organizes,
            true,
            folderNodeId.expanded(),
            NodeClass.Object
        );

        // Add the rest of the nodes
        addVariableNodes(folderNode);

        addMethodNode(folderNode);
    } catch (UaException e) {
        logger.error("Error adding nodes: {}", e.getMessage(), e);
    }
}
 
示例9
private void addScalarNodes(UaFolderNode rootNode) {
    UaFolderNode scalarTypesFolder = new UaFolderNode(
        server.getNodeMap(),
        new NodeId(namespaceIndex, "HelloWorld/ScalarTypes"),
        new QualifiedName(namespaceIndex, "ScalarTypes"),
        LocalizedText.english("ScalarTypes")
    );

    server.getNodeMap().addNode(scalarTypesFolder);
    rootNode.addOrganizes(scalarTypesFolder);

    for (Object[] os : STATIC_SCALAR_NODES) {
        String name = (String) os[0];
        NodeId typeId = (NodeId) os[1];
        Variant variant = (Variant) os[2];

        UaVariableNode node = new UaVariableNode.UaVariableNodeBuilder(server.getNodeMap())
            .setNodeId(new NodeId(namespaceIndex, "HelloWorld/ScalarTypes/" + name))
            .setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
            .setUserAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
            .setBrowseName(new QualifiedName(namespaceIndex, name))
            .setDisplayName(LocalizedText.english(name))
            .setDataType(typeId)
            .setTypeDefinition(Identifiers.BaseDataVariableType)
            .build();

        node.setValue(new DataValue(variant));

        node.setAttributeDelegate(new ValueLoggingDelegate());

        server.getNodeMap().addNode(node);
        scalarTypesFolder.addOrganizes(node);
    }
}
 
示例10
private void addAdminReadableNodes(UaFolderNode rootNode) {
    UaFolderNode adminFolder = new UaFolderNode(
        server.getNodeMap(),
        new NodeId(namespaceIndex, "HelloWorld/OnlyAdminCanRead"),
        new QualifiedName(namespaceIndex, "OnlyAdminCanRead"),
        LocalizedText.english("OnlyAdminCanRead")
    );

    server.getNodeMap().addNode(adminFolder);
    rootNode.addOrganizes(adminFolder);

    String name = "String";
    UaVariableNode node = new UaVariableNode.UaVariableNodeBuilder(server.getNodeMap())
        .setNodeId(new NodeId(namespaceIndex, "HelloWorld/OnlyAdminCanRead/" + name))
        .setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
        .setBrowseName(new QualifiedName(namespaceIndex, name))
        .setDisplayName(LocalizedText.english(name))
        .setDataType(Identifiers.String)
        .setTypeDefinition(Identifiers.BaseDataVariableType)
        .build();

    node.setValue(new DataValue(new Variant("shh... don't tell the lusers")));

    node.setAttributeDelegate(new RestrictedAccessDelegate(identity -> {
        if ("admin".equals(identity)) {
            return AccessLevel.READ_WRITE;
        } else {
            return AccessLevel.NONE;
        }
    }));

    server.getNodeMap().addNode(node);
    adminFolder.addOrganizes(node);
}
 
示例11
private void addAdminWritableNodes(UaFolderNode rootNode) {
    UaFolderNode adminFolder = new UaFolderNode(
        server.getNodeMap(),
        new NodeId(namespaceIndex, "HelloWorld/OnlyAdminCanWrite"),
        new QualifiedName(namespaceIndex, "OnlyAdminCanWrite"),
        LocalizedText.english("OnlyAdminCanWrite")
    );

    server.getNodeMap().addNode(adminFolder);
    rootNode.addOrganizes(adminFolder);

    String name = "String";
    UaVariableNode node = new UaVariableNode.UaVariableNodeBuilder(server.getNodeMap())
        .setNodeId(new NodeId(namespaceIndex, "HelloWorld/OnlyAdminCanWrite/" + name))
        .setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
        .setBrowseName(new QualifiedName(namespaceIndex, name))
        .setDisplayName(LocalizedText.english(name))
        .setDataType(Identifiers.String)
        .setTypeDefinition(Identifiers.BaseDataVariableType)
        .build();

    node.setValue(new DataValue(new Variant("admin was here")));

    node.setAttributeDelegate(new RestrictedAccessDelegate(identity -> {
        if ("admin".equals(identity)) {
            return AccessLevel.READ_WRITE;
        } else {
            return AccessLevel.READ_ONLY;
        }
    }));

    server.getNodeMap().addNode(node);
    adminFolder.addOrganizes(node);
}
 
示例12
private void addMethodNode(UaFolderNode folderNode) {
    UaMethodNode methodNode = UaMethodNode.builder(server.getNodeMap())
        .setNodeId(new NodeId(namespaceIndex, "HelloWorld/sqrt(x)"))
        .setBrowseName(new QualifiedName(namespaceIndex, "sqrt(x)"))
        .setDisplayName(new LocalizedText(null, "sqrt(x)"))
        .setDescription(
            LocalizedText.english("Returns the correctly rounded positive square root of a double value."))
        .build();


    try {
        AnnotationBasedInvocationHandler invocationHandler =
            AnnotationBasedInvocationHandler.fromAnnotatedObject(
                server.getNodeMap(), new SqrtMethod());

        methodNode.setProperty(UaMethodNode.InputArguments, invocationHandler.getInputArguments());
        methodNode.setProperty(UaMethodNode.OutputArguments, invocationHandler.getOutputArguments());
        methodNode.setInvocationHandler(invocationHandler);

        server.getNodeMap().addNode(methodNode);

        folderNode.addReference(new Reference(
            folderNode.getNodeId(),
            Identifiers.HasComponent,
            methodNode.getNodeId().expanded(),
            methodNode.getNodeClass(),
            true
        ));

        methodNode.addReference(new Reference(
            methodNode.getNodeId(),
            Identifiers.HasComponent,
            folderNode.getNodeId().expanded(),
            folderNode.getNodeClass(),
            false
        ));
    } catch (Exception e) {
        logger.error("Error creating sqrt() method.", e);
    }
}
 
示例13
public static void main(final String[] args) throws Exception {

        connect()

                .thenCompose(client -> {

                    return translate(client, Identifiers.ObjectsFolder, "1:LedState", "1:E_SR", "1:Q")

                            .thenAccept(Lookup::dumpResult)
                            .thenCompose(c -> client.disconnect());

                }) // .thenCompose

                .get();

    }
 
示例14
private void registerItems(final UaNodeContext context) {

        // create a folder

        final UaFolderNode folder = new UaFolderNode(
                context,
                newNodeId(1),
                newQualifiedName("FooBarFolder"),
                LocalizedText.english("Foo Bar Folder"));
        context.getNodeManager().addNode(folder);

        // add our folder to the objects folder

        final Optional<UaNode> objectsFolder = context.getServer()
                .getAddressSpaceManager()
                .getManagedNode(Identifiers.ObjectsFolder);

        objectsFolder.ifPresent(node -> {
            ((FolderNode) node).addComponent(folder);
        });

        // add single variable

        {
            final UaVariableNode variable = new UaVariableNode(
                    context,
                    newNodeId("look-at-me-i-am-right-here-hey-watch-out-woooohoo-here-i-am"),
                    newQualifiedName("FooBar"),
                    LocalizedText.english("Foo Bar")) {

                @Override
                public DataValue getValue() {
                    return new DataValue(new Variant(Math.sin(System.currentTimeMillis() / 1000)));
                }
            };

            variable.setDataType(Identifiers.Double);

            folder.addOrganizes(variable);
            context.getNodeManager().addNode(variable);
        }

        // add method call

        {
            final UaMethodNode method = createCallMeNode(
                    context,
                    newNodeId("call-me-al"),
                    newQualifiedName("Al"));
            folder.addComponent(method);
            context.getNodeManager().addNode(method);
        }
    }
 
示例15
public OpcRootTreeFolder ( final ItemManager itemManager, final String prefix )
{
    super ( itemManager, prefix, null, Identifiers.ObjectsFolder, Collections.emptyList () );
    logger.trace ( "constructor finished" );
}
 
示例16
private void browseNode(
    NodeId browseRoot,
    LinkedHashMap<String, Field> rootFieldMap,
    Map<String, Boolean> visitedMap
) {
  if (visitedMap.containsKey(browseRoot.getIdentifier().toString())) {
    return;
  }

  visitedMap.put(browseRoot.getIdentifier().toString(), true);

  BrowseDescription browse = new BrowseDescription(
      browseRoot,
      BrowseDirection.Forward,
      Identifiers.References,
      true,
      uint(NodeClass.Object.getValue() | NodeClass.Variable.getValue()),
      uint(BrowseResultMask.All.getValue())
  );

  try {
    BrowseResult browseResult = opcUaClient.browse(browse).get();
    List<ReferenceDescription> references = toList(browseResult.getReferences());

    for (ReferenceDescription rd : references) {
      if (visitedMap.containsKey(rd.getNodeId().getIdentifier().toString())) {
        continue;
      }
      LinkedHashMap<String, Field> fieldMap = new LinkedHashMap<>();
      fieldMap.put("name", Field.create(rd.getBrowseName().getName()));
      fieldMap.put("nameSpaceIndex", Field.create(rd.getNodeId().getNamespaceIndex().intValue()));
      fieldMap.put("identifierType", Field.create(rd.getNodeId().getType().name()));
      fieldMap.put("identifier", Field.create(rd.getNodeId().getIdentifier().toString()));

      // recursively browse to children
      rd.getNodeId().local().ifPresent(nodeId -> {
        if (!nodeId.equals(browseRoot)) {
          LinkedHashMap<String, Field> childrenMap = new LinkedHashMap<>();
          browseNode(nodeId, childrenMap, visitedMap);
          if (!childrenMap.isEmpty()) {
            fieldMap.put("children",  Field.create(childrenMap));
          }
        }
      });

      rootFieldMap.put(rd.getBrowseName().getName(), Field.create(fieldMap));
    }
  } catch (InterruptedException | ExecutionException ex) {
    LOG.error(Errors.OPC_UA_10.getMessage(), browseRoot, ex.getMessage(), ex);
    errorQueue.offer(new StageException(Errors.OPC_UA_10, browseRoot, ex.getMessage(), ex));
  }
}
 
示例17
private void addArrayNodes(UaFolderNode rootNode) {
    UaFolderNode arrayTypesFolder = new UaFolderNode(
        server.getNodeMap(),
        new NodeId(namespaceIndex, "HelloWorld/ArrayTypes"),
        new QualifiedName(namespaceIndex, "ArrayTypes"),
        LocalizedText.english("ArrayTypes")
    );

    server.getNodeMap().addNode(arrayTypesFolder);
    rootNode.addOrganizes(arrayTypesFolder);

    for (Object[] os : STATIC_ARRAY_NODES) {
        String name = (String) os[0];
        NodeId typeId = (NodeId) os[1];
        Object value = os[2];
        Object array = Array.newInstance(value.getClass(), 4);
        for (int i = 0; i < 4; i++) {
            Array.set(array, i, value);
        }
        Variant variant = new Variant(array);

        UaVariableNode node = new UaVariableNode.UaVariableNodeBuilder(server.getNodeMap())
            .setNodeId(new NodeId(namespaceIndex, "HelloWorld/ArrayTypes/" + name))
            .setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
            .setUserAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
            .setBrowseName(new QualifiedName(namespaceIndex, name))
            .setDisplayName(LocalizedText.english(name))
            .setDataType(typeId)
            .setTypeDefinition(Identifiers.BaseDataVariableType)
            .setValueRank(ValueRank.OneDimension.getValue())
            .setArrayDimensions(new UInteger[]{uint(0)})
            .build();

        node.setValue(new DataValue(variant));

        node.setAttributeDelegate(new ValueLoggingDelegate());

        server.getNodeMap().addNode(node);
        arrayTypesFolder.addOrganizes(node);
    }
}