public ManagePackageViewModel Setup(
     ManagePackageViewModel viewModel,
     Package package,
     User currentUser,
     IReadOnlyList <ReportPackageReason> reasons,
     UrlHelper url,
     string readMe,
     bool isManageDeprecationEnabled)
 {
     _listPackageItemViewModelFactory.Setup(viewModel, package, currentUser);
     return(SetupInternal(viewModel, package, currentUser, reasons, url, readMe, isManageDeprecationEnabled));
 }
        public ManagePackageViewModel Create(
            Package package,
            User currentUser,
            IReadOnlyList <ReportPackageReason> reasons,
            UrlHelper url,
            string readMe,
            bool isManageDeprecationEnabled)
        {
            var viewModel = new ManagePackageViewModel();

            return(Setup(viewModel, package, currentUser, reasons, url, readMe, isManageDeprecationEnabled));
        }
        private ManagePackageViewModel SetupInternal(
            ManagePackageViewModel viewModel,
            Package package,
            User currentUser,
            IReadOnlyList <ReportPackageReason> reasons,
            UrlHelper url,
            string readMe,
            bool isManageDeprecationEnabled)
        {
            viewModel.IsCurrentUserAnAdmin = currentUser != null && currentUser.IsAdministrator;

            viewModel.DeletePackagesRequest = new DeletePackagesRequest
            {
                Packages = new List <string>
                {
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "{0}|{1}",
                        package.PackageRegistration.Id,
                        package.Version)
                },
                ReasonChoices = reasons
            };

            viewModel.IsLocked = package.PackageRegistration.IsLocked;

            viewModel.IsManageDeprecationEnabled = isManageDeprecationEnabled;

            var versionSelectPackages = package.PackageRegistration.Packages
                                        .Where(p => p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating)
                                        .OrderByDescending(p => new NuGetVersion(p.Version))
                                        .ToList();

            var versionSelectList = new List <SelectListItem>();

            viewModel.VersionSelectList = versionSelectList;
            var versionListedStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionListedState>();

            viewModel.VersionListedStateDictionary = versionListedStateDictionary;
            var versionReadMeStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionReadMeState>();

            viewModel.VersionReadMeStateDictionary = versionReadMeStateDictionary;
            var versionDeprecationStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionDeprecationState>();

            viewModel.VersionDeprecationStateDictionary = versionDeprecationStateDictionary;

            foreach (var versionSelectPackage in versionSelectPackages)
            {
                var text  = PackageHelper.GetSelectListText(versionSelectPackage);
                var value = NuGetVersionFormatter.Normalize(versionSelectPackage.Version);
                versionSelectList.Add(new SelectListItem
                {
                    Text     = text,
                    Value    = value,
                    Selected = package == versionSelectPackage
                });

                versionListedStateDictionary.Add(
                    value,
                    new ManagePackageViewModel.VersionListedState(versionSelectPackage.Listed, versionSelectPackage.DownloadCount));

                var model = new TrivialPackageVersionModel(versionSelectPackage);
                versionReadMeStateDictionary.Add(
                    value,
                    GetVersionReadMeState(model, url));

                versionDeprecationStateDictionary.Add(
                    value,
                    GetVersionDeprecationState(versionSelectPackage.Deprecations.SingleOrDefault(), text));
            }

            // Update edit model with the readme.md data.
            viewModel.ReadMe = new EditPackageVersionReadMeRequest();
            if (package.HasReadMe && package.EmbeddedReadmeType == EmbeddedReadmeFileType.Absent)
            {
                viewModel.ReadMe.ReadMe.SourceType = ReadMeService.TypeWritten;
                viewModel.ReadMe.ReadMe.SourceText = readMe;
            }

            return(viewModel);
        }