com.reprezen.genflow.openapi3.doc.OpDoc.xtend Maven / Gradle / Ivy
/*******************************************************************************
* Copyright © 2013, 2016 Modelsolv, Inc.
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains the property
* of ModelSolv, Inc. See the file license.html in the root directory of
* this project for further information.
*******************************************************************************/
package com.reprezen.genflow.openapi3.doc
import com.reprezen.kaizen.oasparser.model3.Callback
import com.reprezen.kaizen.oasparser.model3.Link
import com.reprezen.kaizen.oasparser.model3.MediaType
import com.reprezen.kaizen.oasparser.model3.OpenApi3
import com.reprezen.kaizen.oasparser.model3.Operation
import com.reprezen.kaizen.oasparser.model3.Path
import com.reprezen.kaizen.oasparser.model3.RequestBody
import com.reprezen.kaizen.oasparser.model3.Response
class OpDoc {
val Operation op
extension KaiZenParserHelper = new KaiZenParserHelper
extension DocHelper = HelperHelper.docHelper
extension TagHelper = HelperHelper.tagHelper
extension SchemaHelper = HelperHelper.schemaHelper
extension ResponseHelper = HelperHelper.responseHelper
extension HtmlHelper = HelperHelper.htmlHelper
extension MiscHelper = HelperHelper.miscHelper
extension OptionHelper = HelperHelper.optionHelper
extension ExamplesHelper = HelperHelper.examplesHelper
new(Operation op, OpenApi3 model, Path path) {
this.op = op;
}
def String getHtml(String method) {
'''
«method»
«op.operationId.deprecate(op.isDeprecated)»
«op.tagBadges»
«IF preview»
«ENDIF»
«op.summary.getDocHtml(op.description)»
«new ParamsDoc().paramsHtml(op.nonBodyParameters)»
«op.getMessageBodyHtml()»
«FOR callback : op.callbacks.keySet»
«op.callbacks.get(callback).getCallbackHtml(callback)»
«ENDFOR»
'''
}
def getNonBodyParameters(Operation op) {
op.parameters?.filter[it.in != "body"].toList
}
def getMessageBodyHtml(Operation op /* , HttpMethod method */ ) {
'''
«op.requestBody.asNullIfMissing?.getRequestBodyHtml»
«FOR code : op.responses.keySet.sortByPosition(op.responses)»«op.responses.get(code).getResponseHtml(code)»«ENDFOR»
'''
}
def getRequestBodyHtml(RequestBody bodyParam) {
'''
«FOR contentType : bodyParam.contentMediaTypes.keySet»
Request «contentType»«chevron»«bodyParam.contentMediaTypes.get(contentType).schema?.schemaTitle»
«getMediaTypeHtml(contentType, bodyParam.contentMediaTypes.get(contentType))»
«ENDFOR»
'''
}
def getMediaTypeHtml(String name, MediaType mediaType) {
'''
«mediaType.schema?.description?.docHtml»
«mediaType.schema?.renderSchema»
«mediaType.examples.renderExamples»
'''
}
def getResponseHtml(Response response, String status) {
'''
Response «status.statusLabel»
«response.description?.docHtml»
«FOR contentType : response.contentMediaTypes.keySet»
«response.getResponseContentHtml(contentType, response.contentMediaTypes.get(contentType), status)»
«ENDFOR»
«response.responseHeaders»
'''
}
def getResponseContentHtml(Response response, String contentType, MediaType mediaType, String status) {
val schema = mediaType?.schema
'''
«chevron» «contentType»
«schema?.schemaTitle»
«schema?.renderSchema»
«mediaType?.example.renderExample»
«mediaType?.examples.renderExamples»
«response.responseLinks»
'''
}
def private getResponseHeaders(Response response) {
val html = response.getHeadersHtml
if (html !== null) {
'''
Headers
«html»
'''
}
}
def getCallbackHtml(Callback callback, String name) {
'''
Callback «name»
«FOR path : callback.callbackPaths.keySet»
«new PathDoc(path, callback.callbackPaths.get(path)).html»
«ENDFOR»
'''
}
def getResponseLinks(Response response) {
if (response.links.empty)
''''''
else
'''
Links
«FOR link : response.links.keySet»
«link.getLinkHtml(response.links.get(link))»
«ENDFOR»
'''
}
def getLinkHtml(String name, Link link) {
val parameters = link.parameters.keySet
'''
«chevron» «name» «link.operationId»
«link.description»
Parameters
Name Value
«FOR parameter : parameters»
«parameter» «link.parameters.get(parameter)»
«ENDFOR»
'''
}
def chevron() {
''
}
def statusLabel(String status) {
val context = try {
switch s: Integer.parseInt(status) {
case s >= 100 && s < 200: // Informational
"info"
case s >= 200 && s < 300: // Success
"success"
case s >= 300 && s < 400: // Redirection
"info"
case s >= 400 && s < 500: // Bad request
"danger"
case s >= 500 && s < 600: // server error
"danger"
default:
"default"
}
} catch (NumberFormatException e) {
status // handle "default" case
}
'''«status»'''
}
def deprecate(String text, Boolean deprecated) {
if (deprecated !== null && deprecated) '''«text»''' else text
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy