
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»
«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
Path Specifications
«FOR path : swagger.paths?.keySet.sortByPosition(swagger.paths) ?: #[]»
«new PathDoc(path).html»
«ENDFOR»
'''
}
def private parametersHtml(Swagger swagger) {
'''
Parameters
Parameters
«FOR param : swagger.parameters.keySet.sortByPosition(swagger.parameters)»
«new ParamDoc(swagger, param).html»
«ENDFOR»
'''
}
def private responsesHtml(Swagger swagger) {
'''
Responses
Responses
«FOR response : swagger.responses.keySet.sortByPosition(swagger.responses)»
«new ResponseDoc(response).html»
«ENDFOR»
'''
}
def private definitionsHtml(Swagger swagger) {
'''
Schema Definitions
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