Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit 3bd7556

Browse files
committed
add comments, refactor
1 parent 545ff24 commit 3bd7556

File tree

13 files changed

+56
-52
lines changed

13 files changed

+56
-52
lines changed

src/APIM_ARMTemplate/apimtemplate.test/Creator/FileHandlerTests/ARMTemplateWriterTests.cs renamed to src/APIM_ARMTemplate/apimtemplate.test/Creator/FileHandlerTests/FileWriterTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55

66
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates
77
{
8-
public class ARMTemplateWriterTests
8+
public class FileWriterTests
99
{
1010
[Fact]
1111
public void ShouldWriteJSONToFile()
1212
{
1313
// arrange
14-
ARMTemplateWriter armTemplateWriter = new ARMTemplateWriter();
14+
FileWriter fileWriter = new FileWriter();
1515
string location = String.Concat("..", Path.DirectorySeparatorChar,
1616
"..", Path.DirectorySeparatorChar,
1717
"..", Path.DirectorySeparatorChar,
@@ -26,7 +26,7 @@ public void ShouldWriteJSONToFile()
2626
File.Delete(location);
2727
}
2828
// write new
29-
armTemplateWriter.WriteJSONToFile(testJSON, location);
29+
fileWriter.WriteJSONToFile(testJSON, location);
3030

3131
// assert
3232
Assert.True(File.Exists(location));

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,16 @@ public CreateCommand()
5353
// required parameters have been supplied
5454

5555
// initialize helper classes
56-
FileNameGenerator fileNameGenerator = new FileNameGenerator();
56+
FileWriter fileWriter = new FileWriter();
5757
TemplateCreator templateCreator = new TemplateCreator();
5858
APIVersionSetTemplateCreator apiVersionSetTemplateCreator = new APIVersionSetTemplateCreator(templateCreator);
5959
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
6060
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(fileReader);
6161
APITemplateCreator apiTemplateCreator = new APITemplateCreator(fileReader, templateCreator, policyTemplateCreator, productAPITemplateCreator);
62-
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator(templateCreator, fileNameGenerator);
63-
ARMTemplateWriter armTemplateWriter = new ARMTemplateWriter();
62+
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator(templateCreator);
6463

6564
// create templates from provided configuration
66-
CreatorFileNames creatorFileNames = fileNameGenerator.GenerateCreatorFileNames();
65+
CreatorFileNames creatorFileNames = fileWriter.GenerateCreatorFileNames();
6766
Template apiVersionSetTemplate = creatorConfig.apiVersionSet != null ? apiVersionSetTemplateCreator.CreateAPIVersionSetTemplate(creatorConfig) : null;
6867
Template apiTemplate = await apiTemplateCreator.CreateAPITemplateAsync(creatorConfig);
6968
if(creatorConfig.linked == true)
@@ -74,17 +73,17 @@ public CreateCommand()
7473
// write templates to outputLocation
7574
if (apiVersionSetTemplate != null)
7675
{
77-
armTemplateWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.apiVersionSet));
76+
fileWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.apiVersionSet));
7877
}
79-
armTemplateWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.api));
80-
armTemplateWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.template.json"));
81-
armTemplateWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.parameters.json"));
78+
fileWriter.WriteJSONToFile(apiTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", creatorFileNames.api));
79+
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.template.json"));
80+
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/linked/", "master.parameters.json"));
8281
} else
8382
{
8483
Template masterTemplate = masterTemplateCreator.CreateUnlinkedMasterTemplate(apiVersionSetTemplate, apiTemplate, creatorFileNames);
8584
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
86-
armTemplateWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.template.json"));
87-
armTemplateWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.parameters.json"));
85+
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.template.json"));
86+
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, @"/unlinked/", "master.parameters.json"));
8887
}
8988

9089
ColoredConsole.WriteLine("Templates written to output location");

src/APIM_ARMTemplate/apimtemplate/Creator/ExampleFiles/YAMLConfigs/valid.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ api:
2222
policy: C:\Users\lucashh\Desktop\Projects\APIM-ARM\azure-api-management-devops-example\src\APIM_ARMTemplate\apimtemplate\Creator\ExampleFiles\XMLPolicies\operationRateLimit.xml
2323
products: starter, platinum
2424
outputLocation: C:\Users\lucashh\Desktop\Projects\APIM-ARM\GeneratedTemplates
25-
linked: false
25+
linked: true

src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/FileNameGenerator.cs

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/FileReader.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ public class FileReader
1515
{
1616
public async Task<CreatorConfig> ConvertConfigYAMLToCreatorConfigAsync(string configFileLocation)
1717
{
18+
// determine whether file location is local file path or remote url and convert appropriately
1819
Uri uriResult;
1920
bool isUrl = Uri.TryCreate(configFileLocation, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
2021
if (isUrl)
2122
{
23+
// make a request to the provided url and convert the response's content
2224
HttpClient client = new HttpClient();
2325
HttpResponseMessage response = await client.GetAsync(uriResult);
2426
if (response.IsSuccessStatusCode)
@@ -43,19 +45,22 @@ public async Task<CreatorConfig> ConvertConfigYAMLToCreatorConfigAsync(string co
4345
{
4446
using (StreamReader reader = new StreamReader(configFileLocation))
4547
{
48+
// deserialize provided file contents into yaml
4649
Deserializer deserializer = new Deserializer();
4750
object deserializedYaml = deserializer.Deserialize(reader);
4851
JsonSerializer jsonSerializer = new JsonSerializer();
4952
StringWriter writer = new StringWriter();
53+
// serialize json from yaml object
5054
jsonSerializer.Serialize(writer, deserializedYaml);
5155
string jsonText = writer.ToString();
56+
// deserialize CreatorConfig from json string
5257
CreatorConfig yamlObject = JsonConvert.DeserializeObject<CreatorConfig>(jsonText);
5358
return yamlObject;
5459
}
5560
}
5661
}
5762

58-
public async Task<string> RetrieveLocationContentsAsync(string fileLocation)
63+
public async Task<string> RetrieveJSONContentsAsync(string fileLocation)
5964
{
6065
Uri uriResult;
6166
bool isUrl = Uri.TryCreate(fileLocation, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/ARMTemplateWriter.cs renamed to src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/FileWriter.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates
88
{
9-
public class ARMTemplateWriter
9+
public class FileWriter
1010
{
1111
public void WriteJSONToFile(object template, string location)
1212
{
13+
// writes json object to provided location
1314
string jsonString = JsonConvert.SerializeObject(template,
1415
Formatting.None,
1516
new JsonSerializerSettings
@@ -18,5 +19,16 @@ public void WriteJSONToFile(object template, string location)
1819
});
1920
File.WriteAllText(location, jsonString);
2021
}
22+
23+
public CreatorFileNames GenerateCreatorFileNames()
24+
{
25+
// generate useable object with file names for consistency throughout project
26+
return new CreatorFileNames()
27+
{
28+
apiVersionSet = $@"/versionset.template.json",
29+
api = $@"/api.template.json",
30+
master = @"/master.template.json"
31+
};
32+
}
2133
}
2234
}

src/APIM_ARMTemplate/apimtemplate/Creator/FileHandlers/OpenAPISpecReader.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class OpenAPISpecReader
1515
{
1616
public OpenApiDocument ConvertToOpenAPISpec(string json)
1717
{
18+
// converts json string into OpenApiDocument class
1819
OpenApiStringReader reader = new OpenApiStringReader();
1920
OpenApiDocument doc = reader.Read(json, out var diagnostic);
2021
return doc;
@@ -46,6 +47,7 @@ public async Task<OpenApiDocument> ConvertRemoteURLToOpenAPISpecAsync(Uri uriRes
4647

4748
public async Task<OpenApiDocument> ConvertOpenAPISpecToDoc(string openApiSpecFileLocation)
4849
{
50+
// determine whether file location is local file path or remote url and convert appropriately
4951
Uri uriResult;
5052
bool isUrl = Uri.TryCreate(openApiSpecFileLocation, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
5153
if (isUrl)

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/APITemplateCreator.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ public APITemplateCreator(FileReader fileReader, TemplateCreator templateCreator
2525

2626
public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
2727
{
28+
// create empty template
2829
Template apiTemplate = this.templateCreator.CreateEmptyTemplate();
29-
OpenAPISpecReader openAPISpecReader = new OpenAPISpecReader();
30-
OpenApiDocument doc = await openAPISpecReader.ConvertOpenAPISpecToDoc(creatorConfig.api.openApiSpec);
3130

3231
// add parameters
3332
apiTemplate.parameters = new Dictionary<string, TemplateParameterProperties>
@@ -40,7 +39,7 @@ public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
4039

4140
List<TemplateResource> resources = new List<TemplateResource>();
4241
// create api resource with properties
43-
APITemplateResource initialAPITemplateResource = this.CreateInitialAPITemplateResource(creatorConfig, doc);
42+
APITemplateResource initialAPITemplateResource = await this.CreateInitialAPITemplateResource(creatorConfig);
4443
APITemplateResource subsequentAPITemplateResource = await this.CreateSubsequentAPITemplateResourceAsync(creatorConfig);
4544
PolicyTemplateResource apiPolicyResource = await this.policyTemplateCreator.CreateAPIPolicyTemplateResourceAsync(creatorConfig, dependsOnSubsequentAPI);
4645
List<PolicyTemplateResource> operationPolicyResources = await this.policyTemplateCreator.CreateOperationPolicyTemplateResourcesAsync(creatorConfig, dependsOnSubsequentAPI);
@@ -55,8 +54,12 @@ public async Task<Template> CreateAPITemplateAsync(CreatorConfig creatorConfig)
5554
return apiTemplate;
5655
}
5756

58-
public APITemplateResource CreateInitialAPITemplateResource(CreatorConfig creatorConfig, OpenApiDocument doc)
57+
public async Task<APITemplateResource> CreateInitialAPITemplateResource(CreatorConfig creatorConfig)
5958
{
59+
// protocols can be pulled by converting the OpenApiSpec into the OpenApiDocument class
60+
OpenAPISpecReader openAPISpecReader = new OpenAPISpecReader();
61+
OpenApiDocument doc = await openAPISpecReader.ConvertOpenAPISpecToDoc(creatorConfig.api.openApiSpec);
62+
6063
// create api resource with properties
6164
APITemplateResource apiTemplateResource = new APITemplateResource()
6265
{
@@ -88,10 +91,9 @@ public APITemplateResource CreateInitialAPITemplateResource(CreatorConfig creato
8891
public async Task<APITemplateResource> CreateSubsequentAPITemplateResourceAsync(CreatorConfig creatorConfig)
8992
{
9093
// create api resource with properties
91-
// used to escape characters in json file
92-
object deserializedFileContents = JsonConvert.DeserializeObject<object>(await this.fileReader.RetrieveLocationContentsAsync(creatorConfig.api.openApiSpec));
9394
string subsequentAPIName = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}')]";
9495
string subsequentAPIType = "Microsoft.ApiManagement/service/apis";
96+
object deserializedFileContents = JsonConvert.DeserializeObject<object>(await this.fileReader.RetrieveJSONContentsAsync(creatorConfig.api.openApiSpec));
9597
APITemplateResource apiTemplateResource = new APITemplateResource()
9698
{
9799
name = subsequentAPIName,

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/APIVersionSetTemplateCreator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public APIVersionSetTemplateCreator(TemplateCreator templateCreator)
1818

1919
public Template CreateAPIVersionSetTemplate(CreatorConfig creatorConfig)
2020
{
21+
// create empty template
2122
Template apiVersionSetTemplate = this.templateCreator.CreateEmptyTemplate();
2223

2324
// add parameters

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/MasterTemplateCreator.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,17 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates
1010
public class MasterTemplateCreator
1111
{
1212
private TemplateCreator templateCreator;
13-
private FileNameGenerator fileNameGenerator;
1413

15-
public MasterTemplateCreator(TemplateCreator templateCreator, FileNameGenerator fileNameGenerator)
14+
public MasterTemplateCreator(TemplateCreator templateCreator)
1615
{
1716
this.templateCreator = templateCreator;
18-
this.fileNameGenerator = fileNameGenerator;
1917
}
2018

2119
public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
2220
Template apiTemplate,
2321
CreatorFileNames creatorFileNames)
2422
{
23+
// create empty template
2524
Template masterTemplate = this.templateCreator.CreateEmptyTemplate();
2625

2726
// add parameters
@@ -50,12 +49,13 @@ public Template CreateUnlinkedMasterTemplate(Template apiVersionSetTemplate,
5049
Template apiTemplate,
5150
CreatorFileNames creatorFileNames)
5251
{
52+
// create empty template
5353
Template masterTemplate = this.templateCreator.CreateEmptyTemplate();
5454

5555
// add parameters
5656
masterTemplate.parameters = this.CreateMasterTemplateParameters(false);
5757

58-
// add links to all resources
58+
// add all resources directly
5959
List<TemplateResource> resources = new List<TemplateResource>();
6060

6161
// apiVersionSet
@@ -98,6 +98,7 @@ public MasterTemplateResource CreateMasterTemplateResource(string name, string u
9898

9999
public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(bool linked)
100100
{
101+
// used to create the parameter metatadata, etc (not value) for use in file with resources
101102
Dictionary<string, TemplateParameterProperties> parameters = new Dictionary<string, TemplateParameterProperties>();
102103
TemplateParameterProperties apimServiceNameProperties = new TemplateParameterProperties()
103104
{
@@ -125,6 +126,8 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
125126

126127
public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
127128
{
129+
// used to create the parameter values for use in parameters file
130+
// create empty template
128131
Template masterTemplate = this.templateCreator.CreateEmptyTemplate();
129132

130133
// add parameters
@@ -138,11 +141,7 @@ public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
138141
{
139142
TemplateParameterProperties repoBaseUrlProperties = new TemplateParameterProperties()
140143
{
141-
metadata = new TemplateParameterMetadata()
142-
{
143-
description = "Base URL of the repository"
144-
},
145-
type = "string"
144+
value = ""
146145
};
147146
parameters.Add("repoBaseUrl", repoBaseUrlProperties);
148147
}

0 commit comments

Comments
 (0)