Apply code formatter
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/19db14d7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/19db14d7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/19db14d7 Branch: refs/heads/master Commit: 19db14d76cb74533c06e610c1593c13348bdd9c0 Parents: 0f35f55 Author: Jens Reimann <jreim...@redhat.com> Authored: Wed Apr 12 09:37:23 2017 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Wed Apr 12 10:55:27 2017 +0200 ---------------------------------------------------------------------- .../camel/component/milo/KeyStoreLoader.java | 216 +++-- .../apache/camel/component/milo/Messages.java | 26 +- .../camel/component/milo/NamespaceId.java | 112 +-- .../apache/camel/component/milo/NodeIds.java | 368 ++++--- .../camel/component/milo/PartialNodeId.java | 164 ++-- .../milo/client/MiloClientComponent.java | 290 +++--- .../milo/client/MiloClientConfiguration.java | 486 +++++----- .../milo/client/MiloClientConnection.java | 178 ++-- .../milo/client/MiloClientConsumer.java | 84 +- .../milo/client/MiloClientEndpoint.java | 283 +++--- .../client/MiloClientItemConfiguration.java | 6 +- .../milo/client/MiloClientProducer.java | 41 +- .../client/internal/SubscriptionManager.java | 957 +++++++++---------- .../milo/converter/ValueConverter.java | 20 +- .../component/milo/converter/package-info.java | 2 +- .../milo/server/MiloServerComponent.java | 735 +++++++------- .../milo/server/MiloServerConsumer.java | 66 +- .../milo/server/MiloServerEndpoint.java | 104 +- .../milo/server/MiloServerProducer.java | 20 +- .../milo/server/internal/CamelNamespace.java | 296 +++--- .../milo/server/internal/CamelServerItem.java | 202 ++-- .../component/milo/AbstractMiloServerTest.java | 101 +- .../MonitorItemMultiConnectionsCertTest.java | 169 ++-- .../milo/MonitorItemMultiConnectionsTest.java | 97 +- .../camel/component/milo/MonitorItemTest.java | 87 +- .../apache/camel/component/milo/NodeIdTest.java | 106 +- .../camel/component/milo/WriteClientTest.java | 236 ++--- .../component/milo/converter/ConverterTest.java | 38 +- .../component/milo/server/ServerLocalTest.java | 80 +- .../server/ServerSetCertificateManagerTest.java | 27 +- .../server/ServerSetSecurityPoliciesTest.java | 40 +- .../component/milo/testing/Application.java | 61 +- .../milo/testing/Application2Client.java | 45 +- .../milo/testing/Application2Server.java | 63 +- 34 files changed, 2865 insertions(+), 2941 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java index fa1f970..b745bb7 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/KeyStoreLoader.java @@ -30,116 +30,114 @@ import java.security.cert.X509Certificate; import java.util.NoSuchElementException; public class KeyStoreLoader { - public static final String DEFAULT_KEY_STORE_TYPE = "PKCS12"; + public static final String DEFAULT_KEY_STORE_TYPE = "PKCS12"; - private String type = DEFAULT_KEY_STORE_TYPE; - private URL url; - private String keyStorePassword; - private String keyPassword; - private String keyAlias; - - public static class Result { + private String type = DEFAULT_KEY_STORE_TYPE; + private URL url; + private String keyStorePassword; + private String keyPassword; + private String keyAlias; - private final X509Certificate certificate; - private final KeyPair keyPair; - - public Result(final X509Certificate certificate, final KeyPair keyPair) { - this.certificate = certificate; - this.keyPair = keyPair; - } - - public X509Certificate getCertificate() { - return this.certificate; - } - - public KeyPair getKeyPair() { - return this.keyPair; - } - } - - public KeyStoreLoader() { - } - - public void setType(final String type) { - this.type = type != null ? type : DEFAULT_KEY_STORE_TYPE; - } - - public String getType() { - return this.type; - } - - public void setUrl(final URL url) { - this.url = url; - } - - public URL getUrl() { - return this.url; - } - - public void setUrl(final String url) throws MalformedURLException { - this.url = new URL(url); - } - - public void setKeyStorePassword(final String keyStorePassword) { - this.keyStorePassword = keyStorePassword; - } - - public String getKeyStorePassword() { - return this.keyStorePassword; - } - - public void setKeyPassword(final String keyPassword) { - this.keyPassword = keyPassword; - } - - public String getKeyPassword() { - return this.keyPassword; - } - - public void setKeyAlias(final String keyAlias) { - this.keyAlias = keyAlias; - } - - public String getKeyAlias() { - return this.keyAlias; - } - - public Result load() throws GeneralSecurityException, IOException { - - final KeyStore keyStore = KeyStore.getInstance(this.type); - - try (InputStream stream = this.url.openStream()) { - keyStore.load(stream, this.keyStorePassword != null ? this.keyStorePassword.toCharArray() : null); - } - - String effectiveKeyAlias = this.keyAlias; - - if (effectiveKeyAlias == null) { - if (keyStore.size() != 1) { - throw new IllegalArgumentException( - "Key store contains more than one key. The use of the 'keyAlias' parameter is required."); - } - try { - effectiveKeyAlias = keyStore.aliases().nextElement(); - } catch (final NoSuchElementException e) { - throw new RuntimeException("Failed to enumerate key alias", e); - } - } - - final Key privateKey = keyStore.getKey(effectiveKeyAlias, - this.keyPassword != null ? this.keyPassword.toCharArray() : null); - - if (privateKey instanceof PrivateKey) { - final X509Certificate certificate = (X509Certificate) keyStore.getCertificate(effectiveKeyAlias); - if (certificate == null) { - return null; - } - - final PublicKey publicKey = certificate.getPublicKey(); - final KeyPair keyPair = new KeyPair(publicKey, (PrivateKey) privateKey); - return new Result(certificate, keyPair); - } + public static class Result { - return null; - } + private final X509Certificate certificate; + private final KeyPair keyPair; + + public Result(final X509Certificate certificate, final KeyPair keyPair) { + this.certificate = certificate; + this.keyPair = keyPair; + } + + public X509Certificate getCertificate() { + return this.certificate; + } + + public KeyPair getKeyPair() { + return this.keyPair; + } + } + + public KeyStoreLoader() { + } + + public void setType(final String type) { + this.type = type != null ? type : DEFAULT_KEY_STORE_TYPE; + } + + public String getType() { + return this.type; + } + + public void setUrl(final URL url) { + this.url = url; + } + + public URL getUrl() { + return this.url; + } + + public void setUrl(final String url) throws MalformedURLException { + this.url = new URL(url); + } + + public void setKeyStorePassword(final String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } + + public String getKeyStorePassword() { + return this.keyStorePassword; + } + + public void setKeyPassword(final String keyPassword) { + this.keyPassword = keyPassword; + } + + public String getKeyPassword() { + return this.keyPassword; + } + + public void setKeyAlias(final String keyAlias) { + this.keyAlias = keyAlias; + } + + public String getKeyAlias() { + return this.keyAlias; + } + + public Result load() throws GeneralSecurityException, IOException { + + final KeyStore keyStore = KeyStore.getInstance(this.type); + + try (InputStream stream = this.url.openStream()) { + keyStore.load(stream, this.keyStorePassword != null ? this.keyStorePassword.toCharArray() : null); + } + + String effectiveKeyAlias = this.keyAlias; + + if (effectiveKeyAlias == null) { + if (keyStore.size() != 1) { + throw new IllegalArgumentException("Key store contains more than one key. The use of the 'keyAlias' parameter is required."); + } + try { + effectiveKeyAlias = keyStore.aliases().nextElement(); + } catch (final NoSuchElementException e) { + throw new RuntimeException("Failed to enumerate key alias", e); + } + } + + final Key privateKey = keyStore.getKey(effectiveKeyAlias, this.keyPassword != null ? this.keyPassword.toCharArray() : null); + + if (privateKey instanceof PrivateKey) { + final X509Certificate certificate = (X509Certificate)keyStore.getCertificate(effectiveKeyAlias); + if (certificate == null) { + return null; + } + + final PublicKey publicKey = certificate.getPublicKey(); + final KeyPair keyPair = new KeyPair(publicKey, (PrivateKey)privateKey); + return new Result(certificate, keyPair); + } + + return null; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/Messages.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/Messages.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/Messages.java index f696fda..5c9be28 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/Messages.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/Messages.java @@ -20,19 +20,17 @@ import org.apache.camel.impl.DefaultMessage; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; public final class Messages { - private Messages() { - } + private Messages() { + } - /** - * Fill a Message from a DataValue - * - * @param value - * the value to feed from - * @param result - * the result to feed to - */ - public static void fillFromDataValue(final DataValue value, final DefaultMessage result) { - result.setBody(value); - result.setFault(value.getStatusCode().isBad()); - } + /** + * Fill a Message from a DataValue + * + * @param value the value to feed from + * @param result the result to feed to + */ + public static void fillFromDataValue(final DataValue value, final DefaultMessage result) { + result.setBody(value); + result.setFault(value.getStatusCode().isBad()); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/NamespaceId.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NamespaceId.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NamespaceId.java index 4960b75..ac5bf9f 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NamespaceId.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NamespaceId.java @@ -24,60 +24,60 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId; import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort; public class NamespaceId { - private final String uri; - private final UShort numeric; - - public NamespaceId(final String uri) { - requireNonNull(uri); - - this.uri = uri; - this.numeric = null; - } - - public NamespaceId(final UShort numeric) { - requireNonNull(numeric); - - this.uri = null; - this.numeric = numeric; - } - - public String getUri() { - return this.uri; - } - - public UShort getNumeric() { - return this.numeric; - } - - public boolean isNumeric() { - return this.numeric != null; - } - - @Override - public String toString() { - if (isNumeric()) { - return String.format("[Namespace - numeric: %s]", this.numeric); - } else { - return String.format("[Namespace - URI: %s]", this.uri); - } - } - - public Serializable getValue() { - return this.uri != null ? this.uri : this.numeric; - } - - public static NamespaceId fromExpandedNodeId(final ExpandedNodeId id) { - if (id == null) { - return null; - } - - if (id.getNamespaceUri() != null) { - return new NamespaceId(id.getNamespaceUri()); - } - if (id.getNamespaceIndex() != null) { - return new NamespaceId(id.getNamespaceIndex()); - } - - throw new IllegalStateException(String.format("Unknown namespace type")); - } + private final String uri; + private final UShort numeric; + + public NamespaceId(final String uri) { + requireNonNull(uri); + + this.uri = uri; + this.numeric = null; + } + + public NamespaceId(final UShort numeric) { + requireNonNull(numeric); + + this.uri = null; + this.numeric = numeric; + } + + public String getUri() { + return this.uri; + } + + public UShort getNumeric() { + return this.numeric; + } + + public boolean isNumeric() { + return this.numeric != null; + } + + @Override + public String toString() { + if (isNumeric()) { + return String.format("[Namespace - numeric: %s]", this.numeric); + } else { + return String.format("[Namespace - URI: %s]", this.uri); + } + } + + public Serializable getValue() { + return this.uri != null ? this.uri : this.numeric; + } + + public static NamespaceId fromExpandedNodeId(final ExpandedNodeId id) { + if (id == null) { + return null; + } + + if (id.getNamespaceUri() != null) { + return new NamespaceId(id.getNamespaceUri()); + } + if (id.getNamespaceIndex() != null) { + return new NamespaceId(id.getNamespaceIndex()); + } + + throw new IllegalStateException(String.format("Unknown namespace type")); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java index 1f61ebb..0dad418 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java @@ -26,197 +26,181 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.ByteString; * Helper class to work with node IDs */ public final class NodeIds { - private NodeIds() { - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final String namespace, final String node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final String namespace, final int node) { - Objects.requireNonNull(namespace); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final String namespace, final UUID node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final String namespace, final ByteString node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final int namespace, final String node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final int namespace, final int node) { - Objects.requireNonNull(namespace); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final int namespace, final UUID node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - /** - * Create an attribute value for the "node" attribute - * - * @param namespace - * the namespace to use - * @param node - * the node ID - * @return the value ready to append to a "node" URI attribute - */ - public static String nodeValue(final int namespace, final ByteString node) { - Objects.requireNonNull(namespace); - Objects.requireNonNull(node); - - final StringBuilder builder = new StringBuilder("RAW("); - appendNamespace(builder, namespace); - builder.append(';'); - appendNodeId(builder, node); - builder.append(')'); - return builder.toString(); - } - - private static void appendNamespace(final StringBuilder builder, final String namespace) { - builder.append("nsu=").append(namespace); - } - - private static void appendNamespace(final StringBuilder builder, final int namespace) { - builder.append("ns=").append(Integer.toUnsignedString(namespace)); - } - - private static void appendNodeId(final StringBuilder builder, final String nodeId) { - builder.append("s=").append(nodeId); - } - - private static void appendNodeId(final StringBuilder builder, final int nodeId) { - builder.append("i=").append(Integer.toUnsignedString(nodeId)); - } - - private static void appendNodeId(final StringBuilder builder, final UUID nodeId) { - builder.append("g=").append(nodeId); - } - - private static void appendNodeId(final StringBuilder builder, final ByteString nodeId) { - builder.append("b=").append(Base64.getEncoder().encodeToString(nodeId.bytes())); - } + private NodeIds() { + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final String namespace, final String node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final String namespace, final int node) { + Objects.requireNonNull(namespace); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final String namespace, final UUID node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final String namespace, final ByteString node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final int namespace, final String node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final int namespace, final int node) { + Objects.requireNonNull(namespace); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final int namespace, final UUID node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + /** + * Create an attribute value for the "node" attribute + * + * @param namespace the namespace to use + * @param node the node ID + * @return the value ready to append to a "node" URI attribute + */ + public static String nodeValue(final int namespace, final ByteString node) { + Objects.requireNonNull(namespace); + Objects.requireNonNull(node); + + final StringBuilder builder = new StringBuilder("RAW("); + appendNamespace(builder, namespace); + builder.append(';'); + appendNodeId(builder, node); + builder.append(')'); + return builder.toString(); + } + + private static void appendNamespace(final StringBuilder builder, final String namespace) { + builder.append("nsu=").append(namespace); + } + + private static void appendNamespace(final StringBuilder builder, final int namespace) { + builder.append("ns=").append(Integer.toUnsignedString(namespace)); + } + + private static void appendNodeId(final StringBuilder builder, final String nodeId) { + builder.append("s=").append(nodeId); + } + + private static void appendNodeId(final StringBuilder builder, final int nodeId) { + builder.append("i=").append(Integer.toUnsignedString(nodeId)); + } + + private static void appendNodeId(final StringBuilder builder, final UUID nodeId) { + builder.append("g=").append(nodeId); + } + + private static void appendNodeId(final StringBuilder builder, final ByteString nodeId) { + builder.append("b=").append(Base64.getEncoder().encodeToString(nodeId.bytes())); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/PartialNodeId.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/PartialNodeId.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/PartialNodeId.java index 21d2834..172702a 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/PartialNodeId.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/PartialNodeId.java @@ -34,86 +34,86 @@ import com.google.common.base.MoreObjects; public class PartialNodeId { - private IdType type; - - private final Serializable id; - - public PartialNodeId(final int id) { - this(uint(id)); - } - - public PartialNodeId(final UInteger id) { - requireNonNull(id); - this.id = id; - } - - public PartialNodeId(final String id) { - requireNonNull(id); - this.id = id; - } - - public PartialNodeId(final UUID id) { - requireNonNull(id); - this.id = id; - } - - public PartialNodeId(final ByteString id) { - requireNonNull(id); - this.id = id; - } - - public NodeId toNodeId(final int namespaceIndex) { - if (this.id instanceof String) { - return new NodeId(namespaceIndex, (String) this.id); - } else if (this.id instanceof UInteger) { - return new NodeId(ushort(namespaceIndex), (UInteger) this.id); - } else if (this.id instanceof ByteString) { - return new NodeId(namespaceIndex, (ByteString) this.id); - } else if (this.id instanceof UUID) { - return new NodeId(namespaceIndex, (UUID) this.id); - } - throw new IllegalStateException("Invalid id type: " + this.id); - } - - public NodeId toNodeId(final UShort namespaceIndex) { - if (this.id instanceof String) { - return new NodeId(namespaceIndex, (String) this.id); - } else if (this.id instanceof UInteger) { - return new NodeId(namespaceIndex, (UInteger) this.id); - } else if (this.id instanceof ByteString) { - return new NodeId(namespaceIndex, (ByteString) this.id); - } else if (this.id instanceof UUID) { - return new NodeId(namespaceIndex, (UUID) this.id); - } - throw new IllegalStateException("Invalid id type: " + this.id); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("type", this.type).add("id", this.id).toString(); - } - - public Serializable getValue() { - return this.id; - } - - public static PartialNodeId fromExpandedNodeId(final ExpandedNodeId node) { - if (node == null) { - return null; - } - - final Object value = node.getIdentifier(); - - if (value instanceof String) { - return new PartialNodeId((String) value); - } else if (value instanceof UInteger) { - return new PartialNodeId((UInteger) value); - } else if (value instanceof UUID) { - return new PartialNodeId((UUID) value); - } else if (value instanceof ByteString) { - return new PartialNodeId((ByteString) value); - } - - throw new IllegalStateException(String.format("Unknown node id type: " + value)); - } + private IdType type; + + private final Serializable id; + + public PartialNodeId(final int id) { + this(uint(id)); + } + + public PartialNodeId(final UInteger id) { + requireNonNull(id); + this.id = id; + } + + public PartialNodeId(final String id) { + requireNonNull(id); + this.id = id; + } + + public PartialNodeId(final UUID id) { + requireNonNull(id); + this.id = id; + } + + public PartialNodeId(final ByteString id) { + requireNonNull(id); + this.id = id; + } + + public NodeId toNodeId(final int namespaceIndex) { + if (this.id instanceof String) { + return new NodeId(namespaceIndex, (String)this.id); + } else if (this.id instanceof UInteger) { + return new NodeId(ushort(namespaceIndex), (UInteger)this.id); + } else if (this.id instanceof ByteString) { + return new NodeId(namespaceIndex, (ByteString)this.id); + } else if (this.id instanceof UUID) { + return new NodeId(namespaceIndex, (UUID)this.id); + } + throw new IllegalStateException("Invalid id type: " + this.id); + } + + public NodeId toNodeId(final UShort namespaceIndex) { + if (this.id instanceof String) { + return new NodeId(namespaceIndex, (String)this.id); + } else if (this.id instanceof UInteger) { + return new NodeId(namespaceIndex, (UInteger)this.id); + } else if (this.id instanceof ByteString) { + return new NodeId(namespaceIndex, (ByteString)this.id); + } else if (this.id instanceof UUID) { + return new NodeId(namespaceIndex, (UUID)this.id); + } + throw new IllegalStateException("Invalid id type: " + this.id); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this).add("type", this.type).add("id", this.id).toString(); + } + + public Serializable getValue() { + return this.id; + } + + public static PartialNodeId fromExpandedNodeId(final ExpandedNodeId node) { + if (node == null) { + return null; + } + + final Object value = node.getIdentifier(); + + if (value instanceof String) { + return new PartialNodeId((String)value); + } else if (value instanceof UInteger) { + return new PartialNodeId((UInteger)value); + } else if (value instanceof UUID) { + return new PartialNodeId((UUID)value); + } else if (value instanceof ByteString) { + return new PartialNodeId((ByteString)value); + } + + throw new IllegalStateException(String.format("Unknown node id type: " + value)); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientComponent.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientComponent.java index 94520e5..580d5e9 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientComponent.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientComponent.java @@ -39,181 +39,177 @@ import com.google.common.collect.Multimap; public class MiloClientComponent extends DefaultComponent { - private static final Logger LOG = LoggerFactory.getLogger(MiloClientComponent.class); + private static final Logger LOG = LoggerFactory.getLogger(MiloClientComponent.class); - private final Map<String, MiloClientConnection> cache = new HashMap<>(); - private final Multimap<String, MiloClientEndpoint> connectionMap = HashMultimap.create(); + private final Map<String, MiloClientConnection> cache = new HashMap<>(); + private final Multimap<String, MiloClientEndpoint> connectionMap = HashMultimap.create(); - private MiloClientConfiguration defaultConfiguration = new MiloClientConfiguration(); + private MiloClientConfiguration defaultConfiguration = new MiloClientConfiguration(); - @Override - protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) - throws Exception { + @Override + protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception { - final MiloClientConfiguration configuration = new MiloClientConfiguration(this.defaultConfiguration); - configuration.setEndpointUri(remaining); - setProperties(configuration, parameters); + final MiloClientConfiguration configuration = new MiloClientConfiguration(this.defaultConfiguration); + configuration.setEndpointUri(remaining); + setProperties(configuration, parameters); - return createEndpoint(uri, configuration, parameters); - } + return createEndpoint(uri, configuration, parameters); + } - private synchronized MiloClientEndpoint createEndpoint(final String uri, - final MiloClientConfiguration configuration, final Map<String, Object> parameters) throws Exception { + private synchronized MiloClientEndpoint createEndpoint(final String uri, final MiloClientConfiguration configuration, final Map<String, Object> parameters) throws Exception { - MiloClientConnection connection = this.cache.get(configuration.toCacheId()); + MiloClientConnection connection = this.cache.get(configuration.toCacheId()); - if (connection == null) { - LOG.info("Cache miss - creating new connection instance: {}", configuration.toCacheId()); + if (connection == null) { + LOG.info("Cache miss - creating new connection instance: {}", configuration.toCacheId()); - connection = new MiloClientConnection(configuration, mapToClientConfiguration(configuration)); - this.cache.put(configuration.toCacheId(), connection); - } + connection = new MiloClientConnection(configuration, mapToClientConfiguration(configuration)); + this.cache.put(configuration.toCacheId(), connection); + } - final MiloClientEndpoint endpoint = new MiloClientEndpoint(uri, this, connection, - configuration.getEndpointUri()); + final MiloClientEndpoint endpoint = new MiloClientEndpoint(uri, this, connection, configuration.getEndpointUri()); - setProperties(endpoint, parameters); + setProperties(endpoint, parameters); - // register connection with endpoint + // register connection with endpoint - this.connectionMap.put(configuration.toCacheId(), endpoint); + this.connectionMap.put(configuration.toCacheId(), endpoint); - return endpoint; - } - - private OpcUaClientConfigBuilder mapToClientConfiguration(final MiloClientConfiguration configuration) { - final OpcUaClientConfigBuilder builder = new OpcUaClientConfigBuilder(); - - whenHasText(configuration::getApplicationName, - value -> builder.setApplicationName(LocalizedText.english(value))); - whenHasText(configuration::getApplicationUri, builder::setApplicationUri); - whenHasText(configuration::getProductUri, builder::setProductUri); - - if (configuration.getRequestTimeout() != null) { - builder.setRequestTimeout(Unsigned.uint(configuration.getRequestTimeout())); - } - if (configuration.getChannelLifetime() != null) { - builder.setChannelLifetime(Unsigned.uint(configuration.getChannelLifetime())); - } + return endpoint; + } - whenHasText(configuration::getSessionName, value -> builder.setSessionName(() -> value)); - if (configuration.getSessionTimeout() != null) { - builder.setSessionTimeout(UInteger.valueOf(configuration.getSessionTimeout())); - } + private OpcUaClientConfigBuilder mapToClientConfiguration(final MiloClientConfiguration configuration) { + final OpcUaClientConfigBuilder builder = new OpcUaClientConfigBuilder(); - if (configuration.getMaxPendingPublishRequests() != null) { - builder.setMaxPendingPublishRequests(UInteger.valueOf(configuration.getMaxPendingPublishRequests())); - } + whenHasText(configuration::getApplicationName, value -> builder.setApplicationName(LocalizedText.english(value))); + whenHasText(configuration::getApplicationUri, builder::setApplicationUri); + whenHasText(configuration::getProductUri, builder::setProductUri); - if (configuration.getMaxResponseMessageSize() != null) { - builder.setMaxResponseMessageSize(UInteger.valueOf(configuration.getMaxPendingPublishRequests())); - } + if (configuration.getRequestTimeout() != null) { + builder.setRequestTimeout(Unsigned.uint(configuration.getRequestTimeout())); + } + if (configuration.getChannelLifetime() != null) { + builder.setChannelLifetime(Unsigned.uint(configuration.getChannelLifetime())); + } - if (configuration.getSecureChannelReauthenticationEnabled() != null) { - builder.setSecureChannelReauthenticationEnabled(configuration.getSecureChannelReauthenticationEnabled()); - } + whenHasText(configuration::getSessionName, value -> builder.setSessionName(() -> value)); + if (configuration.getSessionTimeout() != null) { + builder.setSessionTimeout(UInteger.valueOf(configuration.getSessionTimeout())); + } - if (configuration.getKeyStoreUrl() != null) { - setKey(configuration, builder); - } + if (configuration.getMaxPendingPublishRequests() != null) { + builder.setMaxPendingPublishRequests(UInteger.valueOf(configuration.getMaxPendingPublishRequests())); + } - return builder; - } + if (configuration.getMaxResponseMessageSize() != null) { + builder.setMaxResponseMessageSize(UInteger.valueOf(configuration.getMaxPendingPublishRequests())); + } - private void setKey(final MiloClientConfiguration configuration, final OpcUaClientConfigBuilder builder) { - final KeyStoreLoader loader = new KeyStoreLoader(); + if (configuration.getSecureChannelReauthenticationEnabled() != null) { + builder.setSecureChannelReauthenticationEnabled(configuration.getSecureChannelReauthenticationEnabled()); + } - final Result result; - try { - // key store properties - loader.setType(configuration.getKeyStoreType()); - loader.setUrl(configuration.getKeyStoreUrl()); - loader.setKeyStorePassword(configuration.getKeyStorePassword()); + if (configuration.getKeyStoreUrl() != null) { + setKey(configuration, builder); + } - // key properties - loader.setKeyAlias(configuration.getKeyAlias()); - loader.setKeyPassword(configuration.getKeyPassword()); + return builder; + } - result = loader.load(); - } catch (GeneralSecurityException | IOException e) { - throw new IllegalStateException("Failed to load key", e); - } + private void setKey(final MiloClientConfiguration configuration, final OpcUaClientConfigBuilder builder) { + final KeyStoreLoader loader = new KeyStoreLoader(); - if (result == null) { - throw new IllegalStateException("Key not found in keystore"); - } + final Result result; + try { + // key store properties + loader.setType(configuration.getKeyStoreType()); + loader.setUrl(configuration.getKeyStoreUrl()); + loader.setKeyStorePassword(configuration.getKeyStorePassword()); - builder.setCertificate(result.getCertificate()); - builder.setKeyPair(result.getKeyPair()); - } + // key properties + loader.setKeyAlias(configuration.getKeyAlias()); + loader.setKeyPassword(configuration.getKeyPassword()); - private void whenHasText(final Supplier<String> valueSupplier, final Consumer<String> valueConsumer) { - final String value = valueSupplier.get(); - if (value != null && !value.isEmpty()) { - valueConsumer.accept(value); - } - } + result = loader.load(); + } catch (GeneralSecurityException | IOException e) { + throw new IllegalStateException("Failed to load key", e); + } - /** - * All default options for client - */ - public void setDefaultConfiguration(final MiloClientConfiguration defaultConfiguration) { - this.defaultConfiguration = defaultConfiguration; - } + if (result == null) { + throw new IllegalStateException("Key not found in keystore"); + } - /** - * Default application name - */ - public void setApplicationName(final String applicationName) { - this.defaultConfiguration.setApplicationName(applicationName); - } + builder.setCertificate(result.getCertificate()); + builder.setKeyPair(result.getKeyPair()); + } - /** - * Default application URI - */ - public void setApplicationUri(final String applicationUri) { - this.defaultConfiguration.setApplicationUri(applicationUri); - } - - /** - * Default product URI - */ - public void setProductUri(final String productUri) { - this.defaultConfiguration.setProductUri(productUri); - } - - /** - * Default reconnect timeout - */ - public void setReconnectTimeout(final Long reconnectTimeout) { - this.defaultConfiguration.setRequestTimeout(reconnectTimeout); - } - - public synchronized void disposed(final MiloClientEndpoint endpoint) { - - final MiloClientConnection connection = endpoint.getConnection(); - - // unregister usage of connection - - this.connectionMap.remove(connection.getConnectionId(), endpoint); - - // test if this was the last endpoint using this connection - - if (!this.connectionMap.containsKey(connection.getConnectionId())) { - - // this was the last endpoint using the connection ... - - // ... remove from the cache - - this.cache.remove(connection.getConnectionId()); - - // ... and close - - try { - connection.close(); - } catch (final Exception e) { - LOG.warn("Failed to close connection", e); - } - } - } + private void whenHasText(final Supplier<String> valueSupplier, final Consumer<String> valueConsumer) { + final String value = valueSupplier.get(); + if (value != null && !value.isEmpty()) { + valueConsumer.accept(value); + } + } + + /** + * All default options for client + */ + public void setDefaultConfiguration(final MiloClientConfiguration defaultConfiguration) { + this.defaultConfiguration = defaultConfiguration; + } + + /** + * Default application name + */ + public void setApplicationName(final String applicationName) { + this.defaultConfiguration.setApplicationName(applicationName); + } + + /** + * Default application URI + */ + public void setApplicationUri(final String applicationUri) { + this.defaultConfiguration.setApplicationUri(applicationUri); + } + + /** + * Default product URI + */ + public void setProductUri(final String productUri) { + this.defaultConfiguration.setProductUri(productUri); + } + + /** + * Default reconnect timeout + */ + public void setReconnectTimeout(final Long reconnectTimeout) { + this.defaultConfiguration.setRequestTimeout(reconnectTimeout); + } + + public synchronized void disposed(final MiloClientEndpoint endpoint) { + + final MiloClientConnection connection = endpoint.getConnection(); + + // unregister usage of connection + + this.connectionMap.remove(connection.getConnectionId(), endpoint); + + // test if this was the last endpoint using this connection + + if (!this.connectionMap.containsKey(connection.getConnectionId())) { + + // this was the last endpoint using the connection ... + + // ... remove from the cache + + this.cache.remove(connection.getConnectionId()); + + // ... and close + + try { + connection.close(); + } catch (final Exception e) { + LOG.warn("Failed to close connection", e); + } + } + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java index 037a109..b390c08 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java @@ -26,267 +26,267 @@ import org.apache.camel.spi.UriParams; @UriParams public class MiloClientConfiguration implements Cloneable { - private static final String DEFAULT_APPLICATION_URI = "http://camel.apache.org/EclipseMilo/Client"; + private static final String DEFAULT_APPLICATION_URI = "http://camel.apache.org/EclipseMilo/Client"; - private static final String DEFAULT_APPLICATION_NAME = "Apache Camel adapter for Eclipse Milo"; + private static final String DEFAULT_APPLICATION_NAME = "Apache Camel adapter for Eclipse Milo"; - private static final String DEFAULT_PRODUCT_URI = "http://camel.apache.org/EclipseMilo"; + private static final String DEFAULT_PRODUCT_URI = "http://camel.apache.org/EclipseMilo"; - private String endpointUri; + private String endpointUri; - @UriParam - private String clientId; + @UriParam + private String clientId; - @UriParam(label = "client", defaultValue = DEFAULT_APPLICATION_NAME) - private String applicationName = DEFAULT_APPLICATION_NAME; + @UriParam(label = "client", defaultValue = DEFAULT_APPLICATION_NAME) + private String applicationName = DEFAULT_APPLICATION_NAME; - @UriParam(label = "client", defaultValue = DEFAULT_APPLICATION_URI) - private String applicationUri = DEFAULT_APPLICATION_URI; + @UriParam(label = "client", defaultValue = DEFAULT_APPLICATION_URI) + private String applicationUri = DEFAULT_APPLICATION_URI; - @UriParam(label = "client", defaultValue = DEFAULT_PRODUCT_URI) - private String productUri = DEFAULT_PRODUCT_URI; + @UriParam(label = "client", defaultValue = DEFAULT_PRODUCT_URI) + private String productUri = DEFAULT_PRODUCT_URI; - @UriParam(label = "client") - private Long requestTimeout; + @UriParam(label = "client") + private Long requestTimeout; - @UriParam(label = "client") - private Long channelLifetime; + @UriParam(label = "client") + private Long channelLifetime; - @UriParam(label = "client") - private String sessionName; + @UriParam(label = "client") + private String sessionName; - @UriParam(label = "client") - private Long sessionTimeout; + @UriParam(label = "client") + private Long sessionTimeout; - @UriParam(label = "client") - private Long maxPendingPublishRequests; + @UriParam(label = "client") + private Long maxPendingPublishRequests; - @UriParam(label = "client") - private Long maxResponseMessageSize; + @UriParam(label = "client") + private Long maxResponseMessageSize; - @UriParam(label = "client") - private Boolean secureChannelReauthenticationEnabled; + @UriParam(label = "client") + private Boolean secureChannelReauthenticationEnabled; - @UriParam(label = "client") - private URL keyStoreUrl; + @UriParam(label = "client") + private URL keyStoreUrl; - @UriParam(label = "client") - private String keyStoreType = KeyStoreLoader.DEFAULT_KEY_STORE_TYPE; + @UriParam(label = "client") + private String keyStoreType = KeyStoreLoader.DEFAULT_KEY_STORE_TYPE; - @UriParam(label = "client") - private String keyAlias; + @UriParam(label = "client") + private String keyAlias; - @UriParam(label = "client", secret = true) - private String keyStorePassword; + @UriParam(label = "client", secret = true) + private String keyStorePassword; - @UriParam(label = "client", secret = true) - private String keyPassword; - - public MiloClientConfiguration() { - } + @UriParam(label = "client", secret = true) + private String keyPassword; + + public MiloClientConfiguration() { + } - public MiloClientConfiguration(final MiloClientConfiguration other) { - this.clientId = other.clientId; - this.endpointUri = other.endpointUri; - this.applicationName = other.applicationName; - this.productUri = other.productUri; - this.requestTimeout = other.requestTimeout; - } - - public void setEndpointUri(final String endpointUri) { - this.endpointUri = endpointUri; - } - - public String getEndpointUri() { - return this.endpointUri; - } - - /** - * A virtual client id to force the creation of a new connection instance - */ - public void setClientId(final String clientId) { - this.clientId = clientId; - } - - public String getClientId() { - return this.clientId; - } - - /** - * The application name - */ - public void setApplicationName(final String applicationName) { - this.applicationName = applicationName; - } - - public String getApplicationName() { - return this.applicationName; - } - - /** - * The application URI - */ - public void setApplicationUri(final String applicationUri) { - this.applicationUri = applicationUri; - } - - public String getApplicationUri() { - return this.applicationUri; - } - - /** - * The product URI - */ - public void setProductUri(final String productUri) { - this.productUri = productUri; - } - - public String getProductUri() { - return this.productUri; - } - - /** - * Request timeout in milliseconds - */ - public void setRequestTimeout(final Long reconnectTimeout) { - this.requestTimeout = reconnectTimeout; - } - - public Long getRequestTimeout() { - return this.requestTimeout; - } - - /** - * Channel lifetime in milliseconds - */ - public void setChannelLifetime(final Long channelLifetime) { - this.channelLifetime = channelLifetime; - } - - public Long getChannelLifetime() { - return this.channelLifetime; - } - - /** - * Session name - */ - public void setSessionName(final String sessionName) { - this.sessionName = sessionName; - } - - public String getSessionName() { - return this.sessionName; - } - - /** - * Session timeout in milliseconds - */ - public void setSessionTimeout(final Long sessionTimeout) { - this.sessionTimeout = sessionTimeout; - } - - public Long getSessionTimeout() { - return this.sessionTimeout; - } - - /** - * The maximum number of pending publish requests - */ - public void setMaxPendingPublishRequests(final Long maxPendingPublishRequests) { - this.maxPendingPublishRequests = maxPendingPublishRequests; - } - - public Long getMaxPendingPublishRequests() { - return this.maxPendingPublishRequests; - } - - /** - * The maximum number of bytes a response message may have - */ - public void setMaxResponseMessageSize(final Long maxResponseMessageSize) { - this.maxResponseMessageSize = maxResponseMessageSize; - } - - public Long getMaxResponseMessageSize() { - return this.maxResponseMessageSize; - } - - /** - * Whether secure channel re-authentication is enabled - */ - public void setSecureChannelReauthenticationEnabled(final Boolean secureChannelReauthenticationEnabled) { - this.secureChannelReauthenticationEnabled = secureChannelReauthenticationEnabled; - } - - public Boolean getSecureChannelReauthenticationEnabled() { - return this.secureChannelReauthenticationEnabled; - } - - /** - * The URL where the key should be loaded from - */ - public void setKeyStoreUrl(final String keyStoreUrl) throws MalformedURLException { - this.keyStoreUrl = keyStoreUrl != null ? new URL(keyStoreUrl) : null; - } - - public URL getKeyStoreUrl() { - return this.keyStoreUrl; - } - - /** - * The key store type - */ - public void setKeyStoreType(final String keyStoreType) { - this.keyStoreType = keyStoreType; - } - - public String getKeyStoreType() { - return this.keyStoreType; - } - - /** - * The name of the key in the keystore file - */ - public void setKeyAlias(final String keyAlias) { - this.keyAlias = keyAlias; - } - - public String getKeyAlias() { - return this.keyAlias; - } - - /** - * The keystore password - */ - public void setKeyStorePassword(final String keyStorePassword) { - this.keyStorePassword = keyStorePassword; - } - - public String getKeyStorePassword() { - return this.keyStorePassword; - } - - /** - * The key password - */ - public void setKeyPassword(final String keyPassword) { - this.keyPassword = keyPassword; - } - - public String getKeyPassword() { - return this.keyPassword; - } - - @Override - public MiloClientConfiguration clone() { - return new MiloClientConfiguration(this); - } - - public String toCacheId() { - if (this.clientId != null && !this.clientId.isEmpty()) { - return this.endpointUri + "|" + this.clientId; - } else { - return this.endpointUri; - } - } + public MiloClientConfiguration(final MiloClientConfiguration other) { + this.clientId = other.clientId; + this.endpointUri = other.endpointUri; + this.applicationName = other.applicationName; + this.productUri = other.productUri; + this.requestTimeout = other.requestTimeout; + } + + public void setEndpointUri(final String endpointUri) { + this.endpointUri = endpointUri; + } + + public String getEndpointUri() { + return this.endpointUri; + } + + /** + * A virtual client id to force the creation of a new connection instance + */ + public void setClientId(final String clientId) { + this.clientId = clientId; + } + + public String getClientId() { + return this.clientId; + } + + /** + * The application name + */ + public void setApplicationName(final String applicationName) { + this.applicationName = applicationName; + } + + public String getApplicationName() { + return this.applicationName; + } + + /** + * The application URI + */ + public void setApplicationUri(final String applicationUri) { + this.applicationUri = applicationUri; + } + + public String getApplicationUri() { + return this.applicationUri; + } + + /** + * The product URI + */ + public void setProductUri(final String productUri) { + this.productUri = productUri; + } + + public String getProductUri() { + return this.productUri; + } + + /** + * Request timeout in milliseconds + */ + public void setRequestTimeout(final Long reconnectTimeout) { + this.requestTimeout = reconnectTimeout; + } + + public Long getRequestTimeout() { + return this.requestTimeout; + } + + /** + * Channel lifetime in milliseconds + */ + public void setChannelLifetime(final Long channelLifetime) { + this.channelLifetime = channelLifetime; + } + + public Long getChannelLifetime() { + return this.channelLifetime; + } + + /** + * Session name + */ + public void setSessionName(final String sessionName) { + this.sessionName = sessionName; + } + + public String getSessionName() { + return this.sessionName; + } + + /** + * Session timeout in milliseconds + */ + public void setSessionTimeout(final Long sessionTimeout) { + this.sessionTimeout = sessionTimeout; + } + + public Long getSessionTimeout() { + return this.sessionTimeout; + } + + /** + * The maximum number of pending publish requests + */ + public void setMaxPendingPublishRequests(final Long maxPendingPublishRequests) { + this.maxPendingPublishRequests = maxPendingPublishRequests; + } + + public Long getMaxPendingPublishRequests() { + return this.maxPendingPublishRequests; + } + + /** + * The maximum number of bytes a response message may have + */ + public void setMaxResponseMessageSize(final Long maxResponseMessageSize) { + this.maxResponseMessageSize = maxResponseMessageSize; + } + + public Long getMaxResponseMessageSize() { + return this.maxResponseMessageSize; + } + + /** + * Whether secure channel re-authentication is enabled + */ + public void setSecureChannelReauthenticationEnabled(final Boolean secureChannelReauthenticationEnabled) { + this.secureChannelReauthenticationEnabled = secureChannelReauthenticationEnabled; + } + + public Boolean getSecureChannelReauthenticationEnabled() { + return this.secureChannelReauthenticationEnabled; + } + + /** + * The URL where the key should be loaded from + */ + public void setKeyStoreUrl(final String keyStoreUrl) throws MalformedURLException { + this.keyStoreUrl = keyStoreUrl != null ? new URL(keyStoreUrl) : null; + } + + public URL getKeyStoreUrl() { + return this.keyStoreUrl; + } + + /** + * The key store type + */ + public void setKeyStoreType(final String keyStoreType) { + this.keyStoreType = keyStoreType; + } + + public String getKeyStoreType() { + return this.keyStoreType; + } + + /** + * The name of the key in the keystore file + */ + public void setKeyAlias(final String keyAlias) { + this.keyAlias = keyAlias; + } + + public String getKeyAlias() { + return this.keyAlias; + } + + /** + * The keystore password + */ + public void setKeyStorePassword(final String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } + + public String getKeyStorePassword() { + return this.keyStorePassword; + } + + /** + * The key password + */ + public void setKeyPassword(final String keyPassword) { + this.keyPassword = keyPassword; + } + + public String getKeyPassword() { + return this.keyPassword; + } + + @Override + public MiloClientConfiguration clone() { + return new MiloClientConfiguration(this); + } + + public String toCacheId() { + if (this.clientId != null && !this.clientId.isEmpty()) { + return this.endpointUri + "|" + this.clientId; + } else { + return this.endpointUri; + } + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java index dd90f80..7abf159 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java @@ -31,97 +31,91 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger; public class MiloClientConnection implements AutoCloseable { - private final MiloClientConfiguration configuration; - - private SubscriptionManager manager; - - private boolean initialized; - - private final OpcUaClientConfigBuilder clientConfiguration; - - public MiloClientConnection(final MiloClientConfiguration configuration, - final OpcUaClientConfigBuilder clientConfiguration) { - requireNonNull(configuration); - - // make a copy since the configuration is mutable - this.configuration = configuration.clone(); - this.clientConfiguration = clientConfiguration; - } - - protected void init() throws Exception { - this.manager = new SubscriptionManager(this.configuration, this.clientConfiguration, - Stack.sharedScheduledExecutor(), 10_000); - } - - @Override - public void close() throws Exception { - if (this.manager != null) { - this.manager.dispose(); - this.manager = null; - } - } - - protected synchronized void checkInit() { - if (this.initialized) { - return; - } - - try { - init(); - } catch (final Exception e) { - throw new RuntimeException(e); - } - this.initialized = true; - } - - @FunctionalInterface - public interface MonitorHandle { - public void unregister(); - } - - public MonitorHandle monitorValue(final MiloClientItemConfiguration configuration, - final Consumer<DataValue> valueConsumer) { - - requireNonNull(configuration); - requireNonNull(valueConsumer); - - checkInit(); - - final NamespaceId namespaceId = configuration.makeNamespaceId(); - final PartialNodeId partialNodeId = configuration.makePartialNodeId(); - - final UInteger handle = this.manager.registerItem(namespaceId, partialNodeId, - configuration.getSamplingInterval(), valueConsumer); - - return () -> MiloClientConnection.this.manager.unregisterItem(handle); - } - - public String getConnectionId() { - return this.configuration.toCacheId(); - } - - public void writeValue(final NamespaceId namespaceId, final PartialNodeId partialNodeId, final Object value, - final boolean await) { - checkInit(); - - this.manager.write(namespaceId, partialNodeId, mapValue(value), await); - } - - /** - * Map the incoming value to some value writable to the milo client - * - * @param value - * the incoming value - * @return the outgoing value - */ - private DataValue mapValue(final Object value) { - if (value instanceof DataValue) { - return (DataValue) value; - } - if (value instanceof Variant) { - return new DataValue((Variant) value); - } - return new DataValue(new Variant(value)); - } + private final MiloClientConfiguration configuration; + + private SubscriptionManager manager; + + private boolean initialized; + + private final OpcUaClientConfigBuilder clientConfiguration; + + public MiloClientConnection(final MiloClientConfiguration configuration, final OpcUaClientConfigBuilder clientConfiguration) { + requireNonNull(configuration); + + // make a copy since the configuration is mutable + this.configuration = configuration.clone(); + this.clientConfiguration = clientConfiguration; + } + + protected void init() throws Exception { + this.manager = new SubscriptionManager(this.configuration, this.clientConfiguration, Stack.sharedScheduledExecutor(), 10_000); + } + + @Override + public void close() throws Exception { + if (this.manager != null) { + this.manager.dispose(); + this.manager = null; + } + } + + protected synchronized void checkInit() { + if (this.initialized) { + return; + } + + try { + init(); + } catch (final Exception e) { + throw new RuntimeException(e); + } + this.initialized = true; + } + + @FunctionalInterface + public interface MonitorHandle { + public void unregister(); + } + + public MonitorHandle monitorValue(final MiloClientItemConfiguration configuration, final Consumer<DataValue> valueConsumer) { + + requireNonNull(configuration); + requireNonNull(valueConsumer); + + checkInit(); + + final NamespaceId namespaceId = configuration.makeNamespaceId(); + final PartialNodeId partialNodeId = configuration.makePartialNodeId(); + + final UInteger handle = this.manager.registerItem(namespaceId, partialNodeId, configuration.getSamplingInterval(), valueConsumer); + + return () -> MiloClientConnection.this.manager.unregisterItem(handle); + } + + public String getConnectionId() { + return this.configuration.toCacheId(); + } + + public void writeValue(final NamespaceId namespaceId, final PartialNodeId partialNodeId, final Object value, final boolean await) { + checkInit(); + + this.manager.write(namespaceId, partialNodeId, mapValue(value), await); + } + + /** + * Map the incoming value to some value writable to the milo client + * + * @param value the incoming value + * @return the outgoing value + */ + private DataValue mapValue(final Object value) { + if (value instanceof DataValue) { + return (DataValue)value; + } + if (value instanceof Variant) { + return new DataValue((Variant)value); + } + return new DataValue(new Variant(value)); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java index a57609e..b05ce87 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java @@ -31,62 +31,62 @@ import org.slf4j.LoggerFactory; public class MiloClientConsumer extends DefaultConsumer { - private static final Logger LOG = LoggerFactory.getLogger(MiloClientConsumer.class); + private static final Logger LOG = LoggerFactory.getLogger(MiloClientConsumer.class); - private final MiloClientConnection connection; + private final MiloClientConnection connection; - private final MiloClientItemConfiguration configuration; + private final MiloClientItemConfiguration configuration; - private MonitorHandle handle; + private MonitorHandle handle; - public MiloClientConsumer(final MiloClientEndpoint endpoint, final Processor processor, - final MiloClientConnection connection, final MiloClientItemConfiguration configuration) { - super(endpoint, processor); + public MiloClientConsumer(final MiloClientEndpoint endpoint, final Processor processor, final MiloClientConnection connection, + final MiloClientItemConfiguration configuration) { + super(endpoint, processor); - Objects.requireNonNull(connection); - Objects.requireNonNull(configuration); + Objects.requireNonNull(connection); + Objects.requireNonNull(configuration); - this.connection = connection; - this.configuration = configuration; - } + this.connection = connection; + this.configuration = configuration; + } - @Override - protected void doStart() throws Exception { - super.doStart(); + @Override + protected void doStart() throws Exception { + super.doStart(); - this.handle = this.connection.monitorValue(this.configuration, this::handleValueUpdate); - } + this.handle = this.connection.monitorValue(this.configuration, this::handleValueUpdate); + } - @Override - protected void doStop() throws Exception { - if (this.handle != null) { - this.handle.unregister(); - this.handle = null; - } + @Override + protected void doStop() throws Exception { + if (this.handle != null) { + this.handle.unregister(); + this.handle = null; + } - super.doStop(); - } + super.doStop(); + } - private void handleValueUpdate(final DataValue value) { - final Exchange exchange = getEndpoint().createExchange(); - exchange.setIn(mapMessage(value)); - try { - getAsyncProcessor().process(exchange); - } catch (final Exception e) { - LOG.debug("Failed to process message", e); - } - } + private void handleValueUpdate(final DataValue value) { + final Exchange exchange = getEndpoint().createExchange(); + exchange.setIn(mapMessage(value)); + try { + getAsyncProcessor().process(exchange); + } catch (final Exception e) { + LOG.debug("Failed to process message", e); + } + } - private Message mapMessage(final DataValue value) { - if (value == null) { - return null; - } + private Message mapMessage(final DataValue value) { + if (value == null) { + return null; + } - final DefaultMessage result = new DefaultMessage(); + final DefaultMessage result = new DefaultMessage(); - Messages.fillFromDataValue(value, result); + Messages.fillFromDataValue(value, result); - return result; - } + return result; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java index 6b0b923..7826389 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java @@ -33,146 +33,145 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId; @UriEndpoint(scheme = "milo-client", syntax = "milo-client:tcp://user:password@host:port/path/to/service?itemId=item.id&namespaceUri=urn:foo:bar", title = "Milo based OPC UA Client", consumerClass = MiloClientConsumer.class, label = "iot") public class MiloClientEndpoint extends DefaultEndpoint implements MiloClientItemConfiguration { - /** - * The OPC UA server endpoint - */ - @UriPath - @Metadata(required = "true") - private final String endpointUri; - - /** - * The node definition (see Node ID) - */ - @UriParam - private ExpandedNodeId node; - - /** - * The sampling interval in milliseconds - */ - @UriParam - private Double samplingInterval; - - /** - * The client configuration - */ - @UriParam - private MiloClientConfiguration client; - - /** - * Default "await" setting for writes - */ - @UriParam - private boolean defaultAwaitWrites = false; - - private final MiloClientConnection connection; - private final MiloClientComponent component; - - public MiloClientEndpoint(final String uri, final MiloClientComponent component, - final MiloClientConnection connection, final String endpointUri) { - super(uri, component); - - Objects.requireNonNull(component); - Objects.requireNonNull(connection); - Objects.requireNonNull(endpointUri); - - this.endpointUri = endpointUri; - - this.component = component; - this.connection = connection; - } - - @Override - protected void doStart() throws Exception { - super.doStart(); - } - - @Override - protected void doStop() throws Exception { - this.component.disposed(this); - super.doStop(); - } - - @Override - public Producer createProducer() throws Exception { - return new MiloClientProducer(this, this.connection, this, this.defaultAwaitWrites); - } - - @Override - public Consumer createConsumer(final Processor processor) throws Exception { - return new MiloClientConsumer(this, processor, this.connection, this); - } - - @Override - public boolean isSingleton() { - return true; - } - - public MiloClientConnection getConnection() { - return this.connection; - } - - // item configuration - - @Override - public PartialNodeId makePartialNodeId() { - PartialNodeId result = null; - - if (this.node != null) { - result = PartialNodeId.fromExpandedNodeId(this.node); - } - - if (result == null) { - throw new IllegalStateException("Missing or invalid node id configuration"); - } else { - return result; - } - } - - @Override - public NamespaceId makeNamespaceId() { - NamespaceId result = null; - - if (this.node != null) { - result = NamespaceId.fromExpandedNodeId(this.node); - } - - if (result == null) { - throw new IllegalStateException("Missing or invalid node id configuration"); - } else { - return result; - } - } - - public void setNode(final String node) { - if (node == null) { - this.node = null; - } else { - this.node = ExpandedNodeId.parse(node); - } - } - - public String getNode() { - if (this.node != null) { - return this.node.toParseableString(); - } else { - return null; - } - } - - @Override - public Double getSamplingInterval() { - return this.samplingInterval; - } - - public void setSamplingInterval(final Double samplingInterval) { - this.samplingInterval = samplingInterval; - } - - public boolean isDefaultAwaitWrites() { - return this.defaultAwaitWrites; - } - - public void setDefaultAwaitWrites(final boolean defaultAwaitWrites) { - this.defaultAwaitWrites = defaultAwaitWrites; - } + /** + * The OPC UA server endpoint + */ + @UriPath + @Metadata(required = "true") + private final String endpointUri; + + /** + * The node definition (see Node ID) + */ + @UriParam + private ExpandedNodeId node; + + /** + * The sampling interval in milliseconds + */ + @UriParam + private Double samplingInterval; + + /** + * The client configuration + */ + @UriParam + private MiloClientConfiguration client; + + /** + * Default "await" setting for writes + */ + @UriParam + private boolean defaultAwaitWrites = false; + + private final MiloClientConnection connection; + private final MiloClientComponent component; + + public MiloClientEndpoint(final String uri, final MiloClientComponent component, final MiloClientConnection connection, final String endpointUri) { + super(uri, component); + + Objects.requireNonNull(component); + Objects.requireNonNull(connection); + Objects.requireNonNull(endpointUri); + + this.endpointUri = endpointUri; + + this.component = component; + this.connection = connection; + } + + @Override + protected void doStart() throws Exception { + super.doStart(); + } + + @Override + protected void doStop() throws Exception { + this.component.disposed(this); + super.doStop(); + } + + @Override + public Producer createProducer() throws Exception { + return new MiloClientProducer(this, this.connection, this, this.defaultAwaitWrites); + } + + @Override + public Consumer createConsumer(final Processor processor) throws Exception { + return new MiloClientConsumer(this, processor, this.connection, this); + } + + @Override + public boolean isSingleton() { + return true; + } + + public MiloClientConnection getConnection() { + return this.connection; + } + + // item configuration + + @Override + public PartialNodeId makePartialNodeId() { + PartialNodeId result = null; + + if (this.node != null) { + result = PartialNodeId.fromExpandedNodeId(this.node); + } + + if (result == null) { + throw new IllegalStateException("Missing or invalid node id configuration"); + } else { + return result; + } + } + + @Override + public NamespaceId makeNamespaceId() { + NamespaceId result = null; + + if (this.node != null) { + result = NamespaceId.fromExpandedNodeId(this.node); + } + + if (result == null) { + throw new IllegalStateException("Missing or invalid node id configuration"); + } else { + return result; + } + } + + public void setNode(final String node) { + if (node == null) { + this.node = null; + } else { + this.node = ExpandedNodeId.parse(node); + } + } + + public String getNode() { + if (this.node != null) { + return this.node.toParseableString(); + } else { + return null; + } + } + + @Override + public Double getSamplingInterval() { + return this.samplingInterval; + } + + public void setSamplingInterval(final Double samplingInterval) { + this.samplingInterval = samplingInterval; + } + + public boolean isDefaultAwaitWrites() { + return this.defaultAwaitWrites; + } + + public void setDefaultAwaitWrites(final boolean defaultAwaitWrites) { + this.defaultAwaitWrites = defaultAwaitWrites; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientItemConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientItemConfiguration.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientItemConfiguration.java index a8a0b5f..2468449 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientItemConfiguration.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientItemConfiguration.java @@ -20,9 +20,9 @@ import org.apache.camel.component.milo.NamespaceId; import org.apache.camel.component.milo.PartialNodeId; public interface MiloClientItemConfiguration { - public NamespaceId makeNamespaceId(); + public NamespaceId makeNamespaceId(); - public PartialNodeId makePartialNodeId(); + public PartialNodeId makePartialNodeId(); - public Double getSamplingInterval(); + public Double getSamplingInterval(); } http://git-wip-us.apache.org/repos/asf/camel/blob/19db14d7/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java index 0082596..bc3d6c2 100644 --- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java +++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java @@ -27,37 +27,36 @@ import org.slf4j.LoggerFactory; public class MiloClientProducer extends DefaultProducer { - private static final Logger LOG = LoggerFactory.getLogger(MiloClientProducer.class); + private static final Logger LOG = LoggerFactory.getLogger(MiloClientProducer.class); - private final MiloClientConnection connection; + private final MiloClientConnection connection; - private final NamespaceId namespaceId; + private final NamespaceId namespaceId; - private final PartialNodeId partialNodeId; + private final PartialNodeId partialNodeId; - private final boolean defaultAwaitWrites; + private final boolean defaultAwaitWrites; - public MiloClientProducer(final Endpoint endpoint, final MiloClientConnection connection, - final MiloClientItemConfiguration configuration, final boolean defaultAwaitWrites) { - super(endpoint); + public MiloClientProducer(final Endpoint endpoint, final MiloClientConnection connection, final MiloClientItemConfiguration configuration, final boolean defaultAwaitWrites) { + super(endpoint); - this.connection = connection; - this.defaultAwaitWrites = defaultAwaitWrites; + this.connection = connection; + this.defaultAwaitWrites = defaultAwaitWrites; - this.namespaceId = configuration.makeNamespaceId(); - this.partialNodeId = configuration.makePartialNodeId(); - } + this.namespaceId = configuration.makeNamespaceId(); + this.partialNodeId = configuration.makePartialNodeId(); + } - @Override - public void process(final Exchange exchange) throws Exception { - final Message msg = exchange.getIn(); - final Object value = msg.getBody(); + @Override + public void process(final Exchange exchange) throws Exception { + final Message msg = exchange.getIn(); + final Object value = msg.getBody(); - LOG.debug("Processing message: {}", value); + LOG.debug("Processing message: {}", value); - final Boolean await = msg.getHeader("await", this.defaultAwaitWrites, Boolean.class); + final Boolean await = msg.getHeader("await", this.defaultAwaitWrites, Boolean.class); - this.connection.writeValue(this.namespaceId, this.partialNodeId, value, await != null ? await : false); - } + this.connection.writeValue(this.namespaceId, this.partialNodeId, value, await != null ? await : false); + } }