depricate UniquieID<TargetType> and adjust json converters
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Pilz.Json.Converters
|
||||||
|
{
|
||||||
|
[Obsolete]
|
||||||
|
public class UniquieIDStringJsonConverter<TargetType> : UniquieIDStringJsonConverter
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
40
Pilz.Cryptography/UniquieID.TargetType.cs
Normal file
40
Pilz.Cryptography/UniquieID.TargetType.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user