protected static ServiceResult ValidateMonitoredItemCreateRequest(MonitoredItemCreateRequest item)
{
// check for null structure.
if (item == null)
{
return new ServiceResult(StatusCodes.BadStructureMissing);
}
// validate read value id component.
ServiceResult error = ReadValueId.Validate(item.ItemToMonitor);
if (ServiceResult.IsBad(error))
{
return error;
}
// check for valid monitoring mode.
if ((int)item.MonitoringMode < 0 || (int)item.MonitoringMode > (int)MonitoringMode.Reporting)
{
return new ServiceResult(StatusCodes.BadMonitoringModeInvalid);
}
// check for null structure.
MonitoringParameters attributes = item.RequestedParameters;
error = ValidateMonitoringAttributes(attributes);
if (ServiceResult.IsBad(error))
{
return error;
}
// check that no filter is specified for non-value attributes.
if (item.ItemToMonitor.AttributeId != Attributes.Value && item.ItemToMonitor.AttributeId != Attributes.EventNotifier)
{
if (!ExtensionObject.IsNull(attributes.Filter))
{
return new ServiceResult(StatusCodes.BadFilterNotAllowed);
}
}
else
{
error = ValidateMonitoringFilter(attributes.Filter);
if (ServiceResult.IsBad(error))
{
return error;
}
}
// passed basic validation.
return null;
}