protected virtual CategoryViewModel CreateCategoryViewModel(CreateCategoryViewModelParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (param.Category == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("Category"), "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(ArgumentNullMessageFormatter.FormatErrorMessage("CultureInfo"), "param");
            }

            return(_viewModelMapper.MapTo <CategoryViewModel>(param.Category, param.CultureInfo));
        }
        protected virtual CategoryViewModel CreateCategoryViewModel(CreateCategoryViewModelParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.Category == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.Category)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }

            return(_viewModelMapper.MapTo <CategoryViewModel>(param.Category, param.CultureInfo));
        }
        /// <summary>
        /// Gets the categories path from the provided categoryId to the root category.
        /// </summary>
        /// <param name="param">The parameter.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">param</exception>
        public virtual async Task <CategoryViewModel[]> GetCategoriesPathAsync(GetCategoriesPathParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }

            var categoriesPath = await _categoryRepository.GetCategoriesPathAsync(param).ConfigureAwait(false);

            var categoriesPathViewModel = categoriesPath.Select(category =>
            {
                var categoryViewModelParam = new CreateCategoryViewModelParam(category, param.CultureInfo);

                return(CreateCategoryViewModel(categoryViewModelParam));
            });

            return(categoriesPathViewModel.ToArray());
        }