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