Ejemplo n.º 1
0
        /// <summary>
        /// Adds a <see cref="SolutionProject"/> to the solution exporter, and optionally registers it as generated.
        /// </summary>
        /// <param name="exporter">The @this exporter.</param>
        /// <param name="project">The project to add.</param>
        /// <param name="isGenerated">Whether the project is generated.</param>
        public static void AddProject(this ISolutionExporter exporter, SolutionProject project, bool isGenerated = false)
        {
            exporter.Projects.Add(project.Guid, project);

            if (isGenerated)
            {
                exporter.GeneratedItems.Add(project.Guid);
            }
        }
Ejemplo n.º 2
0
 public SolutionController(IWebAppContext appContext
                           , ISolutionService solutionService
                           , ISolutionExporter solutionExporter
                           , ISolutionImporter solutionImporter
                           )
     : base(appContext, solutionService)
 {
     _solutionExporter = solutionExporter;
     _solutionImporter = solutionImporter;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets or adds a <see cref="SolutionFolder"/> to the solution exporter, and optionally registers it as generated.
        /// </summary>
        /// <param name="exporter">The @this exporter.</param>
        /// <param name="folderGuid">The folder identifier.</param>
        /// <param name="folderName">The folder name.</param>
        /// <param name="isGenerated">Whether the folder is generated.</param>
        /// <returns>The fetched or created solution folder.</returns>
        public static SolutionFolder GetOrAddFolder(this ISolutionExporter exporter, Guid folderGuid, string folderName, bool isGenerated = false)
        {
            SolutionFolder toReturn = exporter.Folders.GetOrAdd(folderGuid, k => new SolutionFolder(folderName));

            if (isGenerated)
            {
                exporter.GeneratedItems.Add(folderGuid);
            }

            return(toReturn);
        }
Ejemplo n.º 4
0
 private void ProcessSetForKnownFolders <T>(ISolutionExporter exporter, Dictionary <AssetLocation, Tuple <Guid, string> > knownFolderMapping, IEnumerable <T> set, Func <T, AssetLocation> getAssetLocation, Func <T, Guid> getGuidFunc)
 {
     foreach (T item in set)
     {
         if (knownFolderMapping.TryGetValue(getAssetLocation(item), out Tuple <Guid, string> guidNameTuple))
         {
             exporter.GetOrAddFolder(guidNameTuple.Item1, guidNameTuple.Item2, isGenerated: true)
             .Children.Add(getGuidFunc(item));
         }
     }
 }
Ejemplo n.º 5
0
        //Используя переданные ITaskDataProvider, ISolutionExporter, решить задачу и вывести результат.
        static void SolveTasks(ITaskDataProvider taskDataProvider, ISolutionExporter solutionExporter)
        {
            //Пока в ITaskDataProvider есть входные данные
            while (taskDataProvider.HasNextTaskData())
            {
                //Получить входные данные.
                Tuple <ITransportNetwork, IEnumerable <IRoute> > taskData = taskDataProvider.GetTaskData();

                ITransportNetwork    transportNetwork = taskData.Item1;
                IEnumerable <IRoute> routes           = taskData.Item2;

                //Найти столкновения на станциях.
                IEnumerable <CollisionAtStationCase> collisionAtStationCases = CollisionsFinder.FindCollisionsAtStations(transportNetwork, routes);
                //Найти столкновения на путях.
                IEnumerable <CollisionOnConnectionBetweenStationsCase> collisionOnConnectionBetweenStationsCases = CollisionsFinder.FindCollisionsOnConnectionsBetweenStations(transportNetwork, routes);

                //Передать результаты решения ISolutionExporter.
                solutionExporter.Export(transportNetwork, routes, collisionAtStationCases, collisionOnConnectionBetweenStationsCases);
            }
        }
Ejemplo n.º 6
0
        public void ExportSolution(IUnityProjectExporter unityProjectExporter, FileInfo solutionFilePath, DirectoryInfo generatedProjectsFolder)
        {
            SolutionFileInfo  solutionFileInfo = TextSolutionFileParser.ParseExistingSolutionFile(logger, solutionFilePath.FullName);
            ISolutionExporter exporter         = unityProjectExporter.CreateSolutionExporter(logger, solutionFilePath);

            //TODO we need to figure out how to handle existing projects

            // Remove known folders
            solutionFileInfo.Projects.Remove(config.BuiltInPackagesFolderGuid);
            solutionFileInfo.Projects.Remove(config.ImportedPackagesFolderGuid);
            solutionFileInfo.Projects.Remove(config.ExternalPackagesFolderGuid);

            // Process generated projects
            foreach (KeyValuePair <string, CSProjectInfo> projectPair in CSProjects)
            {
                Uri relativePath = Utilities.GetRelativeUri(solutionFilePath.Directory.FullName, MSBuildUnityProjectExporter.GetProjectPath(projectPair.Value, generatedProjectsFolder).FullName);
                exporter.AddProject(CreateSolutionProjectEntry(projectPair.Value, relativePath, solutionFileInfo), isGenerated: true);
            }

            // Add dependency project
            string dependencyProjectName = $"{UnityProjectName}.Dependencies.msb4u";

            exporter.AddProject(GetDependencyProjectReference(dependencyProjectName, $"{dependencyProjectName}.csproj"), isGenerated: true);

            // Process existing projects
            foreach (KeyValuePair <Guid, Project> projectPair in solutionFileInfo.Projects)
            {
                if (!exporter.Projects.ContainsKey(projectPair.Key) &&
                    !solutionFileInfo.MSB4UGeneratedItems.Contains(projectPair.Key) &&
                    projectPair.Value.TypeGuid != SolutionProject.FolderTypeGuid)
                {
                    exporter.AddProject(GetSolutionProjectEntryFrom(projectPair.Value, solutionFileInfo));
                }
            }

            // Bring forward the properties, then set the one we care about
            exporter.Properties.AddRange(solutionFileInfo.Properties);
            exporter.Properties["HideSolutionNode"] = "FALSE";

            // Bring forward the extensibility globals, then set the one we care about
            exporter.ExtensibilityGlobals.AddRange(solutionFileInfo.ExtensibilityGlobals);
            exporter.ExtensibilityGlobals["SolutionGuid"] = "{" + config.SolutionGuid.ToString().ToUpper() + "}";

            // Bring forward the pairs, and then set the platforms we know of
            exporter.ConfigurationPlatforms.AddRange(solutionFileInfo.ConfigPlatformPairs);
            foreach (CompilationPlatformInfo platform in AvailablePlatforms)
            {
                exporter.ConfigurationPlatforms.Add(new ConfigurationPlatformPair(UnityConfigurationType.InEditor, platform.Name));
                exporter.ConfigurationPlatforms.Add(new ConfigurationPlatformPair(UnityConfigurationType.Player, platform.Name));
            }

            // Set the folders by scanning for "projects" with folder type in old projects
            foreach (KeyValuePair <Guid, Project> folderPair in solutionFileInfo.Projects.Where(t => t.Value.TypeGuid == SolutionProject.FolderTypeGuid))
            {
                exporter.GetOrAddFolder(folderPair.Key, folderPair.Value.Name)
                .Children.AddRange(solutionFileInfo.ChildToParentNestedMappings.Where(t => t.Value == folderPair.Key).Select(t => t.Key));
            }

            Dictionary <AssetLocation, Tuple <Guid, string> > knownFolderMapping = GetKnownFolderMapping();

            // Confiure known folders for generated projects
            ProcessSetForKnownFolders(exporter, knownFolderMapping, CSProjects.Values, t => t.AssemblyDefinitionInfo.AssetLocation, t => t.Guid);

            //TODO handle existing projects

            exporter.AdditionalSections = solutionFileInfo.SolutionSections;

            exporter.Write();
        }