/// <summary> /// Compiles all files in the namespace *.customizations*.json into one large json file in bin\Release|Debug\customizations folder /// </summary> /// <param name="modelsPath">The path the to customization models to be compiled</param> public static void CompileServiceCustomizations(string modelsPath) { Console.WriteLine("Compiling service customizations from {0}", modelsPath); if (Directory.Exists("customizations")) { Console.WriteLine("...cleaning previous compilation output"); // Cleanup any previous run customization. foreach (var file in Directory.GetFiles("customizations")) { File.Delete(file); } } else { Directory.CreateDirectory("customizations"); } var fileServices = Directory.GetFiles(modelsPath, "*.customizations*.json"); foreach (var file in fileServices) { // The name before the .customizations extension // Used to get all files for that service var baseName = file.Substring(file.IndexOf("ServiceModels\\", StringComparison.OrdinalIgnoreCase) + "ServiceModels\\".Length, file.IndexOf(".customizations", StringComparison.OrdinalIgnoreCase) - Convert.ToInt32(file.IndexOf("ServiceModels\\", StringComparison.OrdinalIgnoreCase) + "ServiceModels\\".Length)); var filePath = Path.Combine("customizations", baseName + ".customizations.json"); var fileEntries = Directory.GetFiles(modelsPath, baseName + "*.customizations*.json"); var jsonWriter = new JsonWriter {PrettyPrint = true}; jsonWriter.WriteObjectStart(); foreach (var entry in fileEntries) { var customJson = JsonMapper.ToObject(new StreamReader(entry)); foreach (var property in customJson.PropertyNames) { jsonWriter.WritePropertyName(property); jsonWriter.Write(customJson[property].ToJson()); } } jsonWriter.WriteObjectEnd(); // Fixes json being placed into the json mapper var output = jsonWriter.ToString().Replace("\\\"", "\"").Replace("\"{", "{").Replace("}\"", "}").Replace("\"[", "[").Replace("]\"", "]"); // Empty json file if (jsonWriter.ToString().Length < 10) continue; File.WriteAllText(filePath, output); Console.WriteLine("...updated {0}", Path.GetFullPath(filePath)); } }
/// <summary> /// Compiles all files in the namespace *.customizations*.json into one large json file in bin\Release|Debug\customizations folder /// </summary> /// <param name="modelsPath">The path the to customization models to be compiled</param> public static void CompileServiceCustomizations(string modelsPath) { string[] fileServices = Directory.GetFiles(modelsPath, "*.customizations*.json"); foreach (var file in fileServices) { // The name before the .customizations extension // Used to get all files for that service var baseName = file.Substring(file.IndexOf("ServiceModels\\") + "ServiceModels\\".Length, file.IndexOf(".customizations") - Convert.ToInt32(file.IndexOf("ServiceModels\\") + "ServiceModels\\".Length)); string[] fileEntries = Directory.GetFiles(modelsPath, baseName + "*.customizations*.json"); var jsonWriter = new JsonWriter(); jsonWriter.PrettyPrint = true; jsonWriter.WriteObjectStart(); foreach (var entry in fileEntries) { var customJson = JsonMapper.ToObject(new StreamReader(entry)); foreach (var property in customJson.PropertyNames) { jsonWriter.WritePropertyName(property); jsonWriter.Write(customJson[property].ToJson()); } } jsonWriter.WriteObjectEnd(); // Fixes json being placed into the json mapper var output = jsonWriter.ToString().Replace("\\\"", "\"").Replace("\"{", "{").Replace("}\"", "}").Replace("\"[", "[").Replace("]\"", "]"); // Empty json file if (jsonWriter.ToString().Length < 10) continue; Directory.CreateDirectory("customizations"); var filePath = "customizations\\" + baseName + ".customizations.json"; if (File.Exists(filePath)) { var existingContent = File.ReadAllText(filePath); if (string.Equals(existingContent, output)) continue; } File.WriteAllText(filePath, output); Console.WriteLine("\tUpdated {0}", baseName + ".customizations.json"); } }
public static void UpdateCoreCLRTestDependencies(GenerationManifest manifest, GeneratorOptions options) { var projectJsonPath = Path.Combine(options.SdkRootFolder, "test/CoreCLR/IntegrationTests/project.json"); var originalProjectJson = File.ReadAllText(projectJsonPath); var rootData = JsonMapper.ToObject(originalProjectJson); var dependency = rootData["dependencies"] as JsonData; bool hasChanged = false; foreach (var service in manifest.ServiceConfigurations.OrderBy(x => x.ServiceFolderName)) { if (service.ParentConfig != null) continue; if(service.CoreCLRSupport && dependency[service.ServiceFolderName] == null) { hasChanged = true; dependency[service.ServiceFolderName] = "1.0.0-*"; } } if(hasChanged) { var newContent = new System.Text.StringBuilder(); JsonWriter writer = new JsonWriter(newContent) { PrettyPrint = true }; rootData.ToJson(writer); File.WriteAllText(projectJsonPath, newContent.ToString().Trim()); } }
void WriteNamespaceToc(JsonWriter writer, string ns) { var assemblyWrapper = _generatedNamespaces[ns]; var tocId = ns.Replace(".", "_"); var nsFilePath = Path.Combine("./" + Options.ContentSubFolderName, GenerationManifest.OutputSubFolderFromNamespace(ns), FilenameGenerator.GenerateNamespaceFilename(ns)).Replace('\\', '/'); writer.WritePropertyName(ns); writer.WriteObjectStart(); writer.WritePropertyName("id"); writer.Write(tocId); writer.WritePropertyName("href"); writer.Write(nsFilePath); writer.WritePropertyName("nodes"); writer.WriteObjectStart(); foreach (var type in assemblyWrapper.GetTypesForNamespace(ns).OrderBy(x => x.Name)) { var filePath = Path.Combine("./" + Options.ContentSubFolderName, GenerationManifest.OutputSubFolderFromNamespace(type.Namespace), FilenameGenerator.GenerateFilename(type)).Replace('\\', '/'); writer.WritePropertyName(type.GetDisplayName(false)); writer.WriteObjectStart(); writer.WritePropertyName("id"); writer.Write(type.GetDisplayName(true).Replace(".", "_")); writer.WritePropertyName("href"); writer.Write(filePath); writer.WriteObjectEnd(); } writer.WriteObjectEnd(); writer.WriteObjectEnd(); }
/// <summary> /// Constructs the per-root-namespace json files for the services that were generated. /// These will be added to the _namespaceTocs collection, either extending it or /// overwriting an existing entry if we're updating a service. /// </summary> /// <example> /// An partial and annotated example of what one data file looks like for the /// 'Amazon' namespace: /// { /// "Amazon" : // this is used as the display name of the root for the entries /// { /// "id" : "Amazon", // the unique id assigned to the li element /// "href" : "./items/Amazon/N_.html", // the target of the link /// "nodes": { // collection of child nodes for the namespace /// "AWSConfigs" : { // display name for child node /// "id" : "Amazon_AWSConfigs", // the unique li id /// "href" : "./items/Amazon/TAWSConfigs.html" // the target of the link /// }, /// "LoggingOptions" : { /// "id" : "Amazon_LoggingOptions", /// "href" : "./items/Amazon\TLoggingOptions.html" /// }, /// ... /// } /// } /// } /// </example> void UpdateNamespaceTocs() { foreach (var ns in _generatedNamespaces.Keys) { var sb = new StringBuilder(); var jsonWriter = new JsonWriter(sb); jsonWriter.WriteObjectStart(); WriteNamespaceToc(jsonWriter, ns); jsonWriter.WriteObjectEnd(); var nsTocContents = sb.ToString(); if (_namespaceTocs.ContainsKey(ns)) _namespaceTocs[ns] = nsTocContents; else _namespaceTocs.Add(ns, nsTocContents); } }
/// <summary> /// Compiles all files in the namespace *.customizations*.json into one large json file in bin\Release|Debug\customizations folder /// </summary> /// <param name="modelsPath">The path the to customization models to be compiled</param> public static void CompileServiceCustomizations(string modelsPath) { Console.WriteLine("Compiling service customizations from {0}", modelsPath); if (Directory.Exists("customizations")) { Console.WriteLine("...cleaning previous compilation output"); // Cleanup any previous run customization. foreach (var file in Directory.GetFiles("customizations")) { File.Delete(file); } } else { Directory.CreateDirectory("customizations"); } var fileServices = Directory.GetFiles(modelsPath, "*.customizations*.json"); foreach (var file in fileServices) { // The name before the .customizations extension // Used to get all files for that service var baseName = file.Substring(file.IndexOf("ServiceModels"+Path.DirectorySeparatorChar , StringComparison.OrdinalIgnoreCase) + ("ServiceModels"+Path.DirectorySeparatorChar).Length, file.IndexOf(".customizations", StringComparison.OrdinalIgnoreCase) - Convert.ToInt32(file.IndexOf("ServiceModels"+Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase) + ("ServiceModels"+Path.DirectorySeparatorChar).Length)); var filePath = Path.Combine("customizations", baseName + ".customizations.json"); var fileEntries = Directory.GetFiles(modelsPath, baseName + "*.customizations*.json"); var jsonWriter = new JsonWriter {PrettyPrint = true}; JsonData outputJson = new JsonData(); outputJson.SetJsonType(JsonType.Object); foreach (var entry in fileEntries) { var customJson = JsonMapper.ToObject(new StreamReader(entry)); foreach (var property in customJson.PropertyNames) { outputJson[property] = customJson[property]; } } // Load examples into the customizations as well var examples = Directory.GetFiles(modelsPath, baseName + ".examples.json").FirstOrDefault(); if (null != examples) { var exampleData = JsonMapper.ToObject(new StreamReader(examples)); if (exampleData.IsObject && exampleData.PropertyNames.Contains("examples")) { outputJson["examples"] = exampleData["examples"]; } } outputJson.ToJson(jsonWriter); // Fixes json being placed into the json mapper var output = jsonWriter.ToString(); // Empty json file if (output.Length < 10) continue; File.WriteAllText(filePath, output); Console.WriteLine("...updated {0}", Path.GetFullPath(filePath)); } }