private ArtifactResultSet ToNovaArtifactResultSet(ICollection <SqlDiscardPublishDetails> discardPublishDetails, PublishEnvironment environment, IDictionary <int, string> projectsNames)
        {
            var artifactResultSet = new ArtifactResultSet();

            if (discardPublishDetails != null)
            {
                artifactResultSet.Artifacts.Clear();
                foreach (var dpd in discardPublishDetails)
                {
                    var artifact = new Artifact
                    {
                        Id             = dpd.ItemId,
                        Name           = dpd.Name,
                        ParentId       = dpd.ParentId,
                        OrderIndex     = dpd.OrderIndex,
                        ItemTypeId     = dpd.ItemType_ItemTypeId,
                        Prefix         = dpd.Prefix,
                        ItemTypeIconId = dpd.Icon_ImageId,
                        PredefinedType = dpd.PrimitiveItemTypePredefined,
                        ProjectId      = dpd.VersionProjectId,
                        Version        = dpd.VersionsCount == 0 ? -1 : dpd.VersionsCount,
                        IsStandard     = dpd.InstanceItemTypeTypeId.HasValue
                    };
                    if (environment != null && environment.SensitivityCollector.ArtifactModifications != null)
                    {
                        ReuseSensitivityCollector.ArtifactModification artifactModification;
                        if (environment.SensitivityCollector.ArtifactModifications.TryGetValue(artifact.Id, out artifactModification) &&
                            artifactModification?.ModifiedPropertyTypes != null)
                        {
                            artifactResultSet.ModifiedProperties.Add(artifact.Id, new List <Property>());
                            artifactResultSet.ModifiedProperties[artifact.Id].AddRange(
                                artifactModification.ModifiedPropertyTypes.Select(p => new Property
                            {
                                PropertyTypeId = p.Item1,
                                Predefined     = p.Item2
                            }));
                        }
                    }
                    artifactResultSet.Artifacts.Add(artifact);
                }
                SortArtifactsByProjectNameThenById(projectsNames, artifactResultSet);
            }
            if (projectsNames != null)
            {
                artifactResultSet.Projects.Clear();
                artifactResultSet.Projects.AddRange(projectsNames.Select(pn => new Item
                {
                    Id   = pn.Key,
                    Name = pn.Value
                }).ToList());
            }
            return(artifactResultSet);
        }
        private static void SortArtifactsByProjectNameThenById(IDictionary <int, string> projectsNames,
                                                               ArtifactResultSet novaArtifactResultSet)
        {
            var artifactResultSet = novaArtifactResultSet.Artifacts.ToArray();

            novaArtifactResultSet.Artifacts.Clear();
            novaArtifactResultSet.Artifacts.AddRange(
                artifactResultSet.OrderBy(a =>
            {
                string projectName;
                if (a.ProjectId <= 0)
                {
                    return(string.Empty);
                }
                projectsNames.TryGetValue(a.ProjectId, out projectName);
                return(projectName);
            }).ThenBy(a => a.Id));
        }