depricate UniquieID<TargetType> and adjust json converters

This commit is contained in:
2023-08-02 07:57:47 +02:00
parent dccd845a3d
commit 67be15157c
5 changed files with 148 additions and 145 deletions

View File

@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Pilz.Json.Converters
{
[Obsolete]
public class UniquieIDStringJsonConverter<TargetType> : UniquieIDStringJsonConverter
{
}
}

View File

@@ -2,30 +2,28 @@
using Pilz.Cryptography; using Pilz.Cryptography;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
namespace Pilz.Json.Converters namespace Pilz.Json.Converters
{ {
public class UniquiIDStringJsonConverter<TargetType> : JsonConverter public class UniquieIDStringJsonConverter : JsonConverter
{ {
public static bool EnableCheckForDepricatedTypes { get; set; } = true;
public override bool CanConvert(Type objectType) public override bool CanConvert(Type objectType)
{ {
return typeof(UniquieID<TargetType>).IsAssignableFrom(objectType); return typeof(UniquieID).IsAssignableFrom(objectType);
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{ {
var idString = serializer.Deserialize<string>(reader); var idString = serializer.Deserialize<string>(reader);
UniquieID<TargetType> id; UniquieID id;
if (existingValue is object) if (existingValue is UniquieID existingID && (!EnableCheckForDepricatedTypes || existingID.GetType() == typeof(UniquieID)))
id = (UniquieID<TargetType>)existingValue; id = existingID;
else else
id = new UniquieID<TargetType>(); id = new UniquieID();
id.ID = idString; id.ID = idString;
@@ -34,7 +32,7 @@ namespace Pilz.Json.Converters
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{ {
serializer.Serialize(writer, ((UniquieID<TargetType>)value).ID); serializer.Serialize(writer, ((UniquieID)value).ID);
} }
} }
} }

View File

@@ -0,0 +1,40 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Pilz.Cryptography
{
[Obsolete("To be removed in the future. Use base class UniquieID!")]
public class UniquieID<TargetType> : UniquieID
{
public UniquieID() : base()
{
}
public UniquieID(bool autoGenerate) : base(autoGenerate)
{
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public static implicit operator string(UniquieID<TargetType> id) => id.ID;
public static implicit operator UniquieID<TargetType>(string id) => new UniquieID<TargetType>() { ID = id };
public static implicit operator UniquieID<TargetType>(int id) => new UniquieID<TargetType>() { ID = Convert.ToString(id) };
public static bool operator ==(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID.Equals(right.ID);
public static bool operator !=(UniquieID<TargetType> left, UniquieID<TargetType> right) => !left.ID.Equals(right.ID);
}
}

View File

@@ -1,47 +1,119 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Management; using System.Management;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
using System.Threading.Tasks;
namespace Pilz.Cryptography namespace Pilz.Cryptography
{ {
public class UniquieID<TargetType> : UniquieID [JsonConverter(typeof(Json.Converters.UniquieIDStringJsonConverter))]
public class UniquieID : IUniquieID
{ {
public UniquieID() : base() protected static ulong currentSimpleID = 0;
[JsonProperty(nameof(ID))]
protected string _iD;
[JsonIgnore]
public virtual bool SimpleMode { get; set; } = false;
[JsonIgnore]
public virtual bool GenerateOnGet { get; set; } = false;
[JsonIgnore]
public virtual bool HasID => !string.IsNullOrEmpty(_iD);
[JsonIgnore]
public virtual string ID
{
get
{
if (GenerateOnGet)
GenerateIfNull();
return _iD;
}
internal set
=> _iD = value;
}
public UniquieID() : this(false)
{ {
} }
public UniquieID(bool autoGenerate) : base(autoGenerate) public UniquieID(bool autoGenerate)
{ {
if (autoGenerate)
GenerateIfNull();
} }
protected override string GenerateSimple() public virtual void Generate()
{ {
return typeof(TargetType).ToString() + base.GenerateSimple(); if (SimpleMode)
ID = GenerateSimple();
else
ID = GenerateDefault();
} }
protected override string GenerateDefault() protected virtual string GenerateSimple()
{ {
return GenerateUniquieID<TargetType>(string.Empty); return new Random().Next().ToString() + DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + currentSimpleID++.ToString();
}
protected virtual string GenerateDefault()
{
return GenerateUniquieID<UniquieID>(currentSimpleID++.ToString());
}
public virtual void GenerateIfNull()
{
if (!HasID) Generate();
}
public override string ToString()
{
return ID;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return base.GetHashCode(); return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
} }
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
if (obj is UniquieID iD)
{
if (ReferenceEquals(obj, iD))
return true;
else
{
var leftHasID = iD.HasID;
var rightHasID = HasID;
if (!leftHasID && iD.GenerateOnGet)
{
iD.Generate();
leftHasID = iD.HasID;
}
if (!rightHasID && GenerateOnGet)
{
Generate();
rightHasID = HasID;
}
if (leftHasID && rightHasID)
return _iD.Equals(iD._iD);
}
}
return base.Equals(obj); return base.Equals(obj);
} }
#region Statics for Generation #region Statics for Generation
private static string GenerateUniquieID<T>(string var) protected static string GenerateUniquieID<T>(string var)
{ {
var sn = TryGetSerialNumberOfFirstHardDrive(); var sn = TryGetSerialNumberOfFirstHardDrive();
var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff"); var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff");
@@ -77,11 +149,11 @@ namespace Pilz.Cryptography
#endregion #endregion
public static implicit operator string(UniquieID<TargetType> id) => id.ID; public static implicit operator string(UniquieID id) => id.ID;
public static implicit operator UniquieID<TargetType>(string id) => new UniquieID<TargetType>() { ID = id }; public static implicit operator UniquieID(string id) => new UniquieID() { ID = id };
public static implicit operator UniquieID<TargetType>(int id) => new UniquieID<TargetType>() { ID = Convert.ToString(id) }; public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) };
public static bool operator ==(UniquieID<TargetType> left, UniquieID<TargetType> right) => left.ID.Equals(right.ID); public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
public static bool operator !=(UniquieID<TargetType> left, UniquieID<TargetType> right) => !left.ID.Equals(right.ID); public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
} }
} }

View File

@@ -1,118 +0,0 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace Pilz.Cryptography
{
public class UniquieID : IUniquieID
{
protected static int currentSimpleID = 0;
[JsonProperty(nameof(ID))]
protected string _iD;
[JsonIgnore]
public virtual bool SimpleMode { get; set; } = false;
[JsonIgnore]
public virtual bool GenerateOnGet { get; set; } = false;
[JsonIgnore]
public virtual bool HasID => !string.IsNullOrEmpty(_iD);
[JsonIgnore]
public virtual string ID
{
get
{
if (GenerateOnGet)
GenerateIfNull();
return _iD;
}
internal set
=> _iD = value;
}
public UniquieID() : this(false)
{
}
public UniquieID(bool autoGenerate)
{
if (autoGenerate)
GenerateIfNull();
}
public virtual void Generate()
{
if (SimpleMode)
ID = GenerateSimple();
else
ID = GenerateDefault();
}
protected virtual string GenerateSimple()
{
return DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + currentSimpleID++.ToString();
}
protected virtual string GenerateDefault()
{
return new Random().Next().ToString() + currentSimpleID++.ToString();
}
public virtual void GenerateIfNull()
{
if (!HasID) Generate();
}
public override string ToString()
{
return ID;
}
public override int GetHashCode()
{
return -1430039477 + EqualityComparer<string>.Default.GetHashCode(_iD);
}
public override bool Equals(object obj)
{
if (obj is UniquieID iD)
{
if (ReferenceEquals(obj, iD))
return true;
else
{
var leftHasID = iD.HasID;
var rightHasID = HasID;
if (!leftHasID && iD.GenerateOnGet)
{
iD.Generate();
leftHasID = iD.HasID;
}
if (!rightHasID && GenerateOnGet)
{
Generate();
rightHasID = HasID;
}
if (leftHasID && rightHasID)
return _iD.Equals(iD._iD);
}
}
return base.Equals(obj);
}
public static implicit operator string(UniquieID id) => id.ID;
public static implicit operator UniquieID(string id) => new UniquieID() { ID = id };
public static implicit operator UniquieID(int id) => new UniquieID() { ID = Convert.ToString(id) };
public static bool operator ==(UniquieID left, UniquieID right) => left.ID.Equals(right.ID);
public static bool operator !=(UniquieID left, UniquieID right) => !left.ID.Equals(right.ID);
}
}