Esempio n. 1
0
        /// <summary>Generates the file.</summary>
        /// <param name="document">The document.</param>
        /// <param name="type">The type.</param>
        /// <returns>The code.</returns>
        protected string GenerateFile(SwaggerDocument document, ClientGeneratorOutputType type)
        {
            var clientCode    = string.Empty;
            var operations    = GetOperations(document);
            var clientClasses = new List <string>();

            if (BaseSettings.OperationNameGenerator.SupportsMultipleClients)
            {
                foreach (var controllerOperations in operations.GroupBy(o => o.ControllerName))
                {
                    var controllerName      = controllerOperations.Key;
                    var controllerClassName = BaseSettings.GenerateControllerName(controllerOperations.Key);
                    clientCode += GenerateClientClass(controllerName, controllerClassName, controllerOperations.ToList(), type) + "\n\n";
                    clientClasses.Add(controllerClassName);
                }
            }
            else
            {
                var controllerName      = string.Empty;
                var controllerClassName = BaseSettings.GenerateControllerName(controllerName);
                clientCode = GenerateClientClass(controllerName, controllerClassName, operations, type);
                clientClasses.Add(controllerClassName);
            }

            return(GenerateFile(clientCode, clientClasses, type)
                   .Replace("\r", string.Empty)
                   .Replace("\n\n\n\n", "\n\n")
                   .Replace("\n\n\n", "\n\n"));
        }
Esempio n. 2
0
        internal string GenerateFile(SwaggerDocument document, ClientGeneratorOutputType type)
        {
            var clientCode = string.Empty;
            var operations = GetOperations(document);
            var clientClasses = new List<string>();

            if (BaseSettings.OperationNameGenerator.SupportsMultipleClients)
            {
                foreach (var controllerOperations in operations.GroupBy(o => BaseSettings.OperationNameGenerator.GetClientName(document, o.Path, o.HttpMethod, o.Operation)))
                {
                    var controllerName = controllerOperations.Key;
                    var controllerClassName = GetClassName(controllerOperations.Key);
                    clientCode += GenerateClientClass(controllerName, controllerClassName, controllerOperations.ToList(), type) + "\n\n";
                    clientClasses.Add(controllerClassName);
                }
            }
            else
            {
                var controllerName = string.Empty;
                var controllerClassName = GetClassName(controllerName);
                clientCode = GenerateClientClass(controllerName, controllerClassName, operations, type);
                clientClasses.Add(controllerClassName);
            }

            return GenerateFile(clientCode, clientClasses, type)
                .Replace("\r", string.Empty)
                .Replace("\n\n\n\n", "\n\n")
                .Replace("\n\n\n", "\n\n");
        }
Esempio n. 3
0
        internal string GenerateFile(SwaggerService service, ClientGeneratorOutputType type)
        {
            var clientCode    = string.Empty;
            var operations    = GetOperations(service);
            var clientClasses = new List <string>();

            if (BaseSettings.OperationNameGenerator.SupportsMultipleClients)
            {
                foreach (var controllerOperations in operations.GroupBy(o => BaseSettings.OperationNameGenerator.GetClientName(service, o.Path, o.HttpMethod, o.Operation)))
                {
                    var controllerName      = controllerOperations.Key;
                    var controllerClassName = GetClassName(controllerOperations.Key);
                    clientCode += GenerateClientClass(controllerName, controllerClassName, controllerOperations.ToList(), type) + "\n\n";
                    clientClasses.Add(controllerClassName);
                }
            }
            else
            {
                var controllerName      = string.Empty;
                var controllerClassName = GetClassName(controllerName);
                clientCode = GenerateClientClass(controllerName, controllerClassName, operations, type);
                clientClasses.Add(controllerClassName);
            }

            return(GenerateFile(clientCode, clientClasses, type)
                   .Replace("\r", string.Empty)
                   .Replace("\n\n\n\n", "\n\n")
                   .Replace("\n\n\n", "\n\n"));
        }
