86 lines
3 KiB
C#
86 lines
3 KiB
C#
using System;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using Kreta.Naplo.Domain.V3.UniqueIdentifier;
|
|
|
|
namespace Kreta.Naplo.Domain.V3.Adatszotar
|
|
{
|
|
[Serializable]
|
|
public class Adatszotar<T> where T : System.Enum
|
|
{
|
|
private string _leiras;
|
|
|
|
public Adatszotar(int id)
|
|
{
|
|
Uid = new AdatszotarUid(id, GetEnumName(id));
|
|
}
|
|
|
|
public Adatszotar(int id, string leiras)
|
|
{
|
|
Uid = new AdatszotarUid(id, GetEnumName(id));
|
|
Leiras = leiras;
|
|
}
|
|
|
|
public Adatszotar(string leiras)
|
|
{
|
|
Uid = new AdatszotarUid(0, GetEnumName(0));
|
|
Leiras = leiras;
|
|
}
|
|
|
|
public Adatszotar(string nev, string leiras)
|
|
{
|
|
Uid = new AdatszotarUid(0, nev);
|
|
Leiras = leiras;
|
|
}
|
|
|
|
public string EnumTypeFullName => typeof(T).Name;
|
|
|
|
public string EnumTypeName => EnumTypeFullName.Replace("Enum", string.Empty).Replace("enum", string.Empty);
|
|
|
|
public static bool IsAdatszotarElem(int id) => id >= Constant.EgyedilegFelvettAdatSzotarElemStartIndex && string.IsNullOrWhiteSpace(System.Enum.GetName(typeof(T), id));
|
|
|
|
public string Leiras { get => _leiras ?? GetDisplayNameAttribute(); private set => _leiras = value; }
|
|
|
|
public AdatszotarUid Uid { get; private set; }
|
|
|
|
private string GetEnumName(int id) => id == 0 ? $"{typeof(T)}_{nameof(Enum.Adatszotar.IsmeretlenErtek)}"
|
|
: IsAdatszotarElem(id) ? nameof(Enum.Adatszotar.AdatszotarElem)
|
|
: System.Enum.GetName(typeof(T), id);
|
|
|
|
public override bool Equals(object obj) => obj is Adatszotar<T> @enum && Uid.Id == @enum.Uid.Id;
|
|
|
|
public T GetEnum() => (T)System.Enum.Parse(typeof(T), Uid.Nev);
|
|
|
|
public override int GetHashCode() => 2_108_858_624 + Uid.Id.GetHashCode();
|
|
|
|
private string GetDisplayNameAttribute()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(Uid.Nev))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var fieldInfo = typeof(T).GetField(Uid.Nev);
|
|
|
|
if (fieldInfo != null)
|
|
{
|
|
var attributes = (DisplayAttribute)fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault();
|
|
|
|
if (attributes != null)
|
|
{
|
|
return attributes.GetName();
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static implicit operator Adatszotar<T>(int id) => new Adatszotar<T>(id);
|
|
|
|
public static implicit operator Adatszotar<T>(T enumValue) => new Adatszotar<T>(Convert.ToInt32(enumValue));
|
|
|
|
public static bool operator !=(Adatszotar<T> lhsWrapper, T rhsEnum) => IsAdatszotarElem(lhsWrapper.Uid.Id) || !lhsWrapper.GetEnum().Equals(rhsEnum);
|
|
|
|
public static bool operator ==(Adatszotar<T> lhsWrapper, T rhsEnum) => !IsAdatszotarElem(lhsWrapper.Uid.Id) && lhsWrapper.GetEnum().Equals(rhsEnum);
|
|
}
|
|
}
|