Exemple #1
0
        public List <Tuple <string, ProjectDetails, ImportedDataTable> > GetImportedDataTableFromPackage(EnvironmentEnum iSourceEnvironment, EnvironmentEnum iDestinationEnvironment, Package iPackageDeployToStaging)
        {
            var result = new List <Tuple <string, ProjectDetails, ImportedDataTable> >();

            var host = new EngineHost(HostEnvironment.CreateDefaultEnvironment(false));
            var sourceGroupManager   = host.CreateGroupManager();
            var sourceProjectManager = host.CreateProjectManager();
            var sourceGroup          = sourceGroupManager.OpenGroup(iSourceEnvironment);

            var packageDistinctProjectGUIDList    = iPackageDeployToStaging.SubTasks.Where(x => x.ProjectGUID != null).GroupBy(x => x.ProjectGUID).Select(x => (Guid?)x.First().ProjectGUID).ToList();
            var packageDistinctProjectDetailsList = new List <ProjectDetails>();

            foreach (var item in packageDistinctProjectGUIDList)
            {
                if (item != null)
                {
                    packageDistinctProjectDetailsList.Add(sourceGroup.Projects.GetProject((Guid)item));
                }
            }

            //Bouclage sur les projets source inclus dans le package
            var projectDevCounter = 1;

            foreach (var projectItem in packageDistinctProjectDetailsList.Enum())
            {
                var message = "Récupération des tables dev du package, Projet {0}/{1} : {2}".FormatString(projectDevCounter, packageDistinctProjectDetailsList.Count(), projectItem.Name);
                ReportProgress(message);
                sourceProjectManager.OpenProject(sourceGroup, projectItem);
                var project = sourceProjectManager.Project;

                var importedDataTables = project.GetImportedDataTableList();
                foreach (var tableItem in importedDataTables.Enum())
                {
                    result.Add(new Tuple <string, ProjectDetails, ImportedDataTable>(iSourceEnvironment.GetName("FR"), projectItem, tableItem));
                }

                sourceProjectManager.CloseProject(false);
                projectDevCounter++;
            }

            //fermeture du groupe
            sourceGroupManager.CloseGroup();

            //Récupère les projets de la destination non impacté par le package
            var destinationGroupManager   = host.CreateGroupManager();
            var destinationProjectManager = host.CreateProjectManager();
            var destinationGroup          = destinationGroupManager.OpenGroup(iDestinationEnvironment);

            var openedStagingProjectlist = destinationGroup.GetOpenedProjectList();

            if (openedStagingProjectlist.IsNotNullAndNotEmpty())
            {
                throw new Exception("Certains projets du groupe '{0}' sont ouverts. L'analyse n'est donc pas possible.".FormatString(destinationGroup.Name) + Environment.NewLine + Environment.NewLine + openedStagingProjectlist.Select(x => x.Name).Concat(Environment.NewLine));
            }

            var projectStagingComparator = new ListComparator <ProjectDetails, ProjectDetails>(destinationGroup.GetProjectList(), x => x.Name, packageDistinctProjectDetailsList, x => x.Name);

            var projetPreprodCounter = 1;

            foreach (var projectItem in projectStagingComparator.RemovedList.Enum())
            {
                var message = "Récupération des tables préprod du package, Projet {0}/{1} : {2}".FormatString(projetPreprodCounter, projectStagingComparator.RemovedList.Count(), projectItem.Name);
                ReportProgress(message);

                destinationProjectManager.OpenProject(destinationGroup, projectItem);
                var project = destinationProjectManager.Project;

                var importedDataTables = project.GetImportedDataTableList();
                foreach (var tableItem in importedDataTables.Enum())
                {
                    result.Add(new Tuple <string, ProjectDetails, ImportedDataTable>(iDestinationEnvironment.GetName("FR"), projectItem, tableItem));
                }
                destinationProjectManager.CloseProject(false);
                projetPreprodCounter++;
            }

            //fermeture du groupe
            destinationGroupManager.CloseGroup();

            return(result);
        }