docs: backfill XML documentation across 756 files
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public members surfaced by commentchecker — resolves 5,847 of 5,869 issues (99.6%) across three /fixdocs passes.
This commit is contained in:
@@ -42,6 +42,7 @@ public class AlarmsCommand : CommandBase
|
||||
/// Connects to the server, subscribes to alarm events, and streams operator-facing alarm state changes to the console.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -36,10 +36,7 @@ public class BrowseCommand : CommandBase
|
||||
[CommandOption("recursive", 'r', Description = "Browse recursively (uses --depth as max depth)")]
|
||||
public bool Recursive { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server and prints a tree view of the requested address-space branch.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -15,10 +15,7 @@ public class ConnectCommand : CommandBase
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server and prints the negotiated endpoint details for operator verification.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -56,10 +56,7 @@ public class HistoryReadCommand : CommandBase
|
||||
[CommandOption("interval", Description = "Processing interval in milliseconds for aggregates")]
|
||||
public double IntervalMs { get; init; } = 3600000;
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server and prints raw or processed historical values for the requested node.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -24,10 +24,7 @@ public class ReadCommand : CommandBase
|
||||
[CommandOption("node", 'n', Description = "Node ID (e.g. ns=2;s=MyNode)", IsRequired = true)]
|
||||
public string NodeId { get; init; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server and prints the current value, status, and timestamps for the requested node.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -15,10 +15,8 @@ public class RedundancyCommand : CommandBase
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server and prints redundancy mode, service level, and partner-server identity data.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <summary>Connects to the server and prints redundancy mode, service level, and partner-server identity data.</summary>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -67,11 +67,7 @@ public class SubscribeCommand : CommandBase
|
||||
[CommandOption("summary-file", Description = "Write summary to this file path on exit (in addition to stdout)")]
|
||||
public string? SummaryFile { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the server, subscribes to <see cref="NodeId" /> (or its subtree when recursive),
|
||||
/// streams data-change notifications to the console, and prints a summary when the command exits.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
@@ -35,6 +35,7 @@ public class WriteCommand : CommandBase
|
||||
/// Connects to the server, converts the supplied value to the node's current data type, and issues the write.
|
||||
/// </summary>
|
||||
/// <param name="console">The CLI console used for output and cancellation handling.</param>
|
||||
/// <inheritdoc />
|
||||
public override async ValueTask ExecuteAsync(IConsole console)
|
||||
{
|
||||
ConfigureLogging();
|
||||
|
||||
+3
@@ -12,6 +12,9 @@ internal sealed class DefaultApplicationConfigurationFactory : IApplicationConfi
|
||||
{
|
||||
private static readonly ILogger Logger = Log.ForContext<DefaultApplicationConfigurationFactory>();
|
||||
|
||||
/// <summary>Creates an OPC UA application configuration from the provided connection settings.</summary>
|
||||
/// <param name="settings">The connection settings to use.</param>
|
||||
/// <param name="ct">Token to cancel the operation.</param>
|
||||
public async Task<ApplicationConfiguration> CreateAsync(ConnectionSettings settings, CancellationToken ct)
|
||||
{
|
||||
// Resolve the canonical PKI path lazily on first use so constructing a
|
||||
|
||||
@@ -11,6 +11,10 @@ internal sealed class DefaultEndpointDiscovery : IEndpointDiscovery
|
||||
{
|
||||
private static readonly ILogger Logger = Log.ForContext<DefaultEndpointDiscovery>();
|
||||
|
||||
/// <summary>Selects an OPC UA endpoint matching the requested security mode.</summary>
|
||||
/// <param name="config">The application configuration.</param>
|
||||
/// <param name="endpointUrl">The endpoint URL to query.</param>
|
||||
/// <param name="requestedMode">The requested message security mode.</param>
|
||||
public EndpointDescription SelectEndpoint(ApplicationConfiguration config, string endpointUrl,
|
||||
MessageSecurityMode requestedMode)
|
||||
{
|
||||
|
||||
@@ -11,6 +11,14 @@ internal sealed class DefaultSessionFactory : ISessionFactory
|
||||
{
|
||||
private static readonly ILogger Logger = Log.ForContext<DefaultSessionFactory>();
|
||||
|
||||
/// <summary>Creates a new OPC UA session.</summary>
|
||||
/// <param name="config">The OPC UA application configuration.</param>
|
||||
/// <param name="endpoint">The endpoint description to connect to.</param>
|
||||
/// <param name="sessionName">The name for the session.</param>
|
||||
/// <param name="sessionTimeoutMs">The session timeout in milliseconds.</param>
|
||||
/// <param name="identity">The user identity for the session.</param>
|
||||
/// <param name="ct">The cancellation token.</param>
|
||||
/// <returns>An adapter wrapping the created session.</returns>
|
||||
public async Task<ISessionAdapter> CreateSessionAsync(
|
||||
ApplicationConfiguration config,
|
||||
EndpointDescription endpoint,
|
||||
|
||||
+2
@@ -11,5 +11,7 @@ internal interface IApplicationConfigurationFactory
|
||||
/// <summary>
|
||||
/// Creates a validated ApplicationConfiguration for the given connection settings.
|
||||
/// </summary>
|
||||
/// <param name="settings">The connection settings to configure.</param>
|
||||
/// <param name="ct">Cancellation token for the operation.</param>
|
||||
Task<ApplicationConfiguration> CreateAsync(ConnectionSettings settings, CancellationToken ct = default);
|
||||
}
|
||||
@@ -11,6 +11,9 @@ internal interface IEndpointDiscovery
|
||||
/// Discovers endpoints at the given URL and returns the best match for the requested security mode.
|
||||
/// Also rewrites the endpoint URL hostname to match the requested URL when they differ.
|
||||
/// </summary>
|
||||
/// <param name="config">The OPC UA application configuration.</param>
|
||||
/// <param name="endpointUrl">The endpoint URL to discover.</param>
|
||||
/// <param name="requestedMode">The requested message security mode.</param>
|
||||
EndpointDescription SelectEndpoint(ApplicationConfiguration config, string endpointUrl,
|
||||
MessageSecurityMode requestedMode);
|
||||
}
|
||||
@@ -11,6 +11,8 @@ public static class AggregateTypeMapper
|
||||
/// <summary>
|
||||
/// Returns the OPC UA NodeId for the specified aggregate type.
|
||||
/// </summary>
|
||||
/// <param name="aggregate">The aggregate type to map to a NodeId.</param>
|
||||
/// <returns>The OPC UA NodeId for the aggregate function.</returns>
|
||||
public static NodeId ToNodeId(AggregateType aggregate)
|
||||
{
|
||||
return aggregate switch
|
||||
|
||||
@@ -8,9 +8,9 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Helpers;
|
||||
/// </summary>
|
||||
public static class SecurityModeMapper
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts a <see cref="SecurityMode" /> to an OPC UA <see cref="MessageSecurityMode" />.
|
||||
/// </summary>
|
||||
/// <summary>Converts a SecurityMode to an OPC UA MessageSecurityMode.</summary>
|
||||
/// <param name="mode">The security mode to convert.</param>
|
||||
/// <returns>The corresponding message security mode.</returns>
|
||||
public static MessageSecurityMode ToMessageSecurityMode(SecurityMode mode)
|
||||
{
|
||||
return mode switch
|
||||
|
||||
@@ -5,5 +5,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared;
|
||||
/// </summary>
|
||||
public interface IOpcUaClientServiceFactory
|
||||
{
|
||||
/// <summary>Creates a new OPC UA client service instance.</summary>
|
||||
/// <returns>A new <see cref="IOpcUaClientService"/> instance.</returns>
|
||||
IOpcUaClientService Create();
|
||||
}
|
||||
@@ -5,6 +5,20 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class AlarmEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>Initializes a new instance of the <see cref="AlarmEventArgs"/> class.</summary>
|
||||
/// <param name="sourceName">The name of the source object that raised the alarm.</param>
|
||||
/// <param name="conditionName">The condition type name.</param>
|
||||
/// <param name="severity">The alarm severity (0-1000).</param>
|
||||
/// <param name="message">Human-readable alarm message.</param>
|
||||
/// <param name="retain">Whether the alarm should be retained in the display.</param>
|
||||
/// <param name="activeState">Whether the alarm condition is currently active.</param>
|
||||
/// <param name="ackedState">Whether the alarm has been acknowledged.</param>
|
||||
/// <param name="time">The time the event occurred.</param>
|
||||
/// <param name="eventId">The EventId used for alarm acknowledgment.</param>
|
||||
/// <param name="conditionNodeId">The NodeId of the condition instance.</param>
|
||||
/// <param name="operatorComment">Operator-supplied comment on acknowledgment transitions.</param>
|
||||
/// <param name="originalRaiseTimestampUtc">When the alarm originally entered the active state.</param>
|
||||
/// <param name="alarmCategory">Upstream alarm taxonomy bucket (e.g. Process, Safety, Diagnostics).</param>
|
||||
public AlarmEventArgs(
|
||||
string sourceName,
|
||||
string conditionName,
|
||||
|
||||
@@ -5,6 +5,11 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class BrowseResult
|
||||
{
|
||||
/// <summary>Initializes a new instance of the BrowseResult class.</summary>
|
||||
/// <param name="nodeId">The string representation of the node's NodeId.</param>
|
||||
/// <param name="displayName">The display name of the node.</param>
|
||||
/// <param name="nodeClass">The node class (e.g., "Object", "Variable", "Method").</param>
|
||||
/// <param name="hasChildren">Whether the node has child references.</param>
|
||||
public BrowseResult(string nodeId, string displayName, string nodeClass, bool hasChildren)
|
||||
{
|
||||
NodeId = nodeId;
|
||||
|
||||
@@ -5,6 +5,13 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class ConnectionInfo
|
||||
{
|
||||
/// <summary>Initializes a new instance of the ConnectionInfo with session details.</summary>
|
||||
/// <param name="endpointUrl">The endpoint URL of the connected server.</param>
|
||||
/// <param name="serverName">The server application name.</param>
|
||||
/// <param name="securityMode">The security mode in use.</param>
|
||||
/// <param name="securityPolicyUri">The security policy URI.</param>
|
||||
/// <param name="sessionId">The session identifier.</param>
|
||||
/// <param name="sessionName">The session name.</param>
|
||||
public ConnectionInfo(
|
||||
string endpointUrl,
|
||||
string serverName,
|
||||
|
||||
@@ -5,6 +5,10 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class ConnectionStateChangedEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>Initializes a new instance of the ConnectionStateChangedEventArgs class.</summary>
|
||||
/// <param name="oldState">The previous connection state.</param>
|
||||
/// <param name="newState">The new connection state.</param>
|
||||
/// <param name="endpointUrl">The endpoint URL associated with the state change.</param>
|
||||
public ConnectionStateChangedEventArgs(ConnectionState oldState, ConnectionState newState, string endpointUrl)
|
||||
{
|
||||
OldState = oldState;
|
||||
|
||||
@@ -7,6 +7,9 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class DataChangedEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>Initializes a new instance of the DataChangedEventArgs class.</summary>
|
||||
/// <param name="nodeId">The node ID that changed.</param>
|
||||
/// <param name="value">The new data value.</param>
|
||||
public DataChangedEventArgs(string nodeId, DataValue value)
|
||||
{
|
||||
NodeId = nodeId;
|
||||
|
||||
@@ -5,6 +5,11 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
|
||||
/// </summary>
|
||||
public sealed class RedundancyInfo
|
||||
{
|
||||
/// <summary>Initializes a new instance of the RedundancyInfo class.</summary>
|
||||
/// <param name="mode">The redundancy mode (e.g., "None", "Cold", "Warm", "Hot").</param>
|
||||
/// <param name="serviceLevel">The server's current service level (0-255).</param>
|
||||
/// <param name="serverUris">URIs of all servers in the redundant set.</param>
|
||||
/// <param name="applicationUri">The application URI of the connected server.</param>
|
||||
public RedundancyInfo(string mode, byte serviceLevel, string[] serverUris, string applicationUri)
|
||||
{
|
||||
Mode = mode;
|
||||
|
||||
@@ -5,6 +5,8 @@ namespace ZB.MOM.WW.OtOpcUa.Client.Shared;
|
||||
/// </summary>
|
||||
public sealed class OpcUaClientServiceFactory : IOpcUaClientServiceFactory
|
||||
{
|
||||
/// <summary>Creates a new OPC UA client service instance with production adapters.</summary>
|
||||
/// <returns>A new OpcUaClientService instance.</returns>
|
||||
public IOpcUaClientService Create()
|
||||
{
|
||||
return new OpcUaClientService();
|
||||
|
||||
@@ -10,11 +10,13 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI;
|
||||
|
||||
public class App : Application
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override void Initialize()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
|
||||
@@ -32,35 +32,41 @@ public partial class DateTimeRangePicker : UserControl
|
||||
|
||||
private bool _isUpdating;
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="DateTimeRangePicker"/> class.</summary>
|
||||
public DateTimeRangePicker()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the start date and time.</summary>
|
||||
public DateTimeOffset? StartDateTime
|
||||
{
|
||||
get => GetValue(StartDateTimeProperty);
|
||||
set => SetValue(StartDateTimeProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the end date and time.</summary>
|
||||
public DateTimeOffset? EndDateTime
|
||||
{
|
||||
get => GetValue(EndDateTimeProperty);
|
||||
set => SetValue(EndDateTimeProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the start date/time as formatted text.</summary>
|
||||
public string StartText
|
||||
{
|
||||
get => GetValue(StartTextProperty);
|
||||
set => SetValue(StartTextProperty, value);
|
||||
}
|
||||
|
||||
/// <summary>Gets or sets the end date/time as formatted text.</summary>
|
||||
public string EndText
|
||||
{
|
||||
get => GetValue(EndTextProperty);
|
||||
set => SetValue(EndTextProperty, value);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnLoaded(RoutedEventArgs e)
|
||||
{
|
||||
base.OnLoaded(e);
|
||||
@@ -82,6 +88,7 @@ public partial class DateTimeRangePicker : UserControl
|
||||
if (lastWeek != null) lastWeek.Click += (_, _) => ApplyPreset(TimeSpan.FromDays(7));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
|
||||
{
|
||||
base.OnPropertyChanged(change);
|
||||
|
||||
@@ -7,6 +7,9 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Helpers;
|
||||
/// </summary>
|
||||
internal static class StatusCodeFormatter
|
||||
{
|
||||
/// <summary>Formats an OPC UA status code as a hexadecimal code with description.</summary>
|
||||
/// <param name="statusCode">The OPC UA status code to format.</param>
|
||||
/// <returns>A formatted string in the form "0xHEX (description)".</returns>
|
||||
public static string Format(StatusCode statusCode)
|
||||
{
|
||||
var code = statusCode.Code;
|
||||
|
||||
@@ -7,6 +7,9 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Helpers;
|
||||
/// </summary>
|
||||
internal static class ValueFormatter
|
||||
{
|
||||
/// <summary>Formats an OPC UA value for display, handling arrays and enumerables specially.</summary>
|
||||
/// <param name="value">The value to format, or null.</param>
|
||||
/// <returns>A string representation of the value suitable for display.</returns>
|
||||
public static string Format(object? value)
|
||||
{
|
||||
if (value is null) return "(null)";
|
||||
|
||||
@@ -4,8 +4,11 @@ using ZB.MOM.WW.OtOpcUa.Client.Shared;
|
||||
|
||||
namespace ZB.MOM.WW.OtOpcUa.Client.UI;
|
||||
|
||||
/// <summary>Entry point for the OPC UA client UI application.</summary>
|
||||
public class Program
|
||||
{
|
||||
/// <summary>Main entry point for the application.</summary>
|
||||
/// <param name="args">Command-line arguments passed to the application.</param>
|
||||
[STAThread]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
@@ -21,6 +24,8 @@ public class Program
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Builds the Avalonia AppBuilder with platform-specific configuration.</summary>
|
||||
/// <returns>Configured AppBuilder for desktop lifetime.</returns>
|
||||
public static AppBuilder BuildAvaloniaApp()
|
||||
{
|
||||
return AppBuilder.Configure<App>()
|
||||
|
||||
@@ -7,6 +7,8 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Services;
|
||||
/// </summary>
|
||||
public sealed class AvaloniaUiDispatcher : IUiDispatcher
|
||||
{
|
||||
/// <summary>Posts an action to the Avalonia UI thread for execution.</summary>
|
||||
/// <param name="action">The action to execute on the UI thread.</param>
|
||||
public void Post(Action action)
|
||||
{
|
||||
Dispatcher.UIThread.Post(action);
|
||||
|
||||
@@ -5,6 +5,9 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Services;
|
||||
/// </summary>
|
||||
public interface ISettingsService
|
||||
{
|
||||
/// <summary>Loads user settings from persistent storage.</summary>
|
||||
UserSettings Load();
|
||||
/// <summary>Saves user settings to persistent storage.</summary>
|
||||
/// <param name="settings">The settings to save.</param>
|
||||
void Save(UserSettings settings);
|
||||
}
|
||||
|
||||
@@ -8,5 +8,6 @@ public interface IUiDispatcher
|
||||
/// <summary>
|
||||
/// Posts an action to be executed on the UI thread.
|
||||
/// </summary>
|
||||
/// <param name="action">The action to execute on the UI thread.</param>
|
||||
void Post(Action action);
|
||||
}
|
||||
@@ -19,6 +19,8 @@ public sealed class JsonSettingsService : ISettingsService
|
||||
WriteIndented = true
|
||||
};
|
||||
|
||||
/// <summary>Loads user settings from the settings file.</summary>
|
||||
/// <returns>The loaded user settings, or a new default instance if load fails.</returns>
|
||||
public UserSettings Load()
|
||||
{
|
||||
try
|
||||
@@ -35,6 +37,8 @@ public sealed class JsonSettingsService : ISettingsService
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Saves user settings to the settings file.</summary>
|
||||
/// <param name="settings">The user settings to save.</param>
|
||||
public void Save(UserSettings settings)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -6,6 +6,8 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Services;
|
||||
/// </summary>
|
||||
public sealed class SynchronousUiDispatcher : IUiDispatcher
|
||||
{
|
||||
/// <summary>Executes the action synchronously on the calling thread.</summary>
|
||||
/// <param name="action">The action to execute.</param>
|
||||
public void Post(Action action)
|
||||
{
|
||||
action();
|
||||
|
||||
@@ -44,6 +44,9 @@ public partial class AlarmsViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty] private int _activeAlarmCount;
|
||||
|
||||
/// <summary>Initializes a new instance of the AlarmsViewModel class.</summary>
|
||||
/// <param name="service">The OPC UA client service.</param>
|
||||
/// <param name="dispatcher">The UI dispatcher for thread-safe operations.</param>
|
||||
public AlarmsViewModel(IOpcUaClientService service, IUiDispatcher dispatcher)
|
||||
{
|
||||
_service = service;
|
||||
@@ -168,6 +171,9 @@ public partial class AlarmsViewModel : ObservableObject
|
||||
/// <summary>
|
||||
/// Acknowledges an alarm and returns (success, message).
|
||||
/// </summary>
|
||||
/// <param name="alarm">The alarm event to acknowledge.</param>
|
||||
/// <param name="comment">Optional comment for the acknowledgment.</param>
|
||||
/// <returns>A tuple with success flag and message.</returns>
|
||||
public async Task<(bool Success, string Message)> AcknowledgeAlarmAsync(AlarmEventViewModel alarm, string comment)
|
||||
{
|
||||
if (!IsConnected || alarm.EventId == null || alarm.ConditionNodeId == null)
|
||||
@@ -197,6 +203,8 @@ public partial class AlarmsViewModel : ObservableObject
|
||||
/// <summary>
|
||||
/// Restores an alarm subscription and requests a condition refresh.
|
||||
/// </summary>
|
||||
/// <param name="sourceNodeId">The source node ID to restore the subscription for.</param>
|
||||
/// <returns>A task that completes when the restore operation finishes.</returns>
|
||||
public async Task RestoreAlarmSubscriptionAsync(string? sourceNodeId)
|
||||
{
|
||||
if (!IsConnected || string.IsNullOrWhiteSpace(sourceNodeId)) return;
|
||||
|
||||
@@ -13,6 +13,11 @@ public class BrowseTreeViewModel : ObservableObject
|
||||
private readonly IUiDispatcher _dispatcher;
|
||||
private readonly IOpcUaClientService _service;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BrowseTreeViewModel"/> class.
|
||||
/// </summary>
|
||||
/// <param name="service">The OPC UA client service.</param>
|
||||
/// <param name="dispatcher">The UI dispatcher for marshaling updates.</param>
|
||||
public BrowseTreeViewModel(IOpcUaClientService service, IUiDispatcher dispatcher)
|
||||
{
|
||||
_service = service;
|
||||
|
||||
@@ -7,6 +7,11 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.ViewModels;
|
||||
/// </summary>
|
||||
public class HistoryValueViewModel : ObservableObject
|
||||
{
|
||||
/// <summary>Initializes a new instance of the <see cref="HistoryValueViewModel"/> class.</summary>
|
||||
/// <param name="value">The historical value.</param>
|
||||
/// <param name="status">The status code or text.</param>
|
||||
/// <param name="sourceTimestamp">The source timestamp in string format.</param>
|
||||
/// <param name="serverTimestamp">The server timestamp in string format.</param>
|
||||
public HistoryValueViewModel(string value, string status, string sourceTimestamp, string serverTimestamp)
|
||||
{
|
||||
Value = value;
|
||||
@@ -15,8 +20,12 @@ public class HistoryValueViewModel : ObservableObject
|
||||
ServerTimestamp = serverTimestamp;
|
||||
}
|
||||
|
||||
/// <summary>Gets the historical value.</summary>
|
||||
public string Value { get; }
|
||||
/// <summary>Gets the status code or text.</summary>
|
||||
public string Status { get; }
|
||||
/// <summary>Gets the source timestamp in string format.</summary>
|
||||
public string SourceTimestamp { get; }
|
||||
/// <summary>Gets the server timestamp in string format.</summary>
|
||||
public string ServerTimestamp { get; }
|
||||
}
|
||||
@@ -34,6 +34,9 @@ public partial class HistoryViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty] private DateTimeOffset? _startTime = DateTimeOffset.UtcNow.AddHours(-1);
|
||||
|
||||
/// <summary>Initializes a new instance of the HistoryViewModel.</summary>
|
||||
/// <param name="service">The OPC UA client service.</param>
|
||||
/// <param name="dispatcher">The UI dispatcher for thread marshalling.</param>
|
||||
public HistoryViewModel(IOpcUaClientService service, IUiDispatcher dispatcher)
|
||||
{
|
||||
_service = service;
|
||||
@@ -53,6 +56,7 @@ public partial class HistoryViewModel : ObservableObject
|
||||
AggregateType.StandardDeviation
|
||||
];
|
||||
|
||||
/// <summary>Gets a value indicating whether an aggregate read is selected.</summary>
|
||||
public bool IsAggregateRead => SelectedAggregateType != null;
|
||||
|
||||
/// <summary>History read results.</summary>
|
||||
|
||||
@@ -36,12 +36,16 @@ public partial class ReadWriteViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty] private string? _writeValue;
|
||||
|
||||
/// <summary>Initializes a new instance of the ReadWriteViewModel class.</summary>
|
||||
/// <param name="service">The OPC UA client service for read/write operations.</param>
|
||||
/// <param name="dispatcher">The UI dispatcher for posting updates to the UI thread.</param>
|
||||
public ReadWriteViewModel(IOpcUaClientService service, IUiDispatcher dispatcher)
|
||||
{
|
||||
_service = service;
|
||||
_dispatcher = dispatcher;
|
||||
}
|
||||
|
||||
/// <summary>Gets a value indicating whether a node is currently selected.</summary>
|
||||
public bool IsNodeSelected => !string.IsNullOrEmpty(SelectedNodeId);
|
||||
|
||||
partial void OnSelectedNodeIdChanged(string? value)
|
||||
|
||||
@@ -13,6 +13,9 @@ public partial class SubscriptionItemViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty] private string? _value;
|
||||
|
||||
/// <summary>Initializes a new subscription item with the specified node ID and interval.</summary>
|
||||
/// <param name="nodeId">The OPC UA NodeId to subscribe to.</param>
|
||||
/// <param name="intervalMs">The subscription interval in milliseconds.</param>
|
||||
public SubscriptionItemViewModel(string nodeId, int intervalMs)
|
||||
{
|
||||
NodeId = nodeId;
|
||||
|
||||
@@ -31,6 +31,13 @@ public partial class TreeNodeViewModel : ObservableObject
|
||||
HasChildren = false;
|
||||
}
|
||||
|
||||
/// <summary>Initializes a new tree node view model.</summary>
|
||||
/// <param name="nodeId">The OPC UA node identifier.</param>
|
||||
/// <param name="displayName">The display name for this node.</param>
|
||||
/// <param name="nodeClass">The OPC UA node class.</param>
|
||||
/// <param name="hasChildren">Whether this node has child nodes.</param>
|
||||
/// <param name="service">The OPC UA client service for browsing.</param>
|
||||
/// <param name="dispatcher">The UI dispatcher for thread-safe updates.</param>
|
||||
public TreeNodeViewModel(
|
||||
string nodeId,
|
||||
string displayName,
|
||||
|
||||
@@ -10,6 +10,7 @@ public partial class AckAlarmWindow : Window
|
||||
private readonly AlarmsViewModel _alarmsVm;
|
||||
private readonly AlarmEventViewModel _alarm;
|
||||
|
||||
/// <summary>Initializes a new instance of the AckAlarmWindow class for XAML designer support.</summary>
|
||||
public AckAlarmWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -17,6 +18,9 @@ public partial class AckAlarmWindow : Window
|
||||
_alarm = null!;
|
||||
}
|
||||
|
||||
/// <summary>Initializes a new instance of the AckAlarmWindow class with alarm context.</summary>
|
||||
/// <param name="alarmsVm">The alarms view model.</param>
|
||||
/// <param name="alarm">The alarm event to acknowledge.</param>
|
||||
public AckAlarmWindow(AlarmsViewModel alarmsVm, AlarmEventViewModel alarm)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -16,11 +16,13 @@ public partial class AlarmsView : UserControl
|
||||
private static readonly IBrush HighBrush = new SolidColorBrush(Color.Parse("#FEE2E2")); // light red (666-899)
|
||||
private static readonly IBrush CriticalBrush = new SolidColorBrush(Color.Parse("#FECACA")); // red (900-1000)
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="AlarmsView"/> class.</summary>
|
||||
public AlarmsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnLoaded(RoutedEventArgs e)
|
||||
{
|
||||
base.OnLoaded(e);
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
|
||||
|
||||
public partial class BrowseTreeView : UserControl
|
||||
{
|
||||
/// <summary>Initializes a new instance of the BrowseTreeView.</summary>
|
||||
public BrowseTreeView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
|
||||
|
||||
public partial class HistoryView : UserControl
|
||||
{
|
||||
/// <summary>Initializes a new instance of the HistoryView control.</summary>
|
||||
public HistoryView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
|
||||
|
||||
public partial class MainWindow : Window
|
||||
{
|
||||
/// <summary>Initializes a new instance of the MainWindow, loading the application icon.</summary>
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -51,6 +52,7 @@ public partial class MainWindow : Window
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnLoaded(RoutedEventArgs e)
|
||||
{
|
||||
base.OnLoaded(e);
|
||||
@@ -157,6 +159,7 @@ public partial class MainWindow : Window
|
||||
vm.CertificateStorePath = picked;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnClosing(WindowClosingEventArgs e)
|
||||
{
|
||||
if (DataContext is MainWindowViewModel vm)
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
|
||||
|
||||
public partial class ReadWriteView : UserControl
|
||||
{
|
||||
/// <summary>Initializes a new instance of the ReadWriteView class.</summary>
|
||||
public ReadWriteView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
@@ -8,11 +8,13 @@ namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views;
|
||||
|
||||
public partial class SubscriptionsView : UserControl
|
||||
{
|
||||
/// <summary>Initializes a new instance of the <see cref="SubscriptionsView"/> class.</summary>
|
||||
public SubscriptionsView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnLoaded(RoutedEventArgs e)
|
||||
{
|
||||
base.OnLoaded(e);
|
||||
|
||||
@@ -10,6 +10,7 @@ public partial class WriteValueWindow : Window
|
||||
private readonly SubscriptionsViewModel _subscriptionsVm;
|
||||
private readonly string _nodeId;
|
||||
|
||||
/// <summary>Initializes a default instance of the WriteValueWindow for XAML designer support.</summary>
|
||||
public WriteValueWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
@@ -17,6 +18,10 @@ public partial class WriteValueWindow : Window
|
||||
_nodeId = string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>Initializes a WriteValueWindow with the node to write and its current value.</summary>
|
||||
/// <param name="subscriptionsVm">The subscriptions view model for write operations.</param>
|
||||
/// <param name="nodeId">The OPC UA node ID to write to.</param>
|
||||
/// <param name="currentValue">The current value of the node, or null if unknown.</param>
|
||||
public WriteValueWindow(SubscriptionsViewModel subscriptionsVm, string nodeId, string? currentValue)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Reference in New Issue
Block a user