Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<PackageVersion Include="CjClutter.ObjLoader.Unofficial" Version="1.1.0" />
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
<PackageVersion Include="Csv" Version="2.0.170" />
<PackageVersion Include="CsvHelper" Version="33.1.0" />
<PackageVersion Include="JetBrains.DotMemoryUnit" Version="3.2.20220510" />
<PackageVersion Include="LibTessDotNet" Version="1.1.15" />
<PackageVersion Include="MathNet.Numerics" Version="5.0.0" />
Expand Down Expand Up @@ -38,4 +39,4 @@
<PackageVersion Include="geometry3Sharp" Version="1.0.324" />
<PackageVersion Include="protobuf-net" Version="3.2.52" />
</ItemGroup>
</Project>
</Project>
1 change: 1 addition & 0 deletions TagMappingTemp.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using NUnit.Framework;
10 changes: 10 additions & 0 deletions TagMappingTemp.Tests/StidTagMapper/PdmsNode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace CadRevealComposer.Operations;

using System.Text.Json.Serialization;

public class PdmsNode
{
public required string NodeName { get; set; }
public string? PdmsTag { get; set; }
public string? Type { get; set; }
}
8 changes: 8 additions & 0 deletions TagMappingTemp.Tests/StidTagMapper/StidTag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace CadRevealComposer.Operations;

public class StidTag
{
public required string TAG_NO { get; set; }
public required int TAG_CATEGORY { get; set; }
public required string DOC_NO_3D { get; set; }
}
120 changes: 120 additions & 0 deletions TagMappingTemp.Tests/StidTagMapper/StidTagMapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
namespace CadRevealComposer.Operations;

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;

using CsvHelper;
using CsvHelper.Configuration;

using Newtonsoft.Json;


public static class StidTagMapper
{
[Test]
public static void CompareProcessedPdmsNodesWithStidTags()
{
string pdmsNodesPath = @"/Users/KAG/Documents/Repos/rvmsharp/TestData/troll_b_echo_tags.json";
string stidTagsPath = @"/Users/KAG/Documents/Repos/rvmsharp/TestData/troll_b_stid_tags.csv";

var pdmsNodes = ParseFromJson(pdmsNodesPath);
var stidTags = ParseFromCsv(stidTagsPath);

var nodes = FilterPdmsNodesByStidTags(pdmsNodes, stidTags);
Console.WriteLine("Number of matched tags: " + nodes.Length + ", out of: " + stidTags.Length + " that exists in STID");
}

private static PdmsNode[] ParseFromJson(string path)
{
var json = File.ReadAllText(path);

return JsonConvert.DeserializeObject<PdmsNode[]>(json)!;
}
private static StidTag[] ParseFromCsv(string path)
{
using (var reader = new StreamReader(path))
using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture){Delimiter = ";"}))
{
return csv.GetRecords<StidTag>().ToArray();
}
}

private class ResultNode
{
public required PdmsNode PdmsNode { get; set; }
public required StidTag StidTag { get; set; }
public required string MatchType { get; set; }
}


