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); }
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); }