Files
2026-04-17 14:55:32 -04:00

7.4 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
Common/DTS.Common.SerializationPlus/Control/Event/Module/ReviewableDasSerialNumberAttribute.cs
Common/DTS.Common.SerializationPlus/Control/Event/Module/ReviewableAttribute.cs
Common/DTS.Common.SerializationPlus/Control/Event/Module/ReviewableSampleRateAttribute.cs
2026-04-16T03:31:05.140610+00:00 Qwen/Qwen3-Coder-Next-FP8 1 b7f5fb3360deccec

Module


1. Purpose

This module provides concrete implementations of ReviewableAttribute for capturing and exposing read-only metadata about a DTS.Slice.Control.Event.Module instance—specifically, attributes that are relevant during event review or audit workflows. These attributes (e.g., DAS serial number, sample rate, hardware anti-aliasing filter rate, test description) are lazily evaluated via delegates and formatted for display in UI or reporting contexts. The classes exist to support structured, consistent, and type-safe access to module-level configuration and identity data during review processes.


2. Public Interface

All classes are public nested within DTS.Slice.Control.Event.Module.

ReviewableDasSerialNumberAttribute

  • Signature:
    public class ReviewableDasSerialNumberAttribute : ReviewableAttribute
    
  • Constructor:
    public ReviewableDasSerialNumberAttribute(Event.Module module)
    
  • Behavior:
    Initializes a reviewable attribute named "DAS Serial Number" whose value is lazily retrieved from module.DasSerialNumber. Uses the base classs DetermineValueString delegate mechanism.

ReviewableSampleRateAttribute

  • Signature:
    public class ReviewableSampleRateAttribute : ReviewableAttribute
    
  • Constructor:
    public ReviewableSampleRateAttribute(Event.Module module)
    
  • Behavior:
    Initializes a reviewable attribute named "Sample Rate". Value is module.SampleRateHz.ToString("N") (numeric formatting with thousand separators, no decimal places implied by "N" default).

ReviewableTestDescriptionAttribute

  • Signature:
    public class ReviewableTestDescriptionAttribute : ReviewableAttribute
    
  • Constructor:
    public ReviewableTestDescriptionAttribute(Event.Module module)
    
  • Behavior:
    Initializes a reviewable attribute named "Test Description". Value is module.ParentEvent.Description. Note: This accesses the parent Event, not the Module directly.

ReviewableHardwareFrequencyAttribute

  • Signature:
    public class ReviewableHardwareFrequencyAttribute : ReviewableAttribute
    
  • Constructor:
    public ReviewableHardwareFilterAttribute(Event.Module module)
    
  • Behavior:
    Initializes a reviewable attribute named "HW AAF" (Hardware Anti-Alias Filter). Value is module.AaFilterRateHz.ToString("N2") (2 decimal places).

3. Invariants

  • All attributes are immutable after construction: The name and DetermineValueString delegate are set in the base constructor and never modified.
  • Value evaluation is deferred: The delegate passed to base(...) is invoked only when the attributes value is requested (e.g., for display), not at construction time.
  • ReviewableAttribute base constructor enforces non-null name and calculateValue: The protected constructor expects both parameters; the public constructor in subclasses always supplies them.
  • ReviewableDasSerialNumberAttribute and other subclasses must be instantiated with a non-null Event.Module: Otherwise, accessing module.DasSerialNumber, module.SampleRateHz, etc., will throw a NullReferenceException.
  • ReviewableAttribute has two constructors, but only one is usable:
    • The single-parameter constructor (ReviewableAttribute(Event.Module)) is intentionally non-functional and throws NotImplementedException via a wrapper Exception.
    • Only the two-parameter protected constructor (ReviewableAttribute(string, DetermineValueString)) is used in practice.

4. Dependencies

Dependencies of this module:

  • DTS.Slice.Control.Event.Module — Required for module.DasSerialNumber, module.SampleRateHz, module.AaFilterRateHz, and module.ParentEvent.
  • DTS.Slice.Control.ReviewableAttribute — Base class for ReviewableAttribute. (Implied by inheritance; source not provided, but referenced in ReviewableAttribute.cs.)
  • DTS.Utilities — Used for formatting (e.g., .ToString("N")), though standard .NET formatting would suffice.

Dependencies on this module:

  • Any code that needs to expose module metadata for review (e.g., UI forms, audit logging, export tools) will instantiate these classes and pass them to a review framework built around ReviewableAttribute.

Inferred relationships:

  • Event.Module must define the following properties (not visible in source, but required):
    • string DasSerialNumber
    • double SampleRateHz
    • double AaFilterRateHz
    • Event ParentEvent (with string Description)
  • ReviewableAttribute inherits from Slice.Control.ReviewableAttribute, which must define:
    • Constructor: ReviewableAttribute(string name, DetermineValueString calculateValue)
    • Property/method to retrieve the formatted value string (via DetermineValueString delegate).

5. Gotchas

  • Misleading XML comment for ReviewableSampleRateAttribute and ReviewableHardwareFrequencyAttribute:
    Both are documented as “A reviewable filter frequency attribute attached to a specific channel.” — but they are attached to a Module, not a Channel. (The ReviewableDasSerialNumberAttribute comment is similarly inaccurate.)

  • ReviewableTestDescriptionAttribute accesses module.ParentEvent.Description:
    This implies a parent-child relationship (ModuleEvent). If module.ParentEvent is null, this will throw NullReferenceException.

  • ReviewableAttribute constructor design is fragile:
    The single-parameter constructor exists solely to fail at runtime. This is a code smell—ideally, it would be private or removed entirely.

  • String formatting is hardcoded:
    "N" and "N2" are used directly in delegates. Changing formatting (e.g., locale, precision) requires source modification.

  • No null-safety in value delegates:
    None of the delegates check for null (e.g., module.DasSerialNumber could be null, but ToString() is called unconditionally). This may yield "False" or "" depending on type, or throw if DasSerialNumber is a non-nullable value type.

  • Typo in ReviewableHardwareFrequencyAttribute constructor name in source:
    The XML comment says channel, but the parameter is named module. This is minor but inconsistent.

  • No documentation for DetermineValueString delegate type:
    Its signature and contract are unknown from source alone. Assumed to be Func<string> or similar.

  • No tests or usage examples provided:
    Behavior is inferred solely from constructor and inheritance. Actual runtime behavior (e.g., how values are consumed) is not verifiable from source.


Note: All inferences assume standard .NET conventions and the structural clues in the provided source. Behavior of DetermineValueString and the parent ReviewableAttribute class cannot be fully confirmed without their source.