Exemplo n.º 1
0
        /// <summary>Initializes a new instance of the <see cref="TypeScriptOperationModel" /> class.</summary>
        /// <param name="operation">The operation.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The generator.</param>
        /// <param name="resolver">The resolver.</param>
        public TypeScriptOperationModel(
            SwaggerOperation operation,
            ClientGeneratorBaseSettings settings,
            SwaggerToTypeScriptClientGenerator generator,
            ITypeResolver resolver)
            : base(null, operation, resolver, generator, settings)
        {
            _operation = operation;
            _settings  = settings;
            _generator = generator;

            var parameters = _operation.ActualParameters.ToList();

            if (settings.GenerateOptionalParameters)
            {
                parameters = parameters.OrderBy(p => !p.IsRequired).ToList();
            }

            Parameters = parameters.Select(parameter =>
                                           new TypeScriptParameterModel(parameter.Name,
                                                                        GetParameterVariableName(parameter, _operation.Parameters), ResolveParameterType(parameter),
                                                                        parameter, _operation.ActualParameters.ToList(), (SwaggerToTypeScriptClientGeneratorSettings)_settings,
                                                                        _generator, (TypeScriptTypeResolver)resolver))
                         .ToList();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Defines the generator settings.
        /// </summary>
        private void DefineGeneratorSettings()
        {
            if (_settings.LanguageCode == Language.CSharp)
            {
                _langCodeGenSettings = new SwaggerToCSharpClientGeneratorSettings()
                {
                    CSharpGeneratorSettings =
                    {
                        Namespace  = _settings.ClientNamespace,
                        SchemaType = SchemaType.Swagger2
                                     //TemplateDirectory =
                    },
                    AdditionalNamespaceUsages = _settings.GetNamespaces(),
                    GenerateSyncMethods       = _settings.GenerateSyncMethods,
                    ClientClassAccessModifier = "public",
                    ClientBaseClass           = "ApiBaseClient",
                    ParameterArrayType        = "List",      //Default: System.Collections.Generic.IEnumerable
                    ParameterDictionaryType   = "Dictonary", //Default: System.Collections.Generic.IDictionary
                    ResponseArrayType         = "List",      // Default: System.Collections.ObjectModel.ObservableCollection
                    ResponseDictionaryType    = "Dictonary", //Default: System.Collections.Generic.Dictionary
                    GenerateDtoTypes          = false,
                    GenerateClientInterfaces  = true,
                };

                List <Assembly> templateAssemblies = new List <Assembly>();

                Assembly assembly = null;

                if (!string.IsNullOrEmpty(_settings.TemplatesDirectory))
                {
                    _langCodeGenSettings.CodeGeneratorSettings.TemplateDirectory = _settings.TemplatesDirectory;
                }
                else if (!string.IsNullOrEmpty(_settings.TemplatesAssemblyName))
                {
                    templateAssemblies.Add(typeof(CSharpGeneratorSettings).GetTypeInfo().Assembly);
                    templateAssemblies.Add(typeof(SwaggerToCSharpGeneratorSettings).GetTypeInfo().Assembly);

                    try { assembly = typeof(ApiBaseClient).Assembly; // Assembly.Load(_settings.TemplatesAssemblyName);
                          templateAssemblies.Add(assembly); }
                    catch (Exception e)
                    { }
                }

                var templateFactory = new Templates.TemplateFactory(_langCodeGenSettings.CodeGeneratorSettings,
                                                                    _settings.TemplatesAssemblyName,
                                                                    templateAssemblies);

                _langCodeGenSettings.CodeGeneratorSettings.TemplateFactory = templateFactory;
            }
            _langCodeGenSettings.OperationNameGenerator = new MultipleClientsFromPathSegmentsOperationNameGenerator();
            _langCodeGenSettings.ClassName = "{controller}Client";
        }
Exemplo n.º 3
0
        /// <summary>Initializes a new instance of the <see cref="OperationModelBase{TParameterModel, TResponseModel}"/> class.</summary>
        /// <param name="exceptionSchema">The exception schema.</param>
        /// <param name="operation">The operation.</param>
        /// <param name="resolver">The resolver.</param>
        /// <param name="generator">The generator.</param>
        /// <param name="settings">The settings.</param>
        protected OperationModelBase(JsonSchema exceptionSchema, OpenApiOperation operation, TypeResolverBase resolver, IClientGenerator generator, ClientGeneratorBaseSettings settings)
        {
            _operation = operation;
            _resolver  = resolver;
            _generator = generator;
            _settings  = settings;

            var responses = _operation.ActualResponses
                            .Select(response => CreateResponseModel(operation, response.Key, response.Value, exceptionSchema, generator, resolver, settings))
                            .ToList();

            var defaultResponse = responses.SingleOrDefault(r => r.StatusCode == "default");

            if (defaultResponse != null)
            {
                responses.Remove(defaultResponse);
            }

            Responses       = responses;
            DefaultResponse = defaultResponse;
        }
Exemplo n.º 4
0
 /// <summary>Creates an operation model.</summary>
 /// <param name="operation"></param>
 /// <param name="settings">The settings.</param>
 /// <returns>The operation model.</returns>
 protected override TypeScriptOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings)
 {
     return(new TypeScriptOperationModel(operation, (SwaggerToTypeScriptClientGeneratorSettings)settings, this, Resolver));
 }
Exemplo n.º 5
0
 /// <summary>
 /// 创建操作描述
 /// 这里创建HttpApiOperation
 /// </summary>
 /// <param name="operation"></param>
 /// <param name="settings"></param>
 /// <returns></returns>
 protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings)
 {
     return(new HttpApiMethod(operation, (CSharpGeneratorBaseSettings)settings, this, (CSharpTypeResolver)Resolver));
 }
