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

com.reprezen.genflow.swagger.doc.XGenerateSwaggerDoc.xtend Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * 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.swagger.doc

import com.google.common.collect.Lists
import com.reprezen.genflow.api.swagger.SwaggerOutputItem
import com.reprezen.genflow.common.HtmlInjections
import io.swagger.models.Swagger
import java.util.List
import java.util.regex.Pattern

import static com.reprezen.genflow.common.HtmlInjections.*

class XGenerateSwaggerDoc extends SwaggerOutputItem {
	public static val URL_PREFIX_PARAM = 'urlPrefix'
	public static val ANCHOR_NAME_PARAM = 'anchorName'
	public static val PREVIEW_PARAM = 'preview'

	extension OptionHelper optionHelper
	extension HtmlHelper htmlHelper
	extension MiscHelper miscHelper
	extension HtmlInjections htmlInjections

	override generate(Swagger swagger) {
		try {
			HelperHelper.open(swagger, context)
			optionHelper = HelperHelper.optionHelper
			htmlHelper = HelperHelper.htmlHelper
			miscHelper = HelperHelper.miscHelper
			htmlInjections = context.genTargetParameters.get(HTML_INJECTIONS_PARAM) as HtmlInjections ?:
				new HtmlInjections
			doGenerate(swagger)
		} finally {
			HelperHelper.close()
		}
	}

	def doGenerate(Swagger swagger) {
		this.optionHelper = HelperHelper.optionHelper
		val urlPrefix = getUrlPrefix
		val preview = isPreview
		val showPaths = !swagger.paths.empty
		val showDefs = (!preview || !showPaths) && !swagger.definitions.empty
		val showParams = (!preview || !showPaths) && !swagger.parameters.empty
		val showResponses = (!preview || !showPaths) && !swagger.responses.empty
		val includeTOC = !preview && isIncludeTOC

		val html = '''
			
			
				
				«htmlHeadSection(swagger, urlPrefix, preview)»
				            
					«BODY_TOP.inject»
					
					
					
«IF includeTOC»
«ENDIF»
«new TopMatter().get(swagger)» «if(showPaths) swagger.pathsHtml» «if(showParams) swagger.parametersHtml» «if(showResponses) swagger.responsesHtml» «if(showDefs) swagger.definitionsHtml»
«IF includeTOC» «ENDIF» «BODY_BOTTOM.inject» ''' html.removeUnwantedIndentation } def private htmlHeadSection(Swagger swagger, String urlPrefix, boolean preview) { ''' «HEAD_TOP.inject» «swagger?.info?.title» Documentation «IF preview» «ENDIF» «HEAD_BOTTOM.inject» ''' } def private pathsHtml(Swagger swagger) { '''

Path Specifications

«FOR path : swagger.paths?.keySet.sortByPosition(swagger.paths) ?: #[]» «new PathDoc(path).html» «ENDFOR»
''' } def private parametersHtml(Swagger swagger) { '''

Parameters

«FOR param : swagger.parameters.keySet.sortByPosition(swagger.parameters)» «new ParamDoc(swagger, param).html» «ENDFOR»
''' } def private responsesHtml(Swagger swagger) { '''

Responses

«FOR response : swagger.responses.keySet.sortByPosition(swagger.responses)» «new ResponseDoc(response).html» «ENDFOR»
''' } def private definitionsHtml(Swagger swagger) { '''

Schema Definitions

«FOR definition : swagger.definitions.keySet.sortByPosition(swagger.definitions)» «new ModelDoc(definition).html» «ENDFOR»
''' } val indentedPreBlock = Pattern.compile("^(\\s*).*$", Pattern.CASE_INSENSITIVE + Pattern.DOTALL) // DOTALL so we match trailing \r chars def private removeUnwantedIndentation(String html) { return html.split("\n").removeUnwantedIndentation } def private removeUnwantedIndentation(List lines) { var i = 0 val unindentedLines = Lists.newArrayList while (i < lines.size) { var line = lines.get(i) var matcher = indentedPreBlock.matcher(line) if (matcher.matches) { var indentation = matcher.group(1) var indentLen = matcher.end(1) while (i < lines.size && line.startsWith(indentation)) { unindentedLines.add(line.substring(indentLen)) i = i + 1 line = if(i < lines.size) lines.get(i) else "" } } else { unindentedLines.add(lines.get(i)) i = i + 1 } } unindentedLines.join("\n") } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy