forked from loafle/openapi-generator-original
Groovy client generation
This commit is contained in:
parent
db68a3acbd
commit
8135cd65dc
49
src/main/resources/Groovy/ApiUtils.mustache
Normal file
49
src/main/resources/Groovy/ApiUtils.mustache
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package {{invokerPackage}};
|
||||||
|
|
||||||
|
import groovyx.net.http.HTTPBuilder
|
||||||
|
import groovyx.net.http.Method
|
||||||
|
|
||||||
|
import static groovyx.net.http.ContentType.JSON
|
||||||
|
import static java.net.URI.create;
|
||||||
|
|
||||||
|
class ApiUtils {
|
||||||
|
|
||||||
|
def onSuccessPrintResult = {println "Successfully invoked API $it"}
|
||||||
|
def onFailurePrintError = {status, message -> println "Failed to invoke API $status $message"}
|
||||||
|
|
||||||
|
def invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, method, container, type) {
|
||||||
|
def (url, uriPath) = buildUrlAndUriPath(basePath, versionPath, resourcePath)
|
||||||
|
println "url=$url uriPath=$uriPath"
|
||||||
|
def http = new HTTPBuilder(url)
|
||||||
|
http.request( Method.valueOf(method), JSON ) {
|
||||||
|
uri.path = uriPath
|
||||||
|
uri.query = queryParams
|
||||||
|
response.success = { resp, json ->
|
||||||
|
if (type != null) {
|
||||||
|
onSuccess(parse(json, container, type))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response.failure = { resp ->
|
||||||
|
onFailure(resp.status, resp.statusLine.reasonPhrase)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def buildUrlAndUriPath(basePath, versionPath, resourcePath) {
|
||||||
|
|
||||||
|
URI baseUri = create(basePath)
|
||||||
|
def pathOnly = baseUri.getPath()
|
||||||
|
[basePath-pathOnly, pathOnly+versionPath+resourcePath]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def parse(object, container, clazz) {
|
||||||
|
if (container == "List") {
|
||||||
|
return object.collect {parse(it, "", clazz)}
|
||||||
|
} else {
|
||||||
|
return clazz.newInstance(object)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
src/main/resources/Groovy/api.mustache
Normal file
56
src/main/resources/Groovy/api.mustache
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package {{package}};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import groovyx.net.http.*
|
||||||
|
import static groovyx.net.http.ContentType.*
|
||||||
|
import static groovyx.net.http.Method.*
|
||||||
|
import {{invokerPackage}}.ApiUtils
|
||||||
|
//-------------
|
||||||
|
|
||||||
|
{{#imports}}import {{import}}
|
||||||
|
{{/imports}}
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Mixin(ApiUtils)
|
||||||
|
{{#operations}}
|
||||||
|
class {{classname}} {
|
||||||
|
String basePath = "{{basePath}}"
|
||||||
|
String versionPath = "/api/v1"
|
||||||
|
|
||||||
|
|
||||||
|
{{#operation}}
|
||||||
|
def {{nickname}} ({{#allParams}} {{{dataType}}} {{paramName}},{{/allParams}} Closure onSuccess, Closure onFailure) {
|
||||||
|
// create path and map variables
|
||||||
|
String resourcePath = "{{path}}"
|
||||||
|
|
||||||
|
|
||||||
|
// query params
|
||||||
|
def queryParams = [:]
|
||||||
|
def headerParams = [:]
|
||||||
|
|
||||||
|
{{#requiredParamCount}}
|
||||||
|
// verify required params are set
|
||||||
|
if({{/requiredParamCount}}{{#requiredParams}} {{paramName}} == null {{#hasMore}}|| {{/hasMore}}{{/requiredParams}}{{#requiredParamCount}}) {
|
||||||
|
throw new RuntimeException("missing required params")
|
||||||
|
}
|
||||||
|
{{/requiredParamCount}}
|
||||||
|
|
||||||
|
{{#queryParams}}if(!"null".equals(String.valueOf({{paramName}})))
|
||||||
|
queryParams.put("{{paramName}}", String.valueOf({{paramName}}))
|
||||||
|
{{/queryParams}}
|
||||||
|
|
||||||
|
{{#headerParams}}headerParams.put("{{paramName}}", {{paramName}})
|
||||||
|
{{/headerParams}}
|
||||||
|
|
||||||
|
invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams,
|
||||||
|
"{{httpMethod}}", "{{returnContainer}}",
|
||||||
|
{{#returnBaseType}}{{{returnBaseType}}}.class {{/returnBaseType}}{{^returnBaseType}}null {{/returnBaseType}})
|
||||||
|
|
||||||
|
}
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
{{/operations}}
|
32
src/main/resources/Groovy/build.gradle.mustache
Normal file
32
src/main/resources/Groovy/build.gradle.mustache
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
apply plugin: 'groovy'
|
||||||
|
apply plugin: 'idea'
|
||||||
|
def artifactory = 'buildserver.supportspace.com'
|
||||||
|
group = 'com.supportspace'
|
||||||
|
archivesBaseName = 'swagger-gen-groovy'
|
||||||
|
version = '0.1'
|
||||||
|
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
maven { url 'http://repo.jfrog.org/artifactory/gradle-plugins' }
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.16')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral(artifactUrls: ['http://maven.springframework.org/milestone'])
|
||||||
|
maven { url "http://$artifactory:8080/artifactory/repo" }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
groovy "org.codehaus.groovy:groovy-all:2.0.5"
|
||||||
|
compile 'org.codehaus.groovy.modules.http-builder:http-builder:0.6'
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
task wrapper(type: Wrapper) { gradleVersion = '1.6' }
|
||||||
|
|
21
src/main/resources/Groovy/model.mustache
Normal file
21
src/main/resources/Groovy/model.mustache
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package {{package}};
|
||||||
|
|
||||||
|
import groovy.transform.Canonical
|
||||||
|
{{#imports}}import {{import}};
|
||||||
|
{{/imports}}
|
||||||
|
{{#models}}
|
||||||
|
{{#model}}
|
||||||
|
@Canonical
|
||||||
|
class {{classname}} {
|
||||||
|
{{#vars}}
|
||||||
|
|
||||||
|
{{#description}}/* {{{description}}} */
|
||||||
|
{{/description}}
|
||||||
|
{{{datatype}}} {{name}} = {{{defaultValue}}}
|
||||||
|
{{/vars}}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/model}}
|
||||||
|
{{/models}}
|
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012 Wordnik, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.wordnik.swagger.codegen
|
||||||
|
|
||||||
|
import com.wordnik.swagger.codegen.BasicJavaGenerator
|
||||||
|
|
||||||
|
object BasicGroovyGenerator extends BasicGroovyGenerator {
|
||||||
|
def main(args: Array[String]) = generateClient(args)
|
||||||
|
}
|
||||||
|
|
||||||
|
class BasicGroovyGenerator extends BasicJavaGenerator {
|
||||||
|
|
||||||
|
// location of templates
|
||||||
|
override def templateDir = "Groovy"
|
||||||
|
|
||||||
|
// where to write generated code
|
||||||
|
override def destinationDir = "generated-code/groovy/src/main/groovy"
|
||||||
|
|
||||||
|
// template used for models
|
||||||
|
modelTemplateFiles += "model.mustache" -> ".groovy"
|
||||||
|
|
||||||
|
// template used for models
|
||||||
|
apiTemplateFiles += "api.mustache" -> ".groovy"
|
||||||
|
|
||||||
|
|
||||||
|
// package for models
|
||||||
|
override def modelPackage = Some("com.wordnik.client.model")
|
||||||
|
|
||||||
|
// package for api classes
|
||||||
|
override def apiPackage = Some("com.wordnik.client.api")
|
||||||
|
|
||||||
|
// file suffix
|
||||||
|
override def fileSuffix = ".groovy"
|
||||||
|
|
||||||
|
|
||||||
|
override def supportingFiles =
|
||||||
|
List(
|
||||||
|
("ApiUtils.mustache", destinationDir + java.io.File.separator + invokerPackage.get.replace(".", java.io.File.separator) + java.io.File.separator, "ApiUtils.groovy"),
|
||||||
|
("build.gradle.mustache", "generated-code/groovy", "build.gradle"))
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user