Esempio n. 4
0
        /// <summary>Generates the the whole file containing all needed types.</summary>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code</returns>
        public string GenerateFile(ClientGeneratorOutputType outputType)
        {
            if (!OutputRequiresRefresh(BaseSettings.OutputFilePath))
            {
                // just give back the original file as it hasn't changed
                return(File.ReadAllText(BaseSettings.OutputFilePath));
            }

            var clientTypes = GenerateAllClientTypes();

            var dtoTypes = BaseSettings.GenerateDtoTypes ?
                           GenerateDtoTypes() :
                           Enumerable.Empty <CodeArtifact>();

            clientTypes =
                outputType == ClientGeneratorOutputType.Full ? clientTypes :
                outputType == ClientGeneratorOutputType.Implementation ? clientTypes.Where(t => t.Category != CodeArtifactCategory.Contract) :
                outputType == ClientGeneratorOutputType.Contracts ? clientTypes.Where(t => t.Category == CodeArtifactCategory.Contract) :
                Enumerable.Empty <CodeArtifact>();

            dtoTypes =
                outputType == ClientGeneratorOutputType.Full ||
                outputType == ClientGeneratorOutputType.Contracts ? dtoTypes : Enumerable.Empty <CodeArtifact>();

            return(GenerateFile(clientTypes, dtoTypes, outputType)
                   .Replace("\r", string.Empty)
                   .Replace("\n\n\n\n", "\n\n")
                   .Replace("\n\n\n", "\n\n"));
        }
Esempio n. 5
0
 /// <summary>Initializes a new instance of the <see cref="FileTemplateModel" /> class.</summary>
 /// <param name="clientCode"></param>
 /// <param name="outputType"></param>
 /// <param name="service">The service.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 public FileTemplateModel(string clientCode, ClientGeneratorOutputType outputType, SwaggerService service,
                          SwaggerToCSharpGeneratorSettings settings, SwaggerToCSharpTypeResolver resolver)
 {
     _clientCode = clientCode;
     _outputType = outputType;
     _service    = service;
     _settings   = settings;
     _resolver   = resolver;
 }
Esempio n. 6
0
 /// <summary>Initializes a new instance of the <see cref="FileTemplateModel" /> class.</summary>
 /// <param name="clientCode">The client code.</param>
 /// <param name="outputType">Type of the output.</param>
 /// <param name="document">The Swagger document.</param>
 /// <param name="clientGeneratorBase">The client generator base.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 public FileTemplateModel(string clientCode, ClientGeneratorOutputType outputType, SwaggerDocument document,
                          ClientGeneratorBase clientGeneratorBase, SwaggerToCSharpGeneratorSettings settings, SwaggerToCSharpTypeResolver resolver)
 {
     _clientCode          = clientCode;
     _outputType          = outputType;
     _document            = document;
     _clientGeneratorBase = clientGeneratorBase;
     _settings            = settings;
     _resolver            = resolver;
 }
Esempio n. 7
0
 /// <summary>Initializes a new instance of the <see cref="FileTemplateModel" /> class.</summary>
 /// <param name="clientCode">The client code.</param>
 /// <param name="outputType">Type of the output.</param>
 /// <param name="document">The Swagger document.</param>
 /// <param name="clientGeneratorBase">The client generator base.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 public FileTemplateModel(string clientCode, ClientGeneratorOutputType outputType, SwaggerDocument document,
     ClientGeneratorBase clientGeneratorBase, SwaggerToCSharpGeneratorSettings settings, SwaggerToCSharpTypeResolver resolver)
 {
     _clientCode = clientCode;
     _outputType = outputType;
     _document = document;
     _clientGeneratorBase = clientGeneratorBase;
     _settings = settings;
     _resolver = resolver;
 }
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList<OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var model = new ControllerTemplateModel(Settings)
            {
                Class = controllerClassName,
                BaseUrl = _document.BaseUrl,
                Operations = operations
            };

            var template = Settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", model);
            return template.Render();
        }
