/// <summary>
        /// Prepare paged specification attribute group list model
        /// </summary>
        /// <param name="searchModel">Specification attribute group search model</param>
        /// <returns>Specification attribute group list model</returns>
        public virtual SpecificationAttributeGroupListModel PrepareSpecificationAttributeGroupListModel(SpecificationAttributeGroupSearchModel searchModel)
        {
            if (searchModel == null)
            {
                throw new ArgumentNullException(nameof(searchModel));
            }

            //get specification attribute groups
            var specificationAttributeGroups = _specificationAttributeService
                                               .GetSpecificationAttributeGroups(searchModel.Page - 1, searchModel.PageSize);

            if (searchModel.Page == 1)
            {
                //dislpay default group with non-grouped specification attributes on first page
                specificationAttributeGroups.Insert(0, new SpecificationAttributeGroup
                {
                    Name = _localizationService.GetResource("Admin.Catalog.Attributes.SpecificationAttributes.SpecificationAttributeGroup.DefaultGroupName")
                });
            }

            //prepare list model
            var model = new SpecificationAttributeGroupListModel().PrepareToGrid(searchModel, specificationAttributeGroups, () =>
            {
                //fill in model values from the entity
                return(specificationAttributeGroups.Select(attribute => attribute.ToModel <SpecificationAttributeGroupModel>()));
            });

            return(model);
        }
        /// <summary>
        /// Prepare available specification attribute groups
        /// </summary>
        /// <param name="items">Specification attributes</param>
        /// <param name="withSpecialDefaultItem">Whether to insert the first special item for the default value</param>
        /// <param name="defaultItemText">Default item text; pass null to use default value of the default item text</param>
        public virtual void PrepareSpecificationAttributeGroups(IList <SelectListItem> items, bool withSpecialDefaultItem = true, string defaultItemText = null)
        {
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }

            //prepare available specification attribute groups
            var availableSpecificationAttributeGroups = _specificationAttributeService.GetSpecificationAttributeGroups();

            foreach (var group in availableSpecificationAttributeGroups)
            {
                items.Add(new SelectListItem {
                    Value = group.Id.ToString(), Text = group.Name
                });
            }

            // use empty string for nullable field
            var defaultItemValue = string.Empty;

            //insert special item for the default value
            PrepareDefaultItem(items, withSpecialDefaultItem, defaultItemText, defaultItemValue);
        }