Files
Umbraco-CMS/src/Umbraco.Core/Models/ContentCultureInfosCollection.cs

75 lines
2.6 KiB
C#
Raw Normal View History

2018-10-23 15:04:41 +02:00
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using Umbraco.Core.Collections;
using Umbraco.Core.Exceptions;
namespace Umbraco.Core.Models
{
/// <summary>
/// The culture names of a content's variants
/// </summary>
public class ContentCultureInfosCollection : ObservableDictionary<string, ContentCultureInfos>, IDeepCloneable
{
/// <summary>
/// Initializes a new instance of the <see cref="ContentCultureInfosCollection"/> class.
/// </summary>
public ContentCultureInfosCollection()
: base(x => x.Culture, StringComparer.InvariantCultureIgnoreCase)
{ }
/// <summary>
/// Initializes a new instance of the <see cref="ContentCultureInfosCollection"/> class with items.
/// </summary>
public ContentCultureInfosCollection(IEnumerable<ContentCultureInfos> items)
: base(x => x.Culture, StringComparer.InvariantCultureIgnoreCase)
{
2018-10-26 12:36:59 +02:00
// make sure to add *copies* and not the original items,
// as items can be modified by AddOrUpdate, and therefore
// the new collection would be impacted by changes made
// to the old collection
2018-10-23 15:04:41 +02:00
foreach (var item in items)
2018-10-26 12:36:59 +02:00
Add(new ContentCultureInfos(item));
2018-10-23 15:04:41 +02:00
}
/// <summary>
/// Adds or updates a <see cref="ContentCultureInfos"/> instance.
/// </summary>
public void AddOrUpdate(string culture, string name, DateTime date)
{
if (culture.IsNullOrWhiteSpace()) throw new ArgumentNullOrEmptyException(nameof(culture));
culture = culture.ToLowerInvariant();
if (TryGetValue(culture, out var item))
{
item.Name = name;
item.Date = date;
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, item, item));
}
else
{
Add(new ContentCultureInfos(culture)
{
Name = name,
Date = date
});
}
}
/// <inheritdoc />
public object DeepClone()
{
var clone = new ContentCultureInfosCollection();
foreach (var item in this)
{
var itemClone = (ContentCultureInfos) item.DeepClone();
itemClone.ResetDirtyProperties(false);
clone.Add(itemClone);
}
return clone;
}
}
}