Esempio n. 9
0
        /// <summary>
        /// Gets the client code.
        /// </summary>
        /// <param name="outputType">Type of the output.</param>
        /// <returns></returns>
        public List <(string ClientName, string Code)> GetClientCode(ClientGeneratorOutputType outputType)
        {
            if (Clients == default)
            {
                IdentifyClients();
            }

            Console.WriteLine("Creating response object from the generated code.");
            Clients?.ForEach(c => { c.Code = GenerateClientClass(c, outputType); });

            return(Clients?.Select(k => (k.ClientClassName, k.Code)).ToList());
            //  return (Clients?.Select(c=>c.Code).Aggregate((c, n) => $"{c}\n\n\n{n}"))??string.Empty;
        }
        /// <summary>Initializes a new instance of the <see cref="CSharpFileTemplateModel" /> class.</summary>
        /// <param name="clientCode">The client code.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The client generator base.</param>
        /// <param name="resolver">The resolver.</param>
        public CSharpFileTemplateModel(
            string clientCode,
            ClientGeneratorOutputType outputType,
            SwaggerDocument document,
            SwaggerToCSharpGeneratorSettings settings,
            SwaggerToCSharpGeneratorBase generator,
            CSharpTypeResolver resolver)
        {
            _clientCode = clientCode;
            _outputType = outputType;
            _document   = document;
            _generator  = generator;
            _settings   = settings;
            _resolver   = resolver;

            Classes = GenerateDtoTypes();
        }
Esempio n. 11
0
        /// <summary>Initializes a new instance of the <see cref="CSharpFileTemplateModel" /> class.</summary>
        /// <param name="clientTypes">The client types.</param>
        /// <param name="dtoTypes">The DTO types.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The client generator base.</param>
        /// <param name="resolver">The resolver.</param>
        public CSharpFileTemplateModel(
            IEnumerable <CodeArtifact> clientTypes,
            IEnumerable <CodeArtifact> dtoTypes,
            ClientGeneratorOutputType outputType,
            OpenApiDocument document,
            CSharpGeneratorBaseSettings settings,
            CSharpGeneratorBase generator,
            CSharpTypeResolver resolver)
        {
            _outputType = outputType;
            _document   = document;
            _generator  = generator;
            _settings   = settings;
            _resolver   = resolver;
            _clientCode = clientTypes.Concatenate();

            Classes = dtoTypes.Concatenate();
        }
Esempio n. 12
0
        /// <summary>Generates the the whole file containing all needed types.</summary>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code</returns>
        public string GenerateFile(ClientGeneratorOutputType outputType)
        {
            var clientTypes = GenerateAllClientTypes();

            var dtoTypes = BaseSettings.GenerateDtoTypes ?
                           GenerateDtoTypes() :
                           Enumerable.Empty <CodeArtifact>();

            clientTypes = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Implementation ?
                          clientTypes : Enumerable.Empty <CodeArtifact>();

            dtoTypes = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Contracts ?
                       dtoTypes : Enumerable.Empty <CodeArtifact>();

            return(GenerateFile(clientTypes, dtoTypes, outputType)
                   .Replace("\r", string.Empty)
                   .Replace("\n\n\n\n", "\n\n")
                   .Replace("\n\n\n", "\n\n"));
        }
Esempio n. 13
0
 /// <summary>
 /// Generates the client class.
 /// </summary>
 /// <param name="csci">The csci.</param>
 /// <param name="outputType">Type of the output.</param>
 /// <returns></returns>
 public string GenerateClientClass(BaseClientInfo csci, ClientGeneratorOutputType outputType)
 => GenerateClientCode(csci.ClientClassName, csci.ClientControllerName, csci.Operations, outputType);
Esempio n. 14
0
 internal abstract string GenerateFile(string clientCode, IEnumerable <string> clientClasses, ClientGeneratorOutputType outputType);
Esempio n. 15
0
 internal abstract string GenerateClientClass(string controllerName, string controllerClassName, IList <OperationModel> operations, ClientGeneratorOutputType outputType);
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList <OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var model = new ClientTemplateModel(controllerName, controllerClassName, operations, _service, Settings)
            {
                GenerateContracts      = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Contracts,
                GenerateImplementation = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Implementation,
            };

            var template = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client", model);

            return(template.Render());
        }
 /// <summary>Generates the the whole file containing all needed types.</summary>
 /// <param name="outputType">The output type.</param>
 /// <returns>The code</returns>
 public string GenerateFile(ClientGeneratorOutputType outputType)
 {
     return(GenerateFile(_service, outputType));
 }
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList <OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var model = new ControllerTemplateModel(Settings)
            {
                Class      = controllerClassName,
                BaseUrl    = _document.BaseUrl,
                Operations = operations
            };

            var template = Settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", model);

            return(template.Render());
        }
