Skip to content

Instantly share code, notes, and snippets.

@kevinherron
Last active March 12, 2021 13:35
Show Gist options
  • Save kevinherron/3215a4c624f35fdec0d75faaa442f1b3 to your computer and use it in GitHub Desktop.
Save kevinherron/3215a4c624f35fdec0d75faaa442f1b3 to your computer and use it in GitHub Desktop.
package com.digitalpetri.opcua.models.bacnet;
import java.io.InputStream;
import javax.xml.bind.JAXBException;
import com.digitalpetri.opcua.models.ModeledAddressSpace;
import com.digitalpetri.opcua.nodeset.UaNodeSet;
import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
import org.eclipse.milo.opcua.sdk.server.api.Namespace;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
import org.slf4j.LoggerFactory;
public class BacnetNamespace extends ModeledAddressSpace implements Namespace {
public static final String NAMESPACE_URI = "http://opcfoundation.org/UA/BACnet/";
private final UShort namespaceIndex;
public BacnetNamespace(OpcUaServer server, UaNodeSet nodeSet) {
super(server, nodeSet);
namespaceIndex = server.getNamespaceTable().addUri(NAMESPACE_URI);
}
@Override
public String getNamespaceUri() {
return NAMESPACE_URI;
}
@Override
public UShort getNamespaceIndex() {
return namespaceIndex;
}
public static BacnetNamespace create(OpcUaServer server) throws JAXBException {
try {
InputStream modelInputStream =
BacnetNamespace.class
.getResourceAsStream("/bacnetuamodel.xml");
UaNodeSet nodeSet = UaNodeSet.parse(modelInputStream);
BacnetNamespace namespace = new BacnetNamespace(server, nodeSet);
DataTypeInitializer.initialize(
server.getNamespaceTable(),
server.getDataTypeManager()
);
ObjectTypeInitializer.initialize(
server.getNamespaceTable(),
server.getObjectTypeManager()
);
VariableTypeInitializer.initialize(
server.getNamespaceTable(),
server.getVariableTypeManager()
);
namespace.startup();
return namespace;
} catch (JAXBException e) {
LoggerFactory.getLogger(BacnetNamespace.class)
.error("Error parsing node set: {}", e.getMessage(), e);
throw e;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment