Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }