Saxonite - various

This commit is contained in:
2021-06-04 14:04:03 +01:00
parent 19be985731
commit 8d3aa5ec03
31 changed files with 390 additions and 170 deletions
+53 -20
View File
@@ -1,6 +1,10 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils;
@@ -8,16 +12,17 @@ namespace Sarand.Net.Standard.Base.Bus
{
//=======================================================================
//[Serializable()]
[JsonConverter(typeof(SysIdJsonConverter))]
public class SysId
{
//-------------------------------------------------------------------
// Data members.
private Int64 id = 0;
//-------------------------------------------------------------------
// Construction.
public SysId () { }
public SysId (Int64 id)
public SysId() { }
public SysId(Int64 id)
{
this.id = id;
}
@@ -37,30 +42,30 @@ namespace Sarand.Net.Standard.Base.Bus
//-------------------------------------------------------------------
// Utilities.
public static bool IsValid (SysId sysId)
public static bool IsValid(SysId sysId)
{
return (sysId != null && sysId.id != 0);
}
public static SysId InvalidOnNull (SysId sysId)
public static SysId InvalidOnNull(SysId sysId)
{
return (sysId != null ? sysId : new SysId());
}
//-------------------------------------------------------------------
// Comparison.
public override bool Equals (object obj)
public override bool Equals(object obj)
{
if (obj == null) return false;
return Equals(obj as SysId);
}
public bool Equals (SysId sysId)
public bool Equals(SysId sysId)
{
if (sysId == null) return false;
// False if either value invalid.
if (id == 0) return false;
return ToInt().Equals(InvalidOnNull(sysId).ToInt());
}
public override int GetHashCode ()
public override int GetHashCode()
{
return id.GetHashCode();
}
@@ -75,11 +80,11 @@ namespace Sarand.Net.Standard.Base.Bus
{
return ToInt(this);
}
public override String ToString ()
public override String ToString()
{
return ToString(this);
}
public String ToString (String invalidValue)
public String ToString(String invalidValue)
{
return ToString(this, invalidValue);
}
@@ -92,15 +97,43 @@ namespace Sarand.Net.Standard.Base.Bus
{
return (IsValid(sysId) ? sysId.id : 0);
}
public static String ToString (SysId sysId)
public static String ToString(SysId sysId)
{
return ToString(sysId, String.Empty);
}
public static String ToString (SysId sysId, String invalidValue)
public static String ToString(SysId sysId, String invalidValue)
{
return (IsValid(sysId) ? sysId.id.ToString() : invalidValue);
}
//-------------------------------------------------------------------
/// <summary>
/// JSON Converter to serialise/deserialise SysId to/from simple integer value.
/// </summary>
class SysIdJsonConverter : JsonConverter<SysId>
{
public override void WriteJson(JsonWriter writer, [AllowNull] SysId id, JsonSerializer serializer)
{
if (id == null) return;
// Simply return the integer Id value.
serializer.Serialize(writer, id.Id);
}
public override SysId ReadJson(JsonReader reader, Type objectType, [AllowNull] SysId existingValue, bool hasExistingValue, JsonSerializer serializer)
{
try
{
// Convert the integer value to a SysId.
JValue jValue = new JValue(reader.Value);
return new SysId() { Id = (long)jValue };
}
catch (Exception exc)
{
SaLogger.Debug(GetType().Name + ".ReadJson " + ExceptionUtil.GetErrorStateMessage(exc));
}
return null;
}
}
//-------------------------------------------------------------------
}
//=======================================================================
@@ -108,13 +141,13 @@ namespace Sarand.Net.Standard.Base.Bus
{
//-------------------------------------------------------------------
// List contents.
public static int GetIdCount (this List<SysId> values, bool ignoreInvalid = true, bool ignoreDuplicates = true)
public static int GetIdCount(this List<SysId> values, bool ignoreInvalid = true, bool ignoreDuplicates = true)
{
if (ignoreDuplicates)
{
values = values.Select(id => id).Distinct().ToList();
// SysId.Equals treats invalid ids as inequal so 'Distinct' doesn't remove them.
if (values.FindIndex(id => !SysId.IsValid(id)) >= 0)
if (values.FindIndex(id => !SysId.IsValid(id)) >= 0)
{
// Remove all invalid entries and put one back to correct the count.
values.RemoveAll(id => !SysId.IsValid(id));
@@ -123,24 +156,24 @@ namespace Sarand.Net.Standard.Base.Bus
}
return values.Count(id => !ignoreInvalid || SysId.IsValid(id));
}
public static bool HasValidIds (this List<SysId> values)
public static bool HasValidIds(this List<SysId> values)
{
return (values.Find(id => SysId.IsValid(id)) != null);
}
public static bool Equals (this List<SysId> values, List<SysId> values2)
public static bool Equals(this List<SysId> values, List<SysId> values2)
{
return values.OrderBy(id => id.Id).SequenceEqual(values2.OrderBy(id => id.Id));
}
//-------------------------------------------------------------------
// Populate list.
public static void AddId (this List<SysId> values, SysId sysId, bool ignoreInvalid = true, bool ignoreDuplicates = true)
public static void AddId(this List<SysId> values, SysId sysId, bool ignoreInvalid = true, bool ignoreDuplicates = true)
{
if (ignoreInvalid && !SysId.IsValid(sysId)) return;
if (ignoreDuplicates && values.Contains(sysId)) return;
values.Add(sysId);
}
public static void AddIds (this List<SysId> values, List<SysId> sysIds, bool ignoreInvalid = true, bool ignoreDuplicates = true)
public static void AddIds(this List<SysId> values, List<SysId> sysIds, bool ignoreInvalid = true, bool ignoreDuplicates = true)
{
foreach (SysId id in sysIds)
values.AddId(id, ignoreInvalid, ignoreDuplicates);
@@ -150,7 +183,7 @@ namespace Sarand.Net.Standard.Base.Bus
// Extract from list.
/// <summary>Remove specified number of entries from the list and return them.</summary>
/// <returns></returns>
public static List<SysId> ExtractIds (this List<SysId> values, int numberToRemove)
public static List<SysId> ExtractIds(this List<SysId> values, int numberToRemove)
{
List<SysId> ids = new List<SysId>();
while (values.Count > 0 && ids.Count < numberToRemove)
@@ -170,7 +203,7 @@ namespace Sarand.Net.Standard.Base.Bus
/// <param name="delimiter"></param>
/// <param name="ignoreInvalid"></param>
/// <returns></returns>
public static String Concat (this List<SysId> values, String delimiter, bool ignoreInvalid = true)
public static String Concat(this List<SysId> values, String delimiter, bool ignoreInvalid = true)
{
List<String> ids = new List<string>();
foreach (SysId id in values.FindAll(id => !ignoreInvalid || SysId.IsValid(id)))