forked from microsoft/TemplateStudio
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCodeGen.cs
More file actions
98 lines (81 loc) · 3.16 KB
/
CodeGen.cs
File metadata and controls
98 lines (81 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using Microsoft.TemplateEngine.Abstractions;
using Microsoft.TemplateEngine.Edge.Settings;
using Microsoft.TemplateEngine.Edge.Template;
using Microsoft.TemplateEngine.Orchestrator.RunnableProjects;
using Microsoft.TemplateEngine.Utils;
using Microsoft.Templates.Core.Resources;
namespace Microsoft.Templates.Core
{
public class CodeGen
{
public static CodeGen Instance { get; private set; }
public TemplateCreator Creator { get; }
public EngineEnvironmentSettings Settings { get; }
public TemplateCache Cache
{
get
{
return ((SettingsLoader)Settings.SettingsLoader).UserTemplateCache;
}
}
private CodeGen(string locationId, string hostVersion)
{
var host = CreateHost(locationId, hostVersion);
Settings = new EngineEnvironmentSettings(host, x => new SettingsLoader(x));
Creator = new TemplateCreator(Settings);
}
public static void Initialize(string locationId, string hostVersion)
{
Instance = new CodeGen(locationId, hostVersion);
Instance.Init();
}
public string GetCurrentContentSource(string workingFolder, string sourceId)
{
var result = string.Empty;
foreach (var mp in Instance?.Settings.SettingsLoader.MountPoints)
{
if (mp != null && Directory.Exists(mp.Place) && IsHigherVersion(result, mp.Place) && (mp.Place.IndexOf(sourceId, StringComparison.OrdinalIgnoreCase) != -1))
{
result = mp.Place;
}
}
return result;
}
private bool IsHigherVersion(string currentPlace, string newPlace)
{
Version.TryParse(Path.GetFileName(currentPlace), out Version current);
Version.TryParse(Path.GetFileName(newPlace), out Version newp);
if (newp == null)
{
return false;
}
if (newp != null && current == null)
{
return true;
}
return newp > current;
}
private void Init()
{
if (!Settings.SettingsLoader.Components.OfType<IGenerator>().Any())
{
typeof(RunnableProjectGenerator).Assembly
.GetTypes()
.ToList()
.ForEach(t => Settings.SettingsLoader.Components.Register(t));
}
}
private static ITemplateEngineHost CreateHost(string locationId, string hostVersion)
{
return new DefaultTemplateEngineHost($"{locationId}", hostVersion, CultureInfo.CurrentUICulture.Name, new Dictionary<string, string>());
}
}
}