diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs
index 26e77d48..bbc391ae 100644
--- a/SabreTools.Data.Extensions/MetadataExtensions.cs
+++ b/SabreTools.Data.Extensions/MetadataExtensions.cs
@@ -153,6 +153,8 @@ namespace SabreTools.Data.Extensions
return chip.Clone() as Chip;
else if (self is Condition condition)
return condition.Clone() as Condition;
+ else if (self is ConfLocation confLocation)
+ return confLocation.Clone() as ConfLocation;
else if (self is Control control)
return control.Clone() as Control;
else if (self is DeviceRef deviceRef)
@@ -192,10 +194,6 @@ namespace SabreTools.Data.Extensions
cloneConfiguration.Mask = selfConfiguration.Mask;
cloneConfiguration.Tag = selfConfiguration.Tag;
}
- else if (self is ConfLocation selfConfLocation && clone is ConfLocation cloneConfLocation)
- {
- cloneConfLocation.Inverted = selfConfLocation.Inverted;
- }
else if (self is ConfSetting selfConfSetting && clone is ConfSetting cloneConfSetting)
{
cloneConfSetting.Default = selfConfSetting.Default;
diff --git a/SabreTools.Data.Models/Listxml/ConfLocation.cs b/SabreTools.Data.Models/Listxml/ConfLocation.cs
index b6fe99b3..de57786f 100644
--- a/SabreTools.Data.Models/Listxml/ConfLocation.cs
+++ b/SabreTools.Data.Models/Listxml/ConfLocation.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/ConfLocation.cs b/SabreTools.Data.Models/Metadata/ConfLocation.cs
index 211330c0..bea51e61 100644
--- a/SabreTools.Data.Models/Metadata/ConfLocation.cs
+++ b/SabreTools.Data.Models/Metadata/ConfLocation.cs
@@ -1,10 +1,11 @@
+using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Data.Models.Metadata
{
[JsonObject("conflocation"), XmlRoot("conflocation")]
- public class ConfLocation : DatItem
+ public class ConfLocation : 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 ConfLocation() => ItemType = ItemType.ConfLocation;
+
+ ///
+ public object Clone()
+ {
+ var obj = new ConfLocation();
+
+ obj.Inverted = Inverted;
+ obj.Name = Name;
+ obj.Number = Number;
+
+ return obj;
+ }
+
+ ///
+ public bool Equals(ConfLocation? 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 cb9fba6a..6a0f8eeb 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs
@@ -443,7 +443,7 @@ namespace SabreTools.Metadata.DatFiles.Test
{
Inverted = true,
Name = "name",
- [Data.Models.Metadata.ConfLocation.NumberKey] = "number",
+ Number = 12345,
};
}
@@ -1217,7 +1217,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(confLocation);
Assert.True(confLocation.Inverted);
Assert.Equal("name", confLocation.Name);
- Assert.Equal("number", confLocation.ReadString(Data.Models.Metadata.ConfLocation.NumberKey));
+ Assert.Equal(12345, confLocation.Number);
}
private static void ValidateConfSetting(ConfSetting? confSetting)
diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
index 1048ab62..4f63dc38 100644
--- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
+++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs
@@ -724,7 +724,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.NotNull(confLocation);
Assert.True(confLocation.Inverted);
Assert.Equal("name", confLocation.Name);
- Assert.Equal("number", confLocation.ReadString(Data.Models.Metadata.ConfLocation.NumberKey));
+ Assert.Equal(12345, confLocation.Number);
}
private static void ValidateMetadataConfSetting(Data.Models.Metadata.ConfSetting? confSetting)
diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs
index d1f3296a..c7e5ec7f 100644
--- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs
+++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs
@@ -16,16 +16,22 @@ namespace SabreTools.Metadata.DatItems.Formats
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.ConfLocation;
+ public bool? Inverted
+ {
+ get => (_internal as Data.Models.Metadata.ConfLocation)?.Inverted;
+ set => (_internal as Data.Models.Metadata.ConfLocation)?.Inverted = value;
+ }
+
public string? Name
{
get => (_internal as Data.Models.Metadata.ConfLocation)?.Name;
set => (_internal as Data.Models.Metadata.ConfLocation)?.Name = value;
}
- public bool? Inverted
+ public long? Number
{
- get => (_internal as Data.Models.Metadata.ConfLocation)?.Inverted;
- set => (_internal as Data.Models.Metadata.ConfLocation)?.Inverted = value;
+ get => (_internal as Data.Models.Metadata.ConfLocation)?.Number;
+ set => (_internal as Data.Models.Metadata.ConfLocation)?.Number = value;
}
#endregion
diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs
index dc33be38..08286036 100644
--- a/SabreTools.Metadata.Filter/FilterObject.cs
+++ b/SabreTools.Metadata.Filter/FilterObject.cs
@@ -406,6 +406,9 @@ namespace SabreTools.Metadata.Filter
case ConfLocation item when fieldName == "inverted":
checkValue = item.Inverted.FromYesNo();
return true;
+ case ConfLocation item when fieldName == "number":
+ checkValue = item.Number?.ToString();
+ return true;
case ConfSetting item when fieldName == "default":
checkValue = item.Default.FromYesNo();
diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs
index bedc6c69..8753117f 100644
--- a/SabreTools.Metadata/DictionaryBaseExtensions.cs
+++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs
@@ -101,7 +101,7 @@ namespace SabreTools.Metadata
}
else if (self is ConfLocation selfConfLocation && other is ConfLocation otherConfLocation)
{
- if (selfConfLocation.Inverted != otherConfLocation.Inverted)
+ if (!selfConfLocation.Equals(otherConfLocation))
return false;
}
else if (self is ConfSetting selfConfSetting && other is ConfSetting otherConfSetting)
diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
index ba51404d..923948d6 100644
--- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs
@@ -215,7 +215,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -712,7 +712,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
index 2106dda8..bd93c9f9 100644
--- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs
@@ -211,7 +211,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -706,7 +706,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
index 65a1e2b3..73a2d3f3 100644
--- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs
+++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs
@@ -211,7 +211,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -706,7 +706,7 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
index 2113918e..1e1c156a 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs
@@ -251,7 +251,7 @@ namespace SabreTools.Serialization.CrossModel
var confLocation = new ConfLocation
{
Name = item.Name,
- Number = item.ReadString(Data.Models.Metadata.ConfLocation.NumberKey),
+ Number = item.Number,
Inverted = item.Inverted,
};
return confLocation;
diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
index fc3fe690..b5400bbf 100644
--- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
+++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs
@@ -287,7 +287,7 @@ namespace SabreTools.Serialization.CrossModel
var confLocation = new Data.Models.Metadata.ConfLocation
{
Name = item.Name,
- [Data.Models.Metadata.ConfLocation.NumberKey] = item.Number,
+ Number = item.Number,
Inverted = item.Inverted,
};
return confLocation;
diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
index 986ad35c..dcc48b90 100644
--- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
+++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs
@@ -282,7 +282,7 @@ namespace SabreTools.Serialization.Readers.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -779,7 +779,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs
index a394554b..aac4ce63 100644
--- a/SabreTools.Serialization.Readers.Test/M1Tests.cs
+++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs
@@ -278,7 +278,7 @@ namespace SabreTools.Serialization.Readers.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -773,7 +773,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs
index 8f1a3913..a827b740 100644
--- a/SabreTools.Serialization.Readers.Test/MessTests.cs
+++ b/SabreTools.Serialization.Readers.Test/MessTests.cs
@@ -278,7 +278,7 @@ namespace SabreTools.Serialization.Readers.Test
var conflocation = new Data.Models.Listxml.ConfLocation
{
Name = "name",
- Number = "XXXXXX",
+ Number = 12345,
Inverted = true,
};
@@ -773,7 +773,7 @@ namespace SabreTools.Serialization.Readers.Test
{
Assert.NotNull(conflocation);
Assert.Equal("name", conflocation.Name);
- Assert.Equal("XXXXXX", conflocation.Number);
+ Assert.Equal(12345, conflocation.Number);
Assert.Equal(true, conflocation.Inverted);
}
diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs
index 750e4135..bd50890c 100644
--- a/SabreTools.Serialization.Readers/Listxml.cs
+++ b/SabreTools.Serialization.Readers/Listxml.cs
@@ -285,7 +285,7 @@ namespace SabreTools.Serialization.Readers
var obj = new ConfLocation();
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 6420d027..eb8fb0fd 100644
--- a/SabreTools.Serialization.Readers/M1.cs
+++ b/SabreTools.Serialization.Readers/M1.cs
@@ -283,7 +283,7 @@ namespace SabreTools.Serialization.Readers
var obj = new ConfLocation();
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 c81db4d5..6f40d62b 100644
--- a/SabreTools.Serialization.Readers/Mess.cs
+++ b/SabreTools.Serialization.Readers/Mess.cs
@@ -283,7 +283,7 @@ namespace SabreTools.Serialization.Readers
var obj = new ConfLocation();
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 e3d701a0..1da5df05 100644
--- a/SabreTools.Serialization.Writers/Listxml.cs
+++ b/SabreTools.Serialization.Writers/Listxml.cs
@@ -194,7 +194,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("conflocation");
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 9151b56c..b9ab826e 100644
--- a/SabreTools.Serialization.Writers/M1.cs
+++ b/SabreTools.Serialization.Writers/M1.cs
@@ -192,7 +192,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("conflocation");
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 45397c60..35620506 100644
--- a/SabreTools.Serialization.Writers/Mess.cs
+++ b/SabreTools.Serialization.Writers/Mess.cs
@@ -192,7 +192,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("conflocation");
writer.WriteRequiredAttributeString("name", obj.Name);
- writer.WriteRequiredAttributeString("number", obj.Number);
+ writer.WriteRequiredAttributeString("number", obj.Number?.ToString());
writer.WriteOptionalAttributeString("inverted", obj.Inverted.FromYesNo());
writer.WriteEndElement();