diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs
index 151d7bf7..b308ca77 100644
--- a/SabreTools.Data.Extensions/MetadataExtensions.cs
+++ b/SabreTools.Data.Extensions/MetadataExtensions.cs
@@ -159,6 +159,8 @@ namespace SabreTools.Data.Extensions
return control.Clone() as Control;
else if (self is DeviceRef deviceRef)
return deviceRef.Clone() as DeviceRef;
+ else if (self is DipLocation dipLocation)
+ return dipLocation.Clone() as DipLocation;
else if (self is Extension extension)
return extension.Clone() as Extension;
// TODO: Reenable when PartFeature no longer needs nesting
@@ -213,10 +215,6 @@ namespace SabreTools.Data.Extensions
cloneDevice.Mandatory = selfDevice.Mandatory;
cloneDevice.Tag = selfDevice.Tag;
}
- else if (self is DipLocation selfDipLocation && clone is DipLocation cloneDipLocation)
- {
- cloneDipLocation.Inverted = selfDipLocation.Inverted;
- }
else if (self is DipSwitch selfDipSwitch && clone is DipSwitch cloneDipSwitch)
{
cloneDipSwitch.Default = selfDipSwitch.Default;
diff --git a/SabreTools.Data.Models/Listxml/DipLocation.cs b/SabreTools.Data.Models/Listxml/DipLocation.cs
index 597ffc4a..cdbdf653 100644
--- a/SabreTools.Data.Models/Listxml/DipLocation.cs
+++ b/SabreTools.Data.Models/Listxml/DipLocation.cs
@@ -10,10 +10,9 @@ namespace SabreTools.Data.Models.Listxml
[XmlAttribute("name")]
public string? Name { get; set; }
- /// Numeric?
[Required]
[XmlAttribute("number")]
- public string? Number { get; set; }
+ public long? Number { get; set; }
/// (yes|no) "no"
[XmlAttribute("inverted")]
diff --git a/SabreTools.Data.Models/Metadata/DipLocation.cs b/SabreTools.Data.Models/Metadata/DipLocation.cs
index 65c36fbc..5926d140 100644
--- a/SabreTools.Data.Models/Metadata/DipLocation.cs
+++ b/SabreTools.Data.Models/Metadata/DipLocation.cs
@@ -1,10 +1,11 @@
+using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Data.Models.Metadata
{
[JsonObject("diplocation"), XmlRoot("diplocation")]
- public class DipLocation : DatItem
+ public class DipLocation : DatItem, ICloneable, IEquatable
{
#region Properties
@@ -13,15 +14,44 @@ namespace SabreTools.Data.Models.Metadata
public string? Name { get; set; }
- #endregion
-
- #region Keys
-
- /// string, possibly long
- public const string NumberKey = "number";
+ public long? Number { get; set; }
#endregion
public DipLocation() => ItemType = ItemType.DipLocation;
+
+ ///
+ public object Clone()
+ {
+ var obj = new DipLocation();
+
+ obj.Inverted = Inverted;
+ obj.Name = Name;
+ obj.Number = Number;
+
+ return obj;
+ }
+
+ ///
+ public bool Equals(DipLocation? other)
+ {
+ // Null never matches
+ if (other is null)
+ return false;
+
+ // Properties
+ if (Inverted != other.Inverted)
+ return false;
+
+ if ((Name is null) ^ (other.Name is null))
+ return false;
+ else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase))
+ return false;
+
+ if (Number != other.Number)
+ return false;
+
+ return true;
+ }
}
}
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
index 6a0f8eeb..4a0cde0d 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -505,7 +505,7 @@ namespace SabreTools.Metadata.DatFiles.Test
{
Inverted = true,
Name = "name",
- [Data.Models.Metadata.DipLocation.NumberKey] = "number",
+ Number = 12345,
};
}
@@ -1286,7 +1286,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(dipLocation);
Assert.True(dipLocation.Inverted);
Assert.Equal("name", dipLocation.Name);
- Assert.Equal("number", dipLocation.ReadString(Data.Models.Metadata.DipLocation.NumberKey));
+ Assert.Equal(12345, dipLocation.Number);
}
private static void ValidateDipSwitch(DipSwitch? dipSwitch)
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
index 4f63dc38..4fc21d47 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -798,7 +798,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(dipLocation);
Assert.True(dipLocation.Inverted);
Assert.Equal("name", dipLocation.Name);
- Assert.Equal("number", dipLocation.ReadString(Data.Models.Metadata.DipLocation.NumberKey));
+ Assert.Equal(12345, dipLocation.Number);
}
private static void ValidateMetadataDipSwitch(Data.Models.Metadata.DipSwitch? dipSwitch)
diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs
index 1ac9e7fb..ee5f1e00 100644
--- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs
+++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs
@@ -28,6 +28,12 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipLocation)?.Name = value;
}
+ public long? Number
+ {
+ get => (_internal as Data.Models.Metadata.DipLocation)?.Number;
+ set => (_internal as Data.Models.Metadata.DipLocation)?.Number = value;
+ }
+
#endregion
#region Constructors
diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs
index 08286036..082a6642 100644
--- a/SabreTools.Metadata.Filter/FilterObject.cs
+++ b/SabreTools.Metadata.Filter/FilterObject.cs
@@ -480,9 +480,8 @@ namespace SabreTools.Metadata.Filter
case DipLocation item when fieldName == "inverted":
checkValue = item.Inverted.FromYesNo();
return true;
-
- case DipLocation item when fieldName == "invertwed":
- checkValue = item.Inverted.FromYesNo();
+ case DipLocation item when fieldName == "number":
+ checkValue = item.Number?.ToString();
return true;
case DipSwitch item when fieldName == "default":
diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs
index 8753117f..f01def6f 100644
--- a/SabreTools.Metadata/DictionaryBaseExtensions.cs
+++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs
@@ -138,7 +138,7 @@ namespace SabreTools.Metadata
}
else if (self is DipLocation selfDipLocation && other is DipLocation otherDipLocation)
{
- if (selfDipLocation.Inverted != otherDipLocation.Inverted)
+ if (!selfDipLocation.Equals(otherDipLocation))
return false;
}
else if (self is DipSwitch selfDipSwitch && other is DipSwitch otherDipSwitch)
diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
index 923948d6..4cec022f 100644
--- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
@@ -190,7 +190,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -669,7 +669,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
index bd93c9f9..708ff79e 100644
--- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
@@ -186,7 +186,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -663,7 +663,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
index 73a2d3f3..ca6e5d12 100644
--- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
@@ -186,7 +186,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -663,7 +663,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
index 1e1c156a..110e346c 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
@@ -344,7 +344,7 @@ namespace SabreTools.Serialization.CrossModel
var dipLocation = new DipLocation
{
Name = item.Name,
- Number = item.ReadString(Data.Models.Metadata.DipLocation.NumberKey),
+ Number = item.Number,
Inverted = item.Inverted,
};
return dipLocation;
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
index b5400bbf..0fdb74fe 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
@@ -380,7 +380,7 @@ namespace SabreTools.Serialization.CrossModel
var dipLocation = new Data.Models.Metadata.DipLocation
{
Name = item.Name,
- [Data.Models.Metadata.DipLocation.NumberKey] = item.Number,
+ Number = item.Number,
Inverted = item.Inverted,
};
return dipLocation;
diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
index dcc48b90..619e4620 100644
--- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
@@ -257,7 +257,7 @@ namespace SabreTools.Serialization.Readers.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -736,7 +736,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs
index aac4ce63..b71ccaed 100644
--- a/SabreTools.Serialization.Readers.Test/M1Tests.cs
+++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs
@@ -253,7 +253,7 @@ namespace SabreTools.Serialization.Readers.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -730,7 +730,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs
index a827b740..365ccc61 100644
--- a/SabreTools.Serialization.Readers.Test/MessTests.cs
+++ b/SabreTools.Serialization.Readers.Test/MessTests.cs
@@ -253,7 +253,7 @@ namespace SabreTools.Serialization.Readers.Test
var diplocation = new Data.Models.Listxml.DipLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -730,7 +730,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(diplocation);
Assert.Equal("name", diplocation.Name);
- Assert.Equal("XXXXXX", diplocation.Number);
+ Assert.Equal(12345, diplocation.Number);
Assert.Equal(true, diplocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs
index bd50890c..ececc78c 100644
--- a/SabreTools.Serialization.Readers/Listxml.cs
+++ b/SabreTools.Serialization.Readers/Listxml.cs
@@ -435,7 +435,7 @@ namespace SabreTools.Serialization.Readers
var obj = new DipLocation();
obj.Name = reader.GetAttribute("name");
- obj.Number = reader.GetAttribute("number");
+ obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number"));
obj.Inverted = reader.GetAttribute("inverted").AsYesNo();
return obj;
diff --git a/SabreTools.Serialization.Readers/M1.cs b/SabreTools.Serialization.Readers/M1.cs
index eb8fb0fd..4f16ee3e 100644
--- a/SabreTools.Serialization.Readers/M1.cs
+++ b/SabreTools.Serialization.Readers/M1.cs
@@ -433,7 +433,7 @@ namespace SabreTools.Serialization.Readers
var obj = new DipLocation();
obj.Name = reader.GetAttribute("name");
- obj.Number = reader.GetAttribute("number");
+ obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number"));
obj.Inverted = reader.GetAttribute("inverted").AsYesNo();
return obj;
diff --git a/SabreTools.Serialization.Readers/Mess.cs b/SabreTools.Serialization.Readers/Mess.cs
index 6f40d62b..dad755ab 100644
--- a/SabreTools.Serialization.Readers/Mess.cs
+++ b/SabreTools.Serialization.Readers/Mess.cs
@@ -433,7 +433,7 @@ namespace SabreTools.Serialization.Readers
var obj = new DipLocation();
obj.Name = reader.GetAttribute("name");
- obj.Number = reader.GetAttribute("number");
+ obj.Number = NumberHelper.ConvertToInt64(reader.GetAttribute("number"));
obj.Inverted = reader.GetAttribute("inverted").AsYesNo();
return obj;
diff --git a/SabreTools.Serialization.Writers/Listxml.cs b/SabreTools.Serialization.Writers/Listxml.cs
index 1da5df05..e8f4b791 100644
--- a/SabreTools.Serialization.Writers/Listxml.cs
+++ b/SabreTools.Serialization.Writers/Listxml.cs
@@ -298,7 +298,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("diplocation");
writer.WriteRequiredAttributeString("name", obj.Name);
- writer.WriteRequiredAttributeString("number", obj.Number);
+ writer.WriteRequiredAttributeString("number", obj.Number?.ToString());
writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo());
writer.WriteEndElement();
diff --git a/SabreTools.Serialization.Writers/M1.cs b/SabreTools.Serialization.Writers/M1.cs
index b9ab826e..6077aad0 100644
--- a/SabreTools.Serialization.Writers/M1.cs
+++ b/SabreTools.Serialization.Writers/M1.cs
@@ -296,7 +296,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("diplocation");
writer.WriteRequiredAttributeString("name", obj.Name);
- writer.WriteRequiredAttributeString("number", obj.Number);
+ writer.WriteRequiredAttributeString("number", obj.Number?.ToString());
writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo());
writer.WriteEndElement();
diff --git a/SabreTools.Serialization.Writers/Mess.cs b/SabreTools.Serialization.Writers/Mess.cs
index 35620506..5bd9d91d 100644
--- a/SabreTools.Serialization.Writers/Mess.cs
+++ b/SabreTools.Serialization.Writers/Mess.cs
@@ -296,7 +296,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("diplocation");
writer.WriteRequiredAttributeString("name", obj.Name);
- writer.WriteRequiredAttributeString("number", obj.Number);
+ writer.WriteRequiredAttributeString("number", obj.Number?.ToString());
writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo());
writer.WriteEndElement();