private static ResultNode[] FilterPdmsNodesByStidTags(
PdmsNode[] pdmsNodes, StidTag[] stidTags)
{

var resultNodes = new List<ResultNode>();

var stidTagLookup = stidTags.ToDictionary(x => x.TAG_NO.Trim(), x => x, StringComparer.OrdinalIgnoreCase);

var lineStidTags = stidTags.Where(x => x.TAG_CATEGORY == 6).ToArray(); // 6 is a line tag in STID (multiple stid tags per pdms tag). I.e they use wildcards.

foreach (PdmsNode pdmsNode in pdmsNodes)
{
if (pdmsNode.PdmsTag != null)
{
if (stidTagLookup.TryGetValue(pdmsNode.PdmsTag, out var stidTag))
{
resultNodes.Add(new ResultNode(){PdmsNode = pdmsNode, StidTag = stidTag, MatchType = "PdmsTag"});
continue;
}
}

if (stidTagLookup.TryGetValue(pdmsNode.NodeName.Trim(['/']).Trim(), out var value))
{
resultNodes.Add(new ResultNode(){PdmsNode = pdmsNode, StidTag = value, MatchType = "PdmsName"});
continue;
}

if (pdmsNode.Type != null && pdmsNode.Type.Contains("PIPE", StringComparison.OrdinalIgnoreCase))
{
// var baseLineTag = pdmsNode.NodeName.Split("_")[0].TrimStart('/').Trim();
// var matchingLineTags = lineStidTags
// .Where(x => x.TAG_NO.Contains(baseLineTag, StringComparison.OrdinalIgnoreCase))
// .ToArray();

if (pdmsNode.PdmsTag != null)
{
var pdmsTagWithoutStars = pdmsNode.PdmsTag.Trim('*');
var pdmsTagMatchingLineTags = lineStidTags
.Where(x => x.TAG_NO.Contains(pdmsTagWithoutStars, StringComparison.OrdinalIgnoreCase))
.ToArray();
if (pdmsTagMatchingLineTags.Any())
{
if (pdmsTagMatchingLineTags.Length == 1)
{
resultNodes.Add(new ResultNode()
{
PdmsNode = pdmsNode, StidTag = pdmsTagMatchingLineTags.First(), MatchType = "PdmsTag"
});
continue;
}
// else
// {
// resultNodes.Add(pdmsNode);
// continue;
// }
}
}
// if (matchingLineTags.Any())
// {
// resultNodes.Add(pdmsNode);
// continue;
// }
}
}

return resultNodes.ToArray();
}
}
33 changes: 33 additions & 0 deletions TagMappingTemp.Tests/StidTagMapper/TagDataFromStid.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
namespace CadRevealComposer.Operations;

using Newtonsoft.Json;

[JsonObject]
public class TagDataFromStid
{
public required string TagNo { get; set; }
public required string Description { get; set; }
public required string TagStatus { get; set; }
public required int TagCategory { get; set; }
public required string TagCategoryDescription { get; set; }
public required string? TagType { get; set; }
public required string UpdatedDate { get; set; }
public required string LocationCode { get; set; }
public required string DisciplineCode { get; set; }
public required string ContrCode { get; set; }
public required string System { get; set; }
public required string ProjectCode { get; set; }
public required string PoNo { get; set; }
public required string PlantNo { get; set; }
public float? XCoordinate { get; set; }
public float? YCoordinate { get; set; }
public float? ZCoordinate { get; set; }
public required AdditionalFields[] AdditionalFields { get; set; }
}

[JsonObject]
public class AdditionalFields
{
public required string Type { get; set; }
public required string Value { get; set; }
}
21 changes: 21 additions & 0 deletions TagMappingTemp.Tests/TagMappingTemp.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CsvHelper" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0"/>
<PackageReference Include="NUnit" Version="3.13.3"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1"/>
<PackageReference Include="NUnit.Analyzers" Version="3.6.1"/>
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
</ItemGroup>

</Project>
6 changes: 6 additions & 0 deletions rvmsharp.sln
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commons", "Commons\Commons.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Commons.Tests", "Commons.Tests\Commons.Tests.csproj", "{E928953C-E0A7-4EDF-9484-49CFF5E303C5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagMappingTemp.Tests", "TagMappingTemp.Tests\TagMappingTemp.Tests.csproj", "{0A87A3EF-53BF-4E80-926A-E8816FE1B2D4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -105,6 +107,10 @@ Global
{E928953C-E0A7-4EDF-9484-49CFF5E303C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E928953C-E0A7-4EDF-9484-49CFF5E303C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E928953C-E0A7-4EDF-9484-49CFF5E303C5}.Release|Any CPU.Build.0 = Release|Any CPU
{0A87A3EF-53BF-4E80-926A-E8816FE1B2D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A87A3EF-53BF-4E80-926A-E8816FE1B2D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A87A3EF-53BF-4E80-926A-E8816FE1B2D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A87A3EF-53BF-4E80-926A-E8816FE1B2D4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
Loading