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 System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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)
{
return typeof(UniquieID<TargetType>).IsAssignableFrom(objectType);
return typeof(UniquieID).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var idString = serializer.Deserialize<string>(reader);
UniquieID<TargetType> id;
UniquieID id;
if (existingValue is object)
id = (UniquieID<TargetType>)existingValue;
if (existingValue is UniquieID existingID && (!EnableCheckForDepricatedTypes || existingID.GetType() == typeof(UniquieID)))
id = existingID;
else
id = new UniquieID<TargetType>();
id = new UniquieID();
id.ID = idString;
@@ -34,7 +32,7 @@ namespace Pilz.Json.Converters
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 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
{
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()
{
return base.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);
}
#region Statics for Generation
private static string GenerateUniquieID<T>(string var)
protected static string GenerateUniquieID<T>(string var)
{
var sn = TryGetSerialNumberOfFirstHardDrive();
var dateTime = DateTime.UtcNow.ToString("yyyyMMddHHmmssfffffff");
@@ -77,11 +149,11 @@ namespace Pilz.Cryptography
#endregion
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 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<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);
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);
}
}

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);
}
}