Esempio n. 19
0
        /// <summary>Generates the client class.</summary>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="controllerClassName">Name of the controller class.</param>
        /// <param name="operations">The operations.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateClientClass(string controllerName, string controllerClassName, IList <CSharpOperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var exceptionSchema = (Resolver as CSharpTypeResolver)?.ExceptionSchema;
            var model           = new CSharpClientTemplateModel(controllerName, controllerClassName, operations, exceptionSchema, _document, Settings)
            {
                GenerateContracts      = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Contracts,
                GenerateImplementation = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Implementation,
            };

            var template = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client", model);

            return(template.Render());
        }
Esempio n. 20
0
        /// <summary>Generates the file.</summary>
        /// <param name="clientCode">The client code.</param>
        /// <param name="clientClasses">The client classes.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateFile(string clientCode, IEnumerable <string> clientClasses, ClientGeneratorOutputType outputType)
        {
            var model    = new CSharpFileTemplateModel(clientCode, outputType, _document, _settings, this, (SwaggerToCSharpTypeResolver)Resolver);
            var template = _settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "File", model);

            return(template.Render());
        }
Esempio n. 21
0
 /// <summary>
 /// 生成文件
 /// 这里不生成
 /// </summary>
 /// <param name="clientTypes"></param>
 /// <param name="dtoTypes"></param>
 /// <param name="outputType"></param>
 /// <returns></returns>
 protected override string GenerateFile(IEnumerable <CodeArtifact> clientTypes, IEnumerable <CodeArtifact> dtoTypes, ClientGeneratorOutputType outputType)
 {
     return(string.Empty);
 }
Esempio n. 22
0
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList <OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            UpdateUseDtoClassAndDataConversionCodeProperties(operations);

            var model    = new ClientTemplateModel(GetClassName(controllerClassName), operations, _service, Settings);
            var template = Settings.CreateTemplate(model);
            var code     = template.Render();

            return(AppendExtensionClassIfNecessary(controllerClassName, code));
        }
Esempio n. 23
0
        /// <summary>Generates the file.</summary>
        /// <param name="clientCode">The client code.</param>
        /// <param name="clientClasses">The client classes.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateFile(string clientCode, IEnumerable <string> clientClasses, ClientGeneratorOutputType outputType)
        {
            var model    = new TypeScriptFileTemplateModel(clientCode, clientClasses, _document, _extensionCode, Settings, _resolver);
            var template = BaseSettings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("TypeScript", "File", model);

            return(template.Render());
        }
Esempio n. 24
0
 /// <summary>
 /// 生成文件
 /// 这里不生成
 /// </summary>
 /// <param name="clientCode"></param>
 /// <param name="clientClasses"></param>
 /// <param name="outputType"></param>
 /// <returns></returns>
 protected override string GenerateFile(string clientCode, IEnumerable <string> clientClasses, ClientGeneratorOutputType outputType)
 {
     return(string.Empty);
 }
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList<OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var exceptionSchema = (Resolver as SwaggerToCSharpTypeResolver)?.ExceptionSchema;
            var model = new ClientTemplateModel(controllerName, controllerClassName, operations, _document, exceptionSchema, Settings)
            {
                GenerateContracts = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Contracts,
                GenerateImplementation = outputType == ClientGeneratorOutputType.Full || outputType == ClientGeneratorOutputType.Implementation,
            };

            var template = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client", model);
            return template.Render();
        }
        internal override string GenerateClientClass(string controllerName, string controllerClassName, IList<OperationModel> operations, ClientGeneratorOutputType outputType)
        {
            UpdateUseDtoClassAndDataConversionCodeProperties(operations);

            var model = new ClientTemplateModel(GetClassName(controllerClassName), operations, _document, Settings);
            var template = Settings.CreateTemplate(model);
            var code = template.Render();

            return AppendExtensionClassIfNecessary(controllerClassName, code);
        }
Esempio n. 27
0
        /// <summary>Generates the file.</summary>
        /// <param name="clientTypes">The client types.</param>
        /// <param name="dtoTypes">The DTO types.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateFile(IEnumerable <CodeArtifact> clientTypes, IEnumerable <CodeArtifact> dtoTypes, ClientGeneratorOutputType outputType)
        {
            var model    = new CSharpFileTemplateModel(clientTypes, dtoTypes, outputType, _document, _settings, this, (CSharpTypeResolver)Resolver);
            var template = _settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "File", model);

            return(template.Render());
        }
