private static void Validate(Metadata entity) { if (entity.BrandId <= 0) { throw new InvalidMetadataException("Brand is required"); } if (entity.GroupNumber <= 0) { throw new InvalidMetadataException("Group Number is required"); } if (StringUtils.IsBlank(entity.Name)) { throw new InvalidMetadataException("Metadata name cannot be blank"); } MetadataFinder finder = new MetadataFinder { Name = entity.Name, BrandId = entity.BrandId, GroupNumber = entity.GroupNumber }; Metadata o = Metadata.FindOne(finder); if (!o.IsNull) { if (entity.IsNew) { throw new InvalidMetadataException("That item already exists"); } if (!entity.MetadataId.Equals(o.MetadataId)) { throw new InvalidMetadataException("That item already exists"); } } }
/// <summary> /// deletes the setting, all stored possible selection values and all selected values for all assets /// </summary> /// <param name="brandMetadataSettingId">the setting to be deleted</param> public static void DeleteSettingAndValues(int brandMetadataSettingId) { var setting = BrandMetadataSetting.Get(brandMetadataSettingId); if (setting == null) { return; } var group = setting.GroupNumber; var metaValuesFinder = new MetadataFinder() { GroupNumber = group }; var vals = Metadata.FindMany(metaValuesFinder); var assetMetaFinder = new AssetMetadataFinder() { }; //iterate through all values, delete existing assetmetadata selection and then delete values themselves as well foreach (var metaValue in vals) { assetMetaFinder.MetadataId = metaValue.MetadataId.GetValueOrDefault(); var assetMetaSelections = AssetMetadata.FindMany(assetMetaFinder); foreach (var assetMeta in assetMetaSelections) { AssetMetadata.Delete(assetMeta.AssetMetadataId); } Metadata.Delete(metaValue.MetadataId); } //delete selectable setting if one exists if (!setting.SelectableSetting.IsNull && !setting.SelectableSetting.IsNew) { BrandMetadataSelectableSetting.Delete(setting.SelectableSetting.BrandMetadataSelectableSettingId); } //delete the setting itself BrandMetadataSetting.Delete(brandMetadataSettingId); }
public static void Delete(int id) { // Get the metadata item to be deleted Metadata o = Metadata.Get(id); // Check if it's a root item, in which case we need to ensure that it's not the only root item remaining // as we need to disallow the deletion then (there must be one root item at all times) if (!o.ParentMetadataId.HasValue) { MetadataFinder finder = new MetadataFinder { BrandId = o.BrandId, GroupNumber = o.GroupNumber, ParentMetadataId = Int32.MinValue }; int count = Metadata.GetCount(finder); if (count == 1) { throw new InvalidMetadataException("This is the only root metadata item and cannot be deleted"); } } o.IsDeleted = true; Metadata.Update(o); CacheManager.InvalidateCache("Metadata", CacheType.All); }