// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
// SPDX-License-Identifier: Apache-2.0
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AWS.Deploy.Common;
using AWS.Deploy.Common.IO;
namespace AWS.Deploy.CLI.Utilities
{
///
/// Sits on top of and adds UI specific logic
/// for error handling.
///
public interface IProjectParserUtility
{
Task Parse(string projectPath);
}
public class ProjectParserUtility : IProjectParserUtility
{
private readonly IProjectDefinitionParser _projectDefinitionParser;
private readonly IDirectoryManager _directoryManager;
public ProjectParserUtility(
IProjectDefinitionParser projectDefinitionParser,
IDirectoryManager directoryManager)
{
_projectDefinitionParser = projectDefinitionParser;
_directoryManager = directoryManager;
}
public async Task Parse(string projectPath)
{
try
{
return await _projectDefinitionParser.Parse(projectPath);
}
catch (ProjectFileNotFoundException ex)
{
var errorMessage = ex.Message;
if (_directoryManager.Exists(projectPath))
{
var files = _directoryManager.GetFiles(projectPath, "*.sln").ToList();
if (files.Any())
{
errorMessage = "This directory contains a solution file, but the tool requires a project file. " +
"Please run the tool from the directory that contains a .csproj/.fsproj or provide a path to the .csproj/.fsproj via --project-path flag.";
}
}
throw new FailedToFindDeployableTargetException(DeployToolErrorCode.FailedToFindDeployableTarget, errorMessage, ex);
}
}
}
}