Esempio n. 28
0
            /// <summary>
            /// 生成客户端调用代码
            /// 但实际只为了获得HttpApi实例
            /// </summary>
            /// <param name="controllerName"></param>
            /// <param name="controllerClassName"></param>
            /// <param name="operations"></param>
            /// <param name="outputType"></param>
            /// <returns></returns>
            protected override string GenerateClientClass(string controllerName, string controllerClassName, IList <CSharpOperationModel> operations, ClientGeneratorOutputType outputType)
            {
                var model = new HttpApi(controllerClassName, operations, this.swagger.Document, this.swagger.Settings);

                this.httpApiList.Add(model);
                return(string.Empty);
            }
Esempio n. 29
0
 internal override string GenerateFile(string clientCode, IEnumerable<string> clientClasses, ClientGeneratorOutputType outputType)
 {
     var model = new FileTemplateModel(clientCode, outputType, _document, this, _settings, (SwaggerToCSharpTypeResolver)Resolver);
     var template = _settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "File", model);
     return template.Render();
 }
 /// <summary>Generates the the whole file containing all needed types.</summary>
 /// <param name="outputType">The output type.</param>
 /// <returns>The code</returns>
 public string GenerateFile(ClientGeneratorOutputType outputType)
 {
     return GenerateFile(_document, outputType);
 }
 /// <summary>Generates the file.</summary>
 /// <param name="clientTypes">The client types.</param>
 /// <param name="dtoTypes">The DTO types.</param>
 /// <param name="outputType">Type of the output.</param>
 /// <returns>The code.</returns>
 protected abstract string GenerateFile(IEnumerable <CodeArtifact> clientTypes, IEnumerable <CodeArtifact> dtoTypes, ClientGeneratorOutputType outputType);
 internal override string GenerateFile(string clientCode, IEnumerable<string> clientClasses, ClientGeneratorOutputType outputType)
 {
     var model = new FileTemplateModel(_document, clientCode, clientClasses, Settings, _extensionCode, _resolver);
     var template = BaseSettings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("TypeScript", "File", model);
     return template.Render();
 }
        /// <summary>Generates the client class.</summary>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="controllerClassName">Name of the controller class.</param>
        /// <param name="operations">The operations.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateClientClass(string controllerName, string controllerClassName, IList <CSharpOperationModel> operations, ClientGeneratorOutputType outputType)
        {
            var model    = new CSharpControllerTemplateModel(controllerClassName, operations, _document, Settings);
            var template = Settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", model);

            return(template.Render());
        }
Esempio n. 34
0
 /// <summary>Generates the the whole file containing all needed types.</summary>
 /// <param name="outputType">The output type.</param>
 /// <returns>The code</returns>
 public string GenerateFile(ClientGeneratorOutputType outputType)
 {
     return(GenerateFile(_document, outputType));
 }
Esempio n. 35
0
        internal override string GenerateFile(string clientCode, IEnumerable <string> clientClasses, ClientGeneratorOutputType outputType)
        {
            var model    = new FileTemplateModel(_service, clientCode, clientClasses, Settings, _resolver);
            var template = BaseSettings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("TypeScript", "File", model);

            return(template.Render());
        }
Esempio n. 36
0
 internal abstract string GenerateFile(string clientCode, IEnumerable<string> clientClasses, ClientGeneratorOutputType outputType);
Esempio n. 37
0
        /// <summary>Generates the client class.</summary>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="controllerClassName">Name of the controller class.</param>
        /// <param name="operations">The operations.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <returns>The code.</returns>
        protected override string GenerateClientClass(string controllerName, string controllerClassName, IList <TypeScriptOperationModel> operations, ClientGeneratorOutputType outputType)
        {
            UpdateUseDtoClassAndDataConversionCodeProperties(operations);

            var model    = new TypeScriptClientTemplateModel(controllerName, controllerClassName, operations, _extensionCode, _document, Settings);
            var template = Settings.CreateTemplate(model);

            return(template.Render());
        }
Esempio n. 38
0
 internal abstract string GenerateClientClass(string controllerName, string controllerClassName, IList<OperationModel> operations, ClientGeneratorOutputType outputType);