/*
* Copyright 2016 Kevin Herron
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.digitalpetri.opcua.sdk.client.subscriptions;
import java.util.function.Consumer;
import com.digitalpetri.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
import com.digitalpetri.opcua.stack.core.types.builtin.DataValue;
import com.digitalpetri.opcua.stack.core.types.builtin.ExtensionObject;
import com.digitalpetri.opcua.stack.core.types.builtin.StatusCode;
import com.digitalpetri.opcua.stack.core.types.builtin.Variant;
import com.digitalpetri.opcua.stack.core.types.builtin.unsigned.UInteger;
import com.digitalpetri.opcua.stack.core.types.enumerated.MonitoringMode;
import com.digitalpetri.opcua.stack.core.types.structured.ReadValueId;
import static com.digitalpetri.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;
public class OpcUaMonitoredItem implements UaMonitoredItem {
private volatile Consumer<DataValue> valueConsumer;
private volatile Consumer<Variant[]> eventConsumer;
private volatile StatusCode statusCode;
private volatile double revisedSamplingInterval = 0.0;
private volatile UInteger revisedQueueSize = uint(0);
private volatile ExtensionObject filterResult;
private volatile MonitoringMode monitoringMode = MonitoringMode.Disabled;
private final UInteger clientHandle;
private final ReadValueId readValueId;
private final UInteger monitoredItemId;
public OpcUaMonitoredItem(UInteger clientHandle,
ReadValueId readValueId,
UInteger monitoredItemId,
StatusCode statusCode,
double revisedSamplingInterval,
UInteger revisedQueueSize,
ExtensionObject filterResult,
MonitoringMode monitoringMode) {
this.clientHandle = clientHandle;
this.readValueId = readValueId;
this.monitoredItemId = monitoredItemId;
this.statusCode = statusCode;
this.revisedSamplingInterval = revisedSamplingInterval;
this.revisedQueueSize = revisedQueueSize;
this.filterResult = filterResult;
this.monitoringMode = monitoringMode;
}
@Override
public UInteger getClientHandle() {
return clientHandle;
}
@Override
public ReadValueId getReadValueId() {
return readValueId;
}
@Override
public UInteger getMonitoredItemId() {
return monitoredItemId;
}
@Override
public StatusCode getStatusCode() {
return statusCode;
}
@Override
public double getRevisedSamplingInterval() {
return revisedSamplingInterval;
}
@Override
public UInteger getRevisedQueueSize() {
return revisedQueueSize;
}
@Override
public ExtensionObject getFilterResult() {
return filterResult;
}
@Override
public MonitoringMode getMonitoringMode() {
return monitoringMode;
}
@Override
public void setValueConsumer(Consumer<DataValue> valueConsumer) {
this.valueConsumer = valueConsumer;
}
@Override
public void setEventConsumer(Consumer<Variant[]> eventConsumer) {
this.eventConsumer = eventConsumer;
}
void setStatusCode(StatusCode statusCode) {
this.statusCode = statusCode;
}
void setFilterResult(ExtensionObject filterResult) {
this.filterResult = filterResult;
}
void setRevisedSamplingInterval(double revisedSamplingInterval) {
this.revisedSamplingInterval = revisedSamplingInterval;
}
void setRevisedQueueSize(UInteger revisedQueueSize) {
this.revisedQueueSize = revisedQueueSize;
}
void setMonitoringMode(MonitoringMode monitoringMode) {
this.monitoringMode = monitoringMode;
}
void onValueArrived(DataValue value) {
Consumer<DataValue> c = valueConsumer;
if (c != null) c.accept(value);
}
void onEventArrived(Variant[] values) {
Consumer<Variant[]> c = eventConsumer;
if (c != null) c.accept(values);
}
}