summaryrefslogtreecommitdiff
path: root/RhSolutions.Parsers/DrinkingWaterHeatingFittings
diff options
context:
space:
mode:
authorSerghei Cebotari <serghei@cebotari.ru>2025-04-19 11:11:25 +0300
committerSerghei Cebotari <serghei@cebotari.ru>2025-04-19 11:11:25 +0300
commit411edebf289e216dcad8837c0f366076e2b5df9c (patch)
treeeeab7a1f24904d8afb1cbb0b8e6da8fe66a160e1 /RhSolutions.Parsers/DrinkingWaterHeatingFittings
parenta6d07d8e21cee1f3d0f0f87ee63241dde1aa7c3f (diff)
Refactor diameter handling to normalize values across fittings and pipesHEADmaster
Diffstat (limited to 'RhSolutions.Parsers/DrinkingWaterHeatingFittings')
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/Adapter.cs7
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerHeating.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerSanitary.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ConnectionBend.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/Coupling.cs8
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs10
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/Elbow.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/Eurocone.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/EuroconeAdapter.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ProtectivePipe.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/SupportingClip.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/TPiece.cs4
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowDoubleWallInternal.cs3
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallExternal.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallInternal.cs2
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs3
-rw-r--r--RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs3
17 files changed, 36 insertions, 22 deletions
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Adapter.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Adapter.cs
index 3600cc8..b60a543 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Adapter.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Adapter.cs
@@ -22,6 +22,9 @@ public abstract class Adapter : DrinkingWaterHeatingFitting
{
return false;
}
+ string[] normalizedDiameters = diameters.Select(d => NormalizeDiameter(d.Groups["Diameter"].Value))
+ .ToArray();
+
Match thread = _thread.Match(input);
string threadValue;
if (!thread.Success && diameters.Count >= 2)
@@ -37,13 +40,13 @@ public abstract class Adapter : DrinkingWaterHeatingFitting
}
else if (!thread.Success)
{
- threadValue = _defaultThreads[diameters[0].Groups["Diameter"].Value];
+ threadValue = _defaultThreads[normalizedDiameters[0]];
}
else
{
threadValue = thread.Groups["Thread"].Value;
}
- output = $"{_title} {diameters[0].Groups["Diameter"]} {threadValue}";
+ output = $"{_title} {normalizedDiameters[0]} {threadValue}";
return true;
}
}
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerHeating.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerHeating.cs
index 6a578fb..f6bf045 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerHeating.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerHeating.cs
@@ -12,7 +12,7 @@ public class BendFormerHeating : DrinkingWaterHeatingFitting
{
return false;
}
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
if (diameter == "16")
{
diameter += "/17";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerSanitary.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerSanitary.cs
index 334f3fe..ef93b3c 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerSanitary.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/BendFormerSanitary.cs
@@ -13,7 +13,7 @@ public class BendFormerSanitary : DrinkingWaterHeatingFitting
{
return false;
}
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
var angleMatch = _angle.Match(input);
string angle = angleMatch.Success ? angleMatch.Groups["Angle"].Value : "90";
output = $"{_title} {angle}° {diameter}";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ConnectionBend.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ConnectionBend.cs
index f161041..2aaec3d 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ConnectionBend.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ConnectionBend.cs
@@ -18,7 +18,7 @@ public class ConnectionBend : DrinkingWaterHeatingFitting
{
return false;
}
- string diameter = match.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(match.Groups["Diameter"].Value);
int length = int.Parse(match.Groups["Length"].Value);
int nearest = lengths.OrderBy(x => Math.Abs(x - length)).First();
output = $"{_title} {diameter}/{nearest}";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Coupling.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Coupling.cs
index 79ed7b4..b71b3b7 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Coupling.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Coupling.cs
@@ -8,15 +8,15 @@ public class Coupling : DrinkingWaterHeatingFitting
public override bool TryParse(string input, out string output)
{
output = string.Empty;
- var diametersMatches = _diameter.Matches(input);
- if (diametersMatches.Count == 0)
+ var diametersMatches = _diameter.Matches(input);
+ if (diametersMatches.Count == 0)
{
return false;
}
- var diameters = diametersMatches.Select(x => x.Groups["Diameter"].Value)
+ var diameters = diametersMatches.Select(x => NormalizeDiameter(x.Groups["Diameter"].Value))
.Take(2)
.OrderByDescending(x => int.Parse(x))
- .ToArray();
+ .ToArray();
if (diameters.Length == 1 || diameters[0] == diameters[1])
{
output = $"{_title} равнопроходная {diameters[0]}";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
index fcd2544..7dba12c 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs
@@ -5,7 +5,7 @@ namespace RhSolutions.Parsers.Fittings;
public abstract class DrinkingWaterHeatingFitting : IProductParser
{
protected static readonly Regex _diameter =
- new(@"(?<!^)[\b\D]?(?<Diameter>16|20|25|32|40|50|63|15)[\b\D]?");
+ new(@"(?<!^)[\b\D]?(?<Diameter>16|20|25|32|40|50|63|15|26)[\b\D]?");
protected static readonly Regex _angle =
new(@"(?<!^)([\b\D])(?<Angle>45|90)([\b\D]|$)");
protected static readonly Regex _thread =
@@ -27,4 +27,12 @@ public abstract class DrinkingWaterHeatingFitting : IProductParser
return false;
}
}
+ protected string NormalizeDiameter(string diameter)
+ {
+ return diameter switch
+ {
+ "26" => "25",
+ _ => diameter
+ };
+ }
}
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Elbow.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Elbow.cs
index ccfb7d5..5153979 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Elbow.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Elbow.cs
@@ -13,7 +13,7 @@ public class Elbow : DrinkingWaterHeatingFitting
{
return false;
}
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
var angleMatch = _angle.Match(input);
string angle = angleMatch.Success ? angleMatch.Groups["Angle"].Value : "90";
output = $"{_title} {angle} {diameter}";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Eurocone.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Eurocone.cs
index e82533a..735e867 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Eurocone.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/Eurocone.cs
@@ -10,7 +10,7 @@ public abstract class Eurocone : DrinkingWaterHeatingFitting
var diameterMatch = _diameter.Match(input);
if (diameterMatch.Success)
{
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
if (_titles.TryGetValue(diameter, out string? title))
{
output = title;
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/EuroconeAdapter.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/EuroconeAdapter.cs
index 909bb14..208ffee 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/EuroconeAdapter.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/EuroconeAdapter.cs
@@ -11,7 +11,7 @@ public class EuroconeAdapter : DrinkingWaterHeatingFitting
var diameterMatch = _diameter.Match(input);
if (diameterMatch.Success)
{
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
output = $"{_title} {diameter}-G 3/4";
return true;
}
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ProtectivePipe.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ProtectivePipe.cs
index 36f028d..0aea919 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ProtectivePipe.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ProtectivePipe.cs
@@ -11,7 +11,7 @@ public class ProtectivePipe : DrinkingWaterHeatingFitting
var diameterMatch = _diameter.Match(input);
if (diameterMatch.Success)
{
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
if (diameter == "16")
{
diameter += "/17";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/SupportingClip.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/SupportingClip.cs
index 8dd4a21..42bb354 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/SupportingClip.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/SupportingClip.cs
@@ -11,7 +11,7 @@ public class SupportingClip : DrinkingWaterHeatingFitting
var diameterMatch = _diameter.Match(input);
if (diameterMatch.Success)
{
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
if (diameter == "16")
{
diameter += "/17";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/TPiece.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/TPiece.cs
index 8a80808..28b556e 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/TPiece.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/TPiece.cs
@@ -9,8 +9,8 @@ public class TPiece : DrinkingWaterHeatingFitting
{
output = string.Empty;
var diameters = _diameter.Matches(input)
- .Select(match => match.Groups["Diameter"].Value)
- .Select(d => int.Parse(d))
+ .Select(match => NormalizeDiameter(match.Groups["Diameter"].Value))
+ .Select(int.Parse)
.ToArray();
if (diameters.Length == 1)
{
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowDoubleWallInternal.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowDoubleWallInternal.cs
index f45bc1f..b52ebee 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowDoubleWallInternal.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowDoubleWallInternal.cs
@@ -22,7 +22,8 @@ public class ThreadElbowDoubleWallInternal : DrinkingWaterHeatingFitting
return false;
}
var typeMatch = _type.Match(input);
- string[] diameters = diameterMatches.Select(x => x.Groups["Diameter"].Value).ToArray();
+ string[] diameters = diameterMatches.Select(x => NormalizeDiameter(x.Groups["Diameter"].Value))
+ .ToArray();
string thread = threadMatch.Groups["Thread"].Value;
string type = typeMatch.Success ? "длинный" : "короткий";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallExternal.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallExternal.cs
index 3f9a66a..7cd0bb8 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallExternal.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallExternal.cs
@@ -18,7 +18,7 @@ public class ThreadElbowWallExternal : DrinkingWaterHeatingFitting
{
return false;
}
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
string thread = threadMatch.Groups["Thread"].Value;
output = $"{_title} {diameter}-R {thread}";
return true;
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallInternal.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallInternal.cs
index 7729304..4bb6db6 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallInternal.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadElbowWallInternal.cs
@@ -22,7 +22,7 @@ public class ThreadElbowWallInternal : DrinkingWaterHeatingFitting
return false;
}
var typeMatch = _type.Match(input);
- string diameter = diameterMatch.Groups["Diameter"].Value;
+ string diameter = NormalizeDiameter(diameterMatch.Groups["Diameter"].Value);
string thread = threadMatch.Groups["Thread"].Value;
output = $"{_title} {(typeMatch.Success ? "длинный " : string.Empty)}{diameter}-Rp {thread}";
return true;
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs
index 0a75865..81cc734 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs
@@ -16,7 +16,8 @@ public class ThreadTPieceExternal : DrinkingWaterHeatingFitting
return false;
}
string thread = _thread.Match(input).Groups["Thread"].Value;
- int[] diameters = diametersMatches.Select(match => int.Parse(match.Groups["Diameter"].Value)).ToArray();
+ int[] diameters = diametersMatches.Select(match => int.Parse(NormalizeDiameter(match.Groups["Diameter"].Value)))
+ .ToArray();
if (diameters.Length == 1)
{
output = $"{_title} {diameters[0]}-{diameters[0]}-R {thread}";
diff --git a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs
index c0d939f..27faa8a 100644
--- a/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs
+++ b/RhSolutions.Parsers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs
@@ -14,7 +14,8 @@ public class ThreadTPieceInternal : DrinkingWaterHeatingFitting
return false;
}
string thread = _thread.Match(input).Groups["Thread"].Value;
- int[] diameters = diametersMatches.Select(match => int.Parse(match.Groups["Diameter"].Value)).ToArray();
+ int[] diameters = diametersMatches.Select(match => int.Parse(NormalizeDiameter(match.Groups["Diameter"].Value)))
+ .ToArray();
if (diameters.Length == 1)
{
if (diameters[0] < 25)