feat(templateengine): validate native alarm source connection + source reference
This commit is contained in:
@@ -80,5 +80,6 @@ public enum ValidationCategory
|
||||
OnTriggerScriptNotFound,
|
||||
CrossCallViolation,
|
||||
MissingMetadata,
|
||||
ConnectionConfig
|
||||
ConnectionConfig,
|
||||
NativeAlarmSourceInvalid
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ public class SemanticValidator
|
||||
/// <param name="sharedScripts">Shared scripts available for CallShared references.</param>
|
||||
public ValidationResult Validate(
|
||||
FlattenedConfiguration configuration,
|
||||
IReadOnlyList<ResolvedScript>? sharedScripts = null)
|
||||
IReadOnlyList<ResolvedScript>? sharedScripts = null,
|
||||
IReadOnlySet<string>? alarmCapableConnectionNames = null)
|
||||
{
|
||||
var errors = new List<ValidationEntry>();
|
||||
var warnings = new List<ValidationEntry>();
|
||||
@@ -215,6 +216,33 @@ public class SemanticValidator
|
||||
}
|
||||
}
|
||||
|
||||
// Native alarm source bindings: connection + source reference must be
|
||||
// present, and (when the alarm-capable connection set is supplied) the
|
||||
// connection must resolve to an alarm-capable site data connection.
|
||||
foreach (var nativeSource in configuration.NativeAlarmSources)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(nativeSource.SourceReference))
|
||||
{
|
||||
errors.Add(ValidationEntry.Error(ValidationCategory.NativeAlarmSourceInvalid,
|
||||
$"Native alarm source '{nativeSource.CanonicalName}' has an empty source reference.",
|
||||
nativeSource.CanonicalName));
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(nativeSource.ConnectionName))
|
||||
{
|
||||
errors.Add(ValidationEntry.Error(ValidationCategory.NativeAlarmSourceInvalid,
|
||||
$"Native alarm source '{nativeSource.CanonicalName}' has no data connection.",
|
||||
nativeSource.CanonicalName));
|
||||
}
|
||||
else if (alarmCapableConnectionNames is not null &&
|
||||
!alarmCapableConnectionNames.Contains(nativeSource.ConnectionName))
|
||||
{
|
||||
errors.Add(ValidationEntry.Error(ValidationCategory.NativeAlarmSourceInvalid,
|
||||
$"Native alarm source '{nativeSource.CanonicalName}' references connection '{nativeSource.ConnectionName}' which is not an alarm-capable data connection on this site.",
|
||||
nativeSource.CanonicalName));
|
||||
}
|
||||
}
|
||||
|
||||
return new ValidationResult { Errors = errors, Warnings = warnings };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user