dn not assume a particular profile

This commit is contained in:
Chris Cheetham 2020-03-26 07:15:14 -04:00
Родитель 90278e0dd6
Коммит 3607fd4a5a
1 изменённых файлов: 28 добавлений и 29 удалений

Просмотреть файл

@ -28,18 +28,12 @@ namespace Steeltoe.Tooling.Models
public class ProjectBuilder public class ProjectBuilder
{ {
private static readonly ILogger Logger = Logging.LoggerFactory.CreateLogger<ProjectBuilder>(); private static readonly ILogger Logger = Logging.LoggerFactory.CreateLogger<ProjectBuilder>();
private static readonly List<Protocol> DefaultProtocols = new List<Protocol>();
private Context _context; private Context _context;
private readonly string _projectFile; private readonly string _projectFile;
private readonly string _launchSettingsFile; private readonly string _launchSettingsFile;
private XmlDocument _projectDoc; private XmlDocument _projectDoc;
static ProjectBuilder()
{
DefaultProtocols.Add(new Protocol("http", 8080));
}
/// <summary> /// <summary>
/// Project file. /// Project file.
/// </summary> /// </summary>
@ -108,35 +102,40 @@ namespace Steeltoe.Tooling.Models
private List<Protocol> GetProtocols() private List<Protocol> GetProtocols()
{ {
if (!File.Exists(_launchSettingsFile)) var protocols = new List<Protocol>();
if (File.Exists(_launchSettingsFile))
{ {
return DefaultProtocols; Logger.LogDebug($"loading launch settings: {_launchSettingsFile}");
var yaml = new YamlStream();
using (var reader = new StreamReader(_launchSettingsFile))
{
yaml.Load(reader);
}
var root = (YamlMappingNode) yaml.Documents[0].RootNode;
var profiles = (YamlMappingNode) root.Children[new YamlScalarNode("profiles")];
foreach (var entry in profiles.Children)
{
var profile = (YamlMappingNode) entry.Value;
if (profile.Children.ContainsKey(new YamlScalarNode("applicationUrl")))
{
var urlSpec = profile.Children[new YamlScalarNode("applicationUrl")];
var urls = $"{urlSpec}".Split(';');
foreach (var url in urls)
{
var uri = new Uri(url);
protocols.Add(new Protocol(uri.Scheme, uri.Port));
}
}
}
} }
Logger.LogDebug($"loading launch settings: {_launchSettingsFile}"); // ensure a default protocol
var yaml = new YamlStream(); if (protocols.Count == 0)
using (var reader = new StreamReader(_launchSettingsFile))
{ {
yaml.Load(reader); protocols.Add(new Protocol("http", 8080));
} }
var root = (YamlMappingNode) yaml.Documents[0].RootNode;
var profiles = (YamlMappingNode) root.Children[new YamlScalarNode("profiles")];
var profile =
(YamlMappingNode) profiles.Children[new YamlScalarNode(Path.GetFileNameWithoutExtension(_projectFile))];
if (!profile.Children.ContainsKey(new YamlScalarNode("applicationUrl")))
{
return DefaultProtocols;
}
var urlSpec = profile.Children[new YamlScalarNode("applicationUrl")];
var urls = $"{urlSpec}".Split(';');
if (urls.Length == 0)
{
return DefaultProtocols;
}
var protocols = urls.Select(url => new Uri(url)).Select(uri => new Protocol(uri.Scheme, uri.Port)).ToList();
protocols.Sort(); protocols.Sort();
return protocols; return protocols;
} }