All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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
    «FOR parameter : parameters» «ENDFOR»
    NameValue
    «parameter»«link.parameters.get(parameter)»
    ''' } 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