docs(galaxy): neutralize remaining stale SystemPlatform/alias terminology in comments + a test name
Replace "SystemPlatform mirror tag", "Galaxy alias", and "SystemPlatform-kind" in doc-comments and
test names with neutral accurate wording ("FolderPath-scoped tag", "EquipmentId == null", etc.).
No code, logic, or test bodies changed — comments and one test method name only.
This commit is contained in:
@@ -31,8 +31,7 @@ public sealed class Tag
|
|||||||
public string? DeviceId { get; set; }
|
public string? DeviceId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set when the tag belongs to an Equipment (driver tag OR Galaxy alias); NULL for
|
/// Set when the tag belongs to an Equipment; NULL for FolderPath-scoped (namespace-root) tags.
|
||||||
/// SystemPlatform mirror tags.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? EquipmentId { get; set; }
|
public string? EquipmentId { get; set; }
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ public sealed class Tag
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public required string Name { get; set; }
|
public required string Name { get; set; }
|
||||||
|
|
||||||
/// <summary>Only used when <see cref="EquipmentId"/> is NULL (SystemPlatform namespace).</summary>
|
/// <summary>Only used when <see cref="EquipmentId"/> is NULL (FolderPath-scoped namespace tag).</summary>
|
||||||
public string? FolderPath { get; set; }
|
public string? FolderPath { get; set; }
|
||||||
|
|
||||||
/// <summary>OPC UA built-in type name (Boolean / Int32 / Float / etc.).</summary>
|
/// <summary>OPC UA built-in type name (Boolean / Int32 / Float / etc.).</summary>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public enum NodeAclScopeKind
|
|||||||
UnsLine,
|
UnsLine,
|
||||||
Equipment,
|
Equipment,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A Galaxy (SystemPlatform-kind) folder segment anchored below a namespace.
|
/// A folder segment anchored below a namespace (used for FolderPath-scoped tags).
|
||||||
/// Distinguishes folder grants from UNS <see cref="Equipment"/> grants in the
|
/// Distinguishes folder grants from UNS <see cref="Equipment"/> grants in the
|
||||||
/// <c>AuthorizationDecision.Provenance</c> audit trail and Admin UI diagnostics.
|
/// <c>AuthorizationDecision.Provenance</c> audit trail and Admin UI diagnostics.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace ZB.MOM.WW.OtOpcUa.Core.OpcUa;
|
|||||||
/// <see cref="Configuration.Entities.Namespace"/> from the Config DB's
|
/// <see cref="Configuration.Entities.Namespace"/> from the Config DB's
|
||||||
/// <c>UnsArea</c> / <c>UnsLine</c> / <c>Equipment</c> / <c>Tag</c> rows. Runs during
|
/// <c>UnsArea</c> / <c>UnsLine</c> / <c>Equipment</c> / <c>Tag</c> rows. Runs during
|
||||||
/// address-space build per <see cref="IDriver"/> whose
|
/// address-space build per <see cref="IDriver"/> whose
|
||||||
/// <c>Namespace.Kind = Equipment</c>; SystemPlatform-kind namespaces (Galaxy) are
|
/// <c>Namespace.Kind = Equipment</c>; non-Equipment namespaces are
|
||||||
/// exempt per decision #120 and reach this walker only indirectly through
|
/// exempt per decision #120 and reach this walker only indirectly through
|
||||||
/// <see cref="ITagDiscovery.DiscoverAsync"/>.
|
/// <see cref="ITagDiscovery.DiscoverAsync"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -21,7 +21,7 @@ namespace ZB.MOM.WW.OtOpcUa.Core.OpcUa;
|
|||||||
/// folder node at the UNS level-5 segment; every <see cref="Tag"/> bound to an
|
/// folder node at the UNS level-5 segment; every <see cref="Tag"/> bound to an
|
||||||
/// Equipment (non-null <see cref="Tag.EquipmentId"/>) becomes a variable node under
|
/// Equipment (non-null <see cref="Tag.EquipmentId"/>) becomes a variable node under
|
||||||
/// it. Driver-discovered tags that have no Config-DB row are not added by this
|
/// it. Driver-discovered tags that have no Config-DB row are not added by this
|
||||||
/// walker — the ITagDiscovery path continues to exist for the SystemPlatform case +
|
/// walker — the ITagDiscovery path continues to exist for FolderPath-scoped tags +
|
||||||
/// for enrichment, but Equipment-kind composition is fully Tag-row-driven.
|
/// for enrichment, but Equipment-kind composition is fully Tag-row-driven.
|
||||||
/// </para>
|
/// </para>
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ public sealed record ScriptTagInfo(string Path, string Kind, string DataType, st
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default <see cref="IScriptTagCatalog"/>. Returns ONLY the resolvable keys a script may pass to
|
/// Default <see cref="IScriptTagCatalog"/>. Returns ONLY the resolvable keys a script may pass to
|
||||||
/// <c>ctx.GetTag</c> / <c>ctx.SetVirtualTag</c> — the driver <c>FullName</c> for equipment tags,
|
/// <c>ctx.GetTag</c> / <c>ctx.SetVirtualTag</c> — the driver <c>FullName</c> for equipment tags,
|
||||||
/// the MXAccess dot-ref for SystemPlatform tags, and the leaf <c>Name</c> (best-effort) for
|
/// the MXAccess dot-ref for FolderPath-scoped tags (<c>EquipmentId == null</c>), and the leaf
|
||||||
/// virtual tags.
|
/// <c>Name</c> (best-effort) for virtual tags.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// <para>
|
/// <para>
|
||||||
@@ -58,9 +58,9 @@ public sealed record ScriptTagInfo(string Path, string Kind, string DataType, st
|
|||||||
/// The per-category resolvable key:
|
/// The per-category resolvable key:
|
||||||
/// <list type="bullet">
|
/// <list type="bullet">
|
||||||
/// <item>Equipment driver tag (<c>EquipmentId != null</c>) → the driver <c>FullName</c>
|
/// <item>Equipment driver tag (<c>EquipmentId != null</c>) → the driver <c>FullName</c>
|
||||||
/// extracted from <c>Tag.TagConfig</c> (the verified <c>DependencyMux</c> key).</item>
|
/// extracted from <c>Tag.TagConfig</c> (the verified <c>DependencyMux</c> key).
|
||||||
/// Galaxy points are ordinary equipment tags now (GalaxyMxGateway is a standard
|
/// GalaxyMxGateway is a standard Equipment-kind driver, so Galaxy points resolve
|
||||||
/// Equipment-kind driver), so they resolve by this same <c>FullName</c> key.</item>
|
/// by this same <c>FullName</c> key.</item>
|
||||||
/// <item>VirtualTag → its leaf <c>Name</c> only, as a BEST-EFFORT key (the live resolution
|
/// <item>VirtualTag → its leaf <c>Name</c> only, as a BEST-EFFORT key (the live resolution
|
||||||
/// of virtual-tag cascade/write targets is unconfirmed).</item>
|
/// of virtual-tag cascade/write targets is unconfirmed).</item>
|
||||||
/// </list>
|
/// </list>
|
||||||
@@ -137,8 +137,8 @@ public sealed class ScriptTagCatalog(IDbContextFactory<OtOpcUaConfigDbContext> d
|
|||||||
await using var db = await dbFactory.CreateDbContextAsync(ct);
|
await using var db = await dbFactory.CreateDbContextAsync(ct);
|
||||||
|
|
||||||
// Only the resolvable keys are projected, so no UNS join is needed: the equipment-tag key is
|
// Only the resolvable keys are projected, so no UNS join is needed: the equipment-tag key is
|
||||||
// the FullName from TagConfig, the SystemPlatform key is FolderPath/Name, and the virtual-tag
|
// the FullName from TagConfig, the FolderPath-scoped tag key is FolderPath/Name, and the
|
||||||
// key is its own Name. Pull just those columns, untracked.
|
// virtual-tag key is its own Name. Pull just those columns, untracked.
|
||||||
var tagRows = await db.Tags
|
var tagRows = await db.Tags
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Select(t => new { t.EquipmentId, t.Name, t.FolderPath, t.DataType, t.DriverInstanceId, t.TagConfig })
|
.Select(t => new { t.EquipmentId, t.Name, t.FolderPath, t.DataType, t.DriverInstanceId, t.TagConfig })
|
||||||
@@ -154,8 +154,8 @@ public sealed class ScriptTagCatalog(IDbContextFactory<OtOpcUaConfigDbContext> d
|
|||||||
foreach (var t in tagRows)
|
foreach (var t in tagRows)
|
||||||
{
|
{
|
||||||
var path = t.EquipmentId is null
|
var path = t.EquipmentId is null
|
||||||
// SystemPlatform tag — the Galaxy driver subscribes by the MXAccess dot-ref, which is
|
// FolderPath-scoped tag (EquipmentId null) — subscribes by the MXAccess dot-ref, which
|
||||||
// "FolderPath.Name" when a folder is set, else just "Name".
|
// is "FolderPath.Name" when a folder is set, else just "Name".
|
||||||
? (string.IsNullOrWhiteSpace(t.FolderPath) ? t.Name : $"{t.FolderPath}.{t.Name}")
|
? (string.IsNullOrWhiteSpace(t.FolderPath) ? t.Name : $"{t.FolderPath}.{t.Name}")
|
||||||
// Equipment driver tag — the runtime GetTag key is the driver FullName from TagConfig.
|
// Equipment driver tag — the runtime GetTag key is the driver FullName from TagConfig.
|
||||||
: ExtractFullNameFromTagConfig(t.TagConfig);
|
: ExtractFullNameFromTagConfig(t.TagConfig);
|
||||||
|
|||||||
@@ -387,8 +387,7 @@ public sealed class DriverHostActor : ReceiveActor, IWithTimers
|
|||||||
// folder-scoped NodeIds (EquipmentId/FolderPath/Name), while the driver publishes keyed by
|
// folder-scoped NodeIds (EquipmentId/FolderPath/Name), while the driver publishes keyed by
|
||||||
// FullReference (the tag's FullName). The value therefore only lands on the variable once the
|
// FullReference (the tag's FullName). The value therefore only lands on the variable once the
|
||||||
// FullName→NodeId routing — the equipment-tag "live values" milestone — is wired; until then
|
// FullName→NodeId routing — the equipment-tag "live values" milestone — is wired; until then
|
||||||
// the variable stays BadWaitingForInitialData. (The retired SystemPlatform mirror matched only
|
// the variable stays BadWaitingForInitialData.
|
||||||
// because its NodeId WAS the FullName.)
|
|
||||||
_opcUaPublishActor?.Tell(new ZB.MOM.WW.OtOpcUa.Runtime.OpcUa.OpcUaPublishActor.AttributeValueUpdate(
|
_opcUaPublishActor?.Tell(new ZB.MOM.WW.OtOpcUa.Runtime.OpcUa.OpcUaPublishActor.AttributeValueUpdate(
|
||||||
msg.FullReference, msg.Value, msg.Quality, msg.TimestampUtc));
|
msg.FullReference, msg.Value, msg.Quality, msg.TimestampUtc));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,9 +123,8 @@ public sealed class DraftValidatorTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Verifies that the canonical Galaxy driver type (GalaxyMxGateway, per PR 7.2 —
|
/// <summary>Verifies that the canonical Galaxy driver type (GalaxyMxGateway, per PR 7.2 —
|
||||||
/// it was "Galaxy" pre-PR-7.2) is now a standard Equipment-kind driver: binding it to an
|
/// it was "Galaxy" pre-PR-7.2) is a standard Equipment-kind driver: binding it to an
|
||||||
/// Equipment namespace produces no kind-mismatch error (the SystemPlatform namespace split
|
/// Equipment namespace produces no kind-mismatch error.</summary>
|
||||||
/// is being retired — Galaxy under Equipment is valid).</summary>
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GalaxyMxGateway_driver_in_Equipment_namespace_is_allowed()
|
public void GalaxyMxGateway_driver_in_Equipment_namespace_is_allowed()
|
||||||
{
|
{
|
||||||
@@ -357,10 +356,10 @@ public sealed class DraftValidatorTests
|
|||||||
DraftValidator.Validate(draft).ShouldNotContain(e => e.Code == "EquipmentSignalNameCollision");
|
DraftValidator.Validate(draft).ShouldNotContain(e => e.Code == "EquipmentSignalNameCollision");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Verifies that a SystemPlatform Tag (EquipmentId == null) is excluded from the
|
/// <summary>Verifies that a FolderPath-scoped tag (EquipmentId == null) is excluded from the
|
||||||
/// equipment-signal node space and so never collides with an equipment VirtualTag.</summary>
|
/// equipment-signal node space and so never collides with an equipment VirtualTag.</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SystemPlatform_tag_sharing_name_with_equipment_vtag_excluded()
|
public void Unbound_tag_EquipmentId_null_does_not_collide_with_equipment_vtag()
|
||||||
{
|
{
|
||||||
var draft = new DraftSnapshot
|
var draft = new DraftSnapshot
|
||||||
{
|
{
|
||||||
|
|||||||
+9
-9
@@ -42,7 +42,7 @@ public sealed class ScriptTagCatalogTests
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Seeds an Area → Line → Equipment path with: one equipment driver tag (FullName "Motor.Speed"),
|
/// Seeds an Area → Line → Equipment path with: one equipment driver tag (FullName "Motor.Speed"),
|
||||||
/// one virtual tag, and one SystemPlatform tag (EquipmentId null, FolderPath set).
|
/// one virtual tag, and one FolderPath-scoped tag (EquipmentId null, FolderPath set).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static void Seed(DbContextOptions<OtOpcUaConfigDbContext> opts)
|
private static void Seed(DbContextOptions<OtOpcUaConfigDbContext> opts)
|
||||||
{
|
{
|
||||||
@@ -71,7 +71,7 @@ public sealed class ScriptTagCatalogTests
|
|||||||
TagConfig = "{\"FullName\":\"Motor.Speed\"}",
|
TagConfig = "{\"FullName\":\"Motor.Speed\"}",
|
||||||
});
|
});
|
||||||
|
|
||||||
// SystemPlatform tag — EquipmentId null, FolderPath set; Galaxy subscribes by "FolderPath.Name".
|
// FolderPath-scoped tag — EquipmentId null, FolderPath set; subscribes by "FolderPath.Name".
|
||||||
db.Tags.Add(new Tag
|
db.Tags.Add(new Tag
|
||||||
{
|
{
|
||||||
TagId = "TAG-SP",
|
TagId = "TAG-SP",
|
||||||
@@ -97,7 +97,7 @@ public sealed class ScriptTagCatalogTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A null filter returns only the resolvable keys: the driver FullName for the equipment
|
/// <summary>A null filter returns only the resolvable keys: the driver FullName for the equipment
|
||||||
/// tag, the MXAccess dot-ref for the SystemPlatform tag, and the virtual tag's leaf Name — and
|
/// tag, the MXAccess dot-ref for the FolderPath-scoped tag, and the virtual tag's leaf Name — and
|
||||||
/// NONE of the UNS browse paths.</summary>
|
/// NONE of the UNS browse paths.</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task GetPaths_no_filter_returns_resolvable_keys_only()
|
public async Task GetPaths_no_filter_returns_resolvable_keys_only()
|
||||||
@@ -110,7 +110,7 @@ public sealed class ScriptTagCatalogTests
|
|||||||
// Equipment driver tag: the authoritative GetTag key (driver FullName).
|
// Equipment driver tag: the authoritative GetTag key (driver FullName).
|
||||||
paths.ShouldContain("Motor.Speed");
|
paths.ShouldContain("Motor.Speed");
|
||||||
|
|
||||||
// SystemPlatform tag: MXAccess dot-ref.
|
// FolderPath-scoped tag: MXAccess dot-ref.
|
||||||
paths.ShouldContain("DelmiaReceiver_001.DownloadPath");
|
paths.ShouldContain("DelmiaReceiver_001.DownloadPath");
|
||||||
|
|
||||||
// Virtual tag: leaf Name only.
|
// Virtual tag: leaf Name only.
|
||||||
@@ -193,10 +193,10 @@ public sealed class ScriptTagCatalogTests
|
|||||||
paths.ShouldContain("Computed");
|
paths.ShouldContain("Computed");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A SystemPlatform tag with a null/empty <c>FolderPath</c> yields just its <c>Name</c>
|
/// <summary>A FolderPath-scoped tag with a null/empty <c>FolderPath</c> yields just its <c>Name</c>
|
||||||
/// (no leading dot).</summary>
|
/// (no leading dot).</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task GetPaths_systemplatform_tag_without_folder_yields_name_only()
|
public async Task GetPaths_unbound_tag_without_folder_yields_name_only()
|
||||||
{
|
{
|
||||||
var (catalog, opts) = Fresh();
|
var (catalog, opts) = Fresh();
|
||||||
|
|
||||||
@@ -233,10 +233,10 @@ public sealed class ScriptTagCatalogTests
|
|||||||
paths.ShouldBeEmpty();
|
paths.ShouldBeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A SystemPlatform tag resolves by its "FolderPath.Name" dot-ref to a Tag-kind info with
|
/// <summary>A FolderPath-scoped tag resolves by its "FolderPath.Name" dot-ref to a Tag-kind info
|
||||||
/// the configured DataType + DriverInstanceId.</summary>
|
/// with the configured DataType + DriverInstanceId.</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task GetTagInfo_systemplatform_tag_returns_tag_info()
|
public async Task GetTagInfo_unbound_tag_returns_tag_info()
|
||||||
{
|
{
|
||||||
var (catalog, opts) = Fresh();
|
var (catalog, opts) = Fresh();
|
||||||
Seed(opts);
|
Seed(opts);
|
||||||
|
|||||||
@@ -7,19 +7,17 @@ namespace ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests;
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Verifies the live-edit compose seam (<see cref="Phase7Composer.Compose"/>) treats a Galaxy
|
/// Verifies the live-edit compose seam (<see cref="Phase7Composer.Compose"/>) treats a Galaxy
|
||||||
/// point as an ordinary equipment tag now that <c>GalaxyMxGateway</c> is a standard
|
/// point as an ordinary equipment tag: <c>GalaxyMxGateway</c> is a standard Equipment-kind driver.
|
||||||
/// Equipment-kind driver. An equipment-scoped <see cref="Tag"/> (non-null
|
/// An equipment-scoped <see cref="Tag"/> (non-null <see cref="Tag.EquipmentId"/>) bound to a
|
||||||
/// <see cref="Tag.EquipmentId"/>) bound to a <c>GalaxyMxGateway</c> driver living in an
|
/// <c>GalaxyMxGateway</c> driver living in an <c>Equipment</c>-kind namespace must surface under
|
||||||
/// <c>Equipment</c>-kind namespace must surface under
|
/// <see cref="Phase7CompositionResult.EquipmentTags"/> (carrying its driver-side FullName).
|
||||||
/// <see cref="Phase7CompositionResult.EquipmentTags"/> (carrying its driver-side FullName). The
|
|
||||||
/// SystemPlatform-mirror <c>GalaxyTags</c> contract is retired entirely.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class Phase7ComposerAliasTagTests
|
public sealed class Phase7ComposerAliasTagTests
|
||||||
{
|
{
|
||||||
/// <summary>A <c>GalaxyMxGateway</c> driver in an Equipment-kind namespace carries an
|
/// <summary>A <c>GalaxyMxGateway</c> driver in an Equipment-kind namespace carries an
|
||||||
/// equipment-scoped Galaxy tag (EquipmentId set, FolderPath null, TagConfig FullName = the Galaxy
|
/// equipment-scoped Galaxy tag (EquipmentId set, FolderPath null, TagConfig FullName = the Galaxy
|
||||||
/// ref). Compose must put it in EquipmentTags with its FullName, coalescing the null FolderPath to
|
/// ref). Compose must put it in EquipmentTags with its FullName, coalescing the null FolderPath to
|
||||||
/// <c>string.Empty</c> (the SystemPlatform mirror producer is gone entirely).</summary>
|
/// <c>string.Empty</c>.</summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Compose_admits_galaxy_equipment_tag_in_equipment_tags()
|
public void Compose_admits_galaxy_equipment_tag_in_equipment_tags()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user