using System; using System.Collections.Generic; using System.ComponentModel; using Umbraco.Core.Models.Packaging; namespace Umbraco.Core.Events { public class ImportPackageEventArgs : CancellableEnumerableObjectEventArgs, IEquatable> { public ImportPackageEventArgs(TEntity eventObject, IPackageInfo packageMetaData, bool canCancel) : base(new[] { eventObject }, canCancel) { PackageMetaData = packageMetaData ?? throw new ArgumentNullException(nameof(packageMetaData)); } public ImportPackageEventArgs(TEntity eventObject, IPackageInfo packageMetaData) : this(eventObject, packageMetaData, true) { } public IPackageInfo PackageMetaData { get; } public IEnumerable InstallationSummary => EventObject; public bool Equals(ImportPackageEventArgs other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; // TODO: MetaData for package metadata has no equality operators :/ return base.Equals(other) && PackageMetaData.Equals(other.PackageMetaData); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; return Equals((ImportPackageEventArgs) obj); } public override int GetHashCode() { unchecked { return (base.GetHashCode() * 397) ^ PackageMetaData.GetHashCode(); } } public static bool operator ==(ImportPackageEventArgs left, ImportPackageEventArgs right) { return Equals(left, right); } public static bool operator !=(ImportPackageEventArgs left, ImportPackageEventArgs right) { return !Equals(left, right); } } }