File: ToolPackage\ToolPackageFactory.cs
Web Access
Project: ..\..\..\src\Cli\dotnet\dotnet.csproj (dotnet)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using Microsoft.DotNet.Configurer;
using Microsoft.Extensions.EnvironmentAbstractions;
 
namespace Microsoft.DotNet.Cli.ToolPackage;
 
internal static class ToolPackageFactory
{
    public static (IToolPackageStore packageStore, IToolPackageStoreQuery packageStoreQuery, IToolPackageDownloader downloader) CreateToolPackageStoresAndDownloader(
        DirectoryPath? nonGlobalLocation = null, string runtimeJsonPathForTests = null)
    {
        ToolPackageStoreAndQuery toolPackageStore = CreateConcreteToolPackageStore(nonGlobalLocation);
        var toolPackageDownloader = new ToolPackageDownloader(toolPackageStore, runtimeJsonPathForTests);
 
        return (toolPackageStore, toolPackageStore, toolPackageDownloader);
    }
 
    public static (IToolPackageStore, IToolPackageStoreQuery, IToolPackageUninstaller) CreateToolPackageStoresAndUninstaller(
        DirectoryPath? nonGlobalLocation = null)
    {
        ToolPackageStoreAndQuery toolPackageStore = CreateConcreteToolPackageStore(nonGlobalLocation);
        var toolPackageUninstaller = new ToolPackageUninstaller(
            toolPackageStore);
 
        return (toolPackageStore, toolPackageStore, toolPackageUninstaller);
    }
 
    public static (IToolPackageStore,
        IToolPackageStoreQuery,
        IToolPackageDownloader,
        IToolPackageUninstaller)
        CreateToolPackageStoresAndDownloaderAndUninstaller(
            DirectoryPath? nonGlobalLocation = null, IEnumerable<string> additionalRestoreArguments = null, string currentWorkingDirectory = null)
    {
        ToolPackageStoreAndQuery toolPackageStore = CreateConcreteToolPackageStore(nonGlobalLocation);
        var toolPackageDownloader = new ToolPackageDownloader(toolPackageStore, currentWorkingDirectory: currentWorkingDirectory);
        var toolPackageUninstaller = new ToolPackageUninstaller(
            toolPackageStore);
 
        return (toolPackageStore, toolPackageStore, toolPackageDownloader, toolPackageUninstaller);
    }
 
 
    public static ToolPackageStoreAndQuery CreateToolPackageStoreQuery(
        DirectoryPath? nonGlobalLocation = null)
    {
        return CreateConcreteToolPackageStore(nonGlobalLocation);
    }
 
    private static DirectoryPath GetPackageLocation()
    {
        return new DirectoryPath(CliFolderPathCalculator.ToolsPackagePath);
    }
 
    public static ToolPackageStoreAndQuery CreateConcreteToolPackageStore(
        DirectoryPath? nonGlobalLocation = null)
    {
        var toolPackageStore =
            new ToolPackageStoreAndQuery(nonGlobalLocation.HasValue
                ? new DirectoryPath(
                    ToolPackageFolderPathCalculator.GetToolPackageFolderPath(nonGlobalLocation.Value.Value))
                : GetPackageLocation());
 
        return toolPackageStore;
    }
}