Example #1
0
        private void GenerateOperationClass(OperationGroupContext operationGroupContext, string generatedClassName)
        {
            try
            {
                string className = String.Join("", configuration.OperationClassPrefixName, operationGroupContext.Name, configuration.OperationClassBaseName);

                string fileName     = $"{className}.cs";
                string fileLocation = Path.Combine(configuration.OperationsFolderLocation, fileName);

                if (!File.Exists(fileLocation))
                {
                    CompilationUnitSyntax compilationUnit = SyntaxFactory.CompilationUnit();

                    NamespaceDeclarationSyntax @namespace = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName(
                                                                                                   String.Join(".", configuration.ProjectName, configuration.OperationsFolderName)).NormalizeWhitespace());

                    ClassDeclarationSyntax classDeclaration = SyntaxFactory.ClassDeclaration(className)
                                                              .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
                                                              .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName(generatedClassName)));

                    @namespace      = @namespace.AddMembers(classDeclaration);
                    compilationUnit = compilationUnit.AddMembers(@namespace);

                    string fileContent = compilationUnit.NormalizeWhitespace().ToFullString();

                    File.WriteAllText(fileLocation, fileContent);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        private void ProcessOperations(ApiDeclaration apiDeclaration, GenerationContext dataContext)
        {
            OperationGroupContext operationGroupContext = new OperationGroupContext {
                Name = apiDeclaration.ResourcePath.NormalizeName()
            };

            foreach (ApiObject apiObject in apiDeclaration.Apis)
            {
                string operationPath = apiObject.Path;

                foreach (OperationObject operation in apiObject.Operations)
                {
                    OperationContext operationContext = new OperationContext
                    {
                        RelativeUrl = $"{apiDeclaration.BasePath}{operationPath}",
                        Method      = operation.Method.ToString(),
                        Name        = operation.NickName
                    };

                    InitParameterFromDataTypeObject(operationContext, operation);

                    foreach (ParameterObject parameterObject in operation.Parameters)
                    {
                        ParameterContext parameter = new ParameterContext
                        {
                            Name = parameterObject.Name
                        };

                        InitParameterFromDataTypeObject(parameter, parameterObject);

                        switch (parameterObject.ParamType)
                        {
                        case ParamType.Path:
                            operationContext.PathParameters.Add(parameter);
                            break;

                        case ParamType.Query:
                            operationContext.QueryParameters.Add(parameter);
                            break;

                        case ParamType.Body:
                            operationContext.BodyParameter = parameter;
                            break;

                        case ParamType.Header:
                        case ParamType.Form:
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }

                    operationGroupContext.Operations.Add(operationContext);
                }
            }

            dataContext.Groups.Add(operationGroupContext);
        }
Example #3
0
        private string GenerateOperationGenClass(OperationGroupContext operationGroupContext, string baseClassName)
        {
            string className = String.Join("", configuration.OperationClassPrefixName, operationGroupContext.Name, CSharpLanguageSettings.GeneratedKeyWord, configuration.OperationClassBaseName);

            string fileName     = $"{className}.generated.cs";
            string fileLocation = Path.Combine(configuration.OperationsGeneratedFolderLocation, fileName);

            CompilationUnitSyntax compilationUnit = SyntaxFactory.CompilationUnit();

            compilationUnit = compilationUnit
                              .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName("System")))
                              .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName("System.Net.Http")))
                              .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName("System.Threading.Tasks")))
                              .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName($"{configuration.ProjectName}.{configuration.ModelFolderName}")))
                              .AddUsings(SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(String.Join(".", configuration.ProjectName, configuration.OperationsFolderName, configuration.OperationsBaseFolderName))));

            NamespaceDeclarationSyntax @namespace = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName(
                                                                                           String.Join(".", configuration.ProjectName, configuration.OperationsFolderName, configuration.OperationsGeneratedFolderName)).NormalizeWhitespace());

            //ConstructorDeclarationSyntax constructor = GenerateConstructor(className);

            ClassDeclarationSyntax classDeclaration = SyntaxFactory.ClassDeclaration(className)
                                                      .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
                                                      .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName(baseClassName)));

            //.AddMembers(constructor);

            foreach (OperationContext operationContext in operationGroupContext.Operations)
            {
                MethodDeclarationSyntax methodDeclaration = GenerateMethod(operationContext);

                classDeclaration = classDeclaration.AddMembers(methodDeclaration);
            }

            @namespace      = @namespace.AddMembers(classDeclaration);
            compilationUnit = compilationUnit.AddMembers(@namespace);

            string fileContent = compilationUnit.NormalizeWhitespace().ToFullString();

            File.WriteAllText(fileLocation, fileContent);

            return(className);
        }