Files
Umbraco-CMS/src/Umbraco.Core/GuidUdi.cs
2020-02-24 08:21:53 +01:00

67 lines
1.9 KiB
C#

using System;
using System.ComponentModel;
namespace Umbraco.Core
{
/// <summary>
/// Represents a guid-based entity identifier.
/// </summary>
[TypeConverter(typeof(UdiTypeConverter))]
public class GuidUdi : Udi
{
/// <summary>
/// The guid part of the identifier.
/// </summary>
public Guid Guid { get; private set; }
/// <summary>
/// Initializes a new instance of the GuidUdi class with an entity type and a guid.
/// </summary>
/// <param name="entityType">The entity type part of the udi.</param>
/// <param name="guid">The guid part of the udi.</param>
public GuidUdi(string entityType, Guid guid)
: base(entityType, "umb://" + entityType + "/" + guid.ToString("N"))
{
Guid = guid;
}
/// <summary>
/// Initializes a new instance of the GuidUdi class with an uri value.
/// </summary>
/// <param name="uriValue">The uri value of the udi.</param>
public GuidUdi(Uri uriValue)
: base(uriValue)
{
Guid guid;
if (Guid.TryParse(uriValue.AbsolutePath.TrimStart('/'), out guid) == false)
throw new FormatException("Url \"" + uriValue + "\" is not a guid entity id.");
Guid = guid;
}
public override bool Equals(object obj)
{
var other = obj as GuidUdi;
if (other == null) return false;
return EntityType == other.EntityType && Guid == other.Guid;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
/// <inheritdoc/>
public override bool IsRoot
{
get { return Guid == Guid.Empty; }
}
public GuidUdi EnsureClosed()
{
EnsureNotRoot();
return this;
}
}
}