Exemplo n.º 6
0
 /// <summary>Creates the response model.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 /// <param name="settings">The settings.</param>
 /// <returns>The response model.</returns>
 protected abstract TResponseModel CreateResponseModel(OpenApiOperation operation, string statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator,
                                                       TypeResolverBase resolver, ClientGeneratorBaseSettings settings);
Exemplo n.º 7
0
 /// <summary>Creates the response model.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 /// <param name="settings">The settings.</param>
 /// <returns></returns>
 protected override TypeScriptResponseModel CreateResponseModel(SwaggerOperation operation, string statusCode, SwaggerResponse response,
                                                                JsonSchema4 exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings)
 {
     return(new TypeScriptResponseModel(this, operation, statusCode, response, response == GetSuccessResponse().Value,
                                        exceptionSchema, generator, resolver, (SwaggerToTypeScriptClientGeneratorSettings)settings));
 }
Exemplo n.º 8
0
 /// <summary>Creates the response model.</summary>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="settings">The settings.</param>
 /// <returns>The response model.</returns>
 protected abstract TResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings);
Exemplo n.º 9
0
 /// <summary>Creates the response model.</summary>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="settings">The settings.</param>
 /// <returns></returns>
 protected override TypeScriptResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings)
 {
     return(new TypeScriptResponseModel(statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, (TypeScriptGeneratorSettings)settings.CodeGeneratorSettings));
 }
Exemplo n.º 10
0
 /// <summary>Creates the response model.</summary>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 /// <param name="settings">The settings.</param>
 /// <returns></returns>
 protected override CSharpResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings)
 {
     return(new CSharpResponseModel(this, statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, resolver, settings.CodeGeneratorSettings));
 }
Exemplo n.º 11
0
 /// <summary>Creates an operation model.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="settings">The settings.</param>
 /// <returns>The operation model.</returns>
 protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings)
 {
     return(new CSharpControllerOperationModel(operation, (CSharpControllerGeneratorSettings)settings, this, (CSharpTypeResolver)Resolver));
 }
        protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings)
        {
            var model = new DotvvmCSharpOperationModel(operation, Settings, this, resolver);

            HandleAsObjectParameters(operation, model, settings);

            model.AutoRefreshKey = string.Join("/", document.Operations.Single(o => o.Operation.OperationId == operation.OperationId).Operation.Tags);

            return(model);
        }
Exemplo n.º 13
0
 /// <summary>Creates an operation model.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="settings">The settings.</param>
 /// <returns>The operation model.</returns>
 protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings)
 {
     return(new CSharpOperationModel(operation, (SwaggerToCSharpGeneratorSettings)settings, this, (CSharpTypeResolver)Resolver));
 }
        private void HandleAsObjectParameters(SwaggerOperation operation, DotvvmCSharpOperationModel model, ClientGeneratorBaseSettings settings)
        {
            // find groups of parameters that should be treated as one
            var parameters = model.QueryParameters.Where(p => p.Name.Contains(".") && p.Schema.ExtensionData.ContainsKey("x-dotvvm-wrapperType"));
            var groups     = parameters.GroupBy(p => p.Name.Substring(0, p.Name.IndexOf("."))).ToList();

            foreach (var g in groups)
            {
                var typeName = g.First().Schema.ExtensionData["x-dotvvm-wrapperType"].ToString();
                typeName = typeName.Substring(0, typeName.IndexOf(","));

                var swaggerParameter = new SwaggerParameter()
                {
                    Name   = g.Key,
                    Schema = new JsonSchema4(),
                    Kind   = SwaggerParameterKind.Query
                };
                var newParameter = new DotvvmCSharpParameterModel(g.Key, g.Key, typeName, swaggerParameter, operation.Parameters, settings.CodeGeneratorSettings, this, model)
                {
                    ExcludeFromQuery = true
                };
                var targetIndex = g.Min(p => model.Parameters.IndexOf(p));
                foreach (var p in g)
                {
                    ((DotvvmCSharpParameterModel)p).CustomInitializer = $"var {p.VariableName} = {g.Key} != null ? {p.Name} : default({p.Type});";
                }
                model.Parameters.Insert(targetIndex, newParameter);
            }
        }
        protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings)
        {
            var model = new DotvvmCSharpOperationModel(operation, Settings, this, resolver);

            HandleAsObjectParameters(operation, model, settings);
            return(model);
        }
Exemplo n.º 16
0
 /// <summary>Creates the response model.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="statusCode">The status code.</param>
 /// <param name="response">The response.</param>
 /// <param name="exceptionSchema">The exception schema.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 /// <param name="settings">The settings.</param>
 /// <returns></returns>
 protected override CSharpResponseModel CreateResponseModel(OpenApiOperation operation, string statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings)
 {
     return(new CSharpResponseModel(this, operation, statusCode, response, response == GetSuccessResponse().Value, exceptionSchema, generator, resolver, settings.CodeGeneratorSettings));
 }
Exemplo n.º 17
0
 /// <summary>
 /// Specifies operation-specific settings for generating client code.
 /// </summary>
 /// <param name="settings">The NSwag settings to use</param>
 /// <returns>Updated settings object</returns>
 public GeneratorSettings WithSettings(ClientGeneratorBaseSettings settings)
 {
     ClientSettings = settings;
     return(this);
 }