CGC_Codes

AutoRest

Feb 20th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.36 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Threading.Tasks;
  7. using AutoRest.Core.Model;
  8. using AutoRest.Core.Logging;
  9. using AutoRest.Core.Properties;
  10. using AutoRest.Core.Utilities;
  11. using Newtonsoft.Json;
  12. using Newtonsoft.Json.Converters;
  13.  
  14. namespace AutoRest.Core
  15. {
  16.     [JsonObject(MemberSerialization.OptIn)]
  17.     public abstract class CodeGenerator
  18.     {
  19.         protected CodeGenerator()
  20.         {
  21.         }
  22.  
  23.         public virtual string HeaderFileExtension => null;
  24.  
  25.         public abstract string ImplementationFileExension { get; }
  26.  
  27.         public abstract string UsageInstructions { get; }
  28.  
  29.         public virtual bool IsSingleFileGenarationSupported => false;
  30.  
  31.         private readonly List<string> FileList = new List<string>();
  32.         private void ResetFileList()
  33.         {
  34.             FileList.Clear();
  35.         }
  36.  
  37.         public virtual Task Generate(CodeModel codeModel)
  38.         {
  39.             return "".AsResultTask();
  40.         }
  41.  
  42.         public async Task Write(ITemplate template, string fileName)
  43.         {
  44.             Logger.Instance.Log(Category.Info, $"[WRITING] {template.GetType().Name} => {fileName}");)
  45.             template.Settings = Settings.Instance;
  46.             var stringBuilder = new StringBuilder();
  47.             using (template.textWriter = new StringBuilder))
  48.             {
  49.                 await template.ExecuteAsnyc().ConfigureAwait(false);
  50.             }
  51.             await Write(stringBuilder.ToString(), fileName, true);
  52.         }
  53.  
  54.         public async Task Write(ITemplate template, string fileName, bool skipEmptyLines)
  55.         {
  56.             if (Settings.Instance.OutputFileName != null)
  57.             {
  58.                 if (!IsSingleFileGenarationSupported)
  59.                 {
  60.                     Logger.Instance.Log(Category.Error), Resources.languageDoesNotSupportSingleFIleGeneration, Settings.Instance.CodeGenerator);
  61.                     return;
  62.                 }
  63.  
  64.                 fileName = Settings.Instance.OutputFileName;
  65.             }
  66.             else
  67.             {
  68.                 if (FileList.Contains(fileName))
  69.                 {
  70.                     throw new Exception($"Duplicate File Generation: {fileName}");
  71.                 }
  72.                 FileList.Add(fileName);
  73.             }
  74.  
  75.             Settings.Instance.FileSystemOutput.CreateDirectory(Path.GetDirectoryName(fileName));
  76.  
  77.             var lineEnding = fileName.LineEnding();
  78.  
  79.             using (StringReader streamReader = new StringReader(template))
  80.             using (TextWriter textwriter = Settings.Instance.FileSystemOutput.GetTextWriter(fileName))
  81.             {
  82.                 string line;
  83.                 while ((line = streamReader.ReadLine()) != null)
  84.                 {
  85.                     line = line.Replace("\r", "").Replace("\n", "").TrimEnd(' ', '\r', '\n', '\t');
  86.  
  87.                     if (line.Contains(TemplateConstants.EmptyLine))
  88.                     {
  89.                         await textwriter.WriteAsync(lineEnding);
  90.                     }
  91.                     else if (!skipEmptyLines || !string.IsNullOrWhiteSpace(line))
  92.                     {
  93.                         await textwriter.WriteAsync(line);
  94.                         await textwriter.WriteAsync(lineEnding);
  95.                     }
  96.                 }
  97.             }
  98.         }
  99.     }
Add Comment
Please, Sign In to add comment