
com.reprezen.genflow.swagger.doc.XGenerateSwaggerDoc 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 com.reprezen.genflow.swagger.doc.HelperHelper;
import com.reprezen.genflow.swagger.doc.HtmlHelper;
import com.reprezen.genflow.swagger.doc.MiscHelper;
import com.reprezen.genflow.swagger.doc.ModelDoc;
import com.reprezen.genflow.swagger.doc.OptionHelper;
import com.reprezen.genflow.swagger.doc.ParamDoc;
import com.reprezen.genflow.swagger.doc.PathDoc;
import com.reprezen.genflow.swagger.doc.ResponseDoc;
import com.reprezen.genflow.swagger.doc.TopMatter;
import io.swagger.models.Info;
import io.swagger.models.Model;
import io.swagger.models.Path;
import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.Parameter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Conversions;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
@SuppressWarnings("all")
public class XGenerateSwaggerDoc extends SwaggerOutputItem {
public static final String URL_PREFIX_PARAM = "urlPrefix";
public static final String ANCHOR_NAME_PARAM = "anchorName";
public static final String PREVIEW_PARAM = "preview";
@Extension
private OptionHelper optionHelper;
@Extension
private HtmlHelper htmlHelper;
@Extension
private MiscHelper miscHelper;
@Extension
private HtmlInjections htmlInjections;
@Override
public String generate(final Swagger swagger) {
try {
String _xtrycatchfinallyexpression = null;
try {
String _xblockexpression = null;
{
HelperHelper.open(swagger, this.context);
this.optionHelper = HelperHelper.getOptionHelper();
this.htmlHelper = HelperHelper.getHtmlHelper();
this.miscHelper = HelperHelper.getMiscHelper();
HtmlInjections _elvis = null;
Object _get = this.context.getGenTargetParameters().get(HtmlInjections.HTML_INJECTIONS_PARAM);
if (((HtmlInjections) _get) != null) {
_elvis = ((HtmlInjections) _get);
} else {
HtmlInjections _htmlInjections = new HtmlInjections();
_elvis = _htmlInjections;
}
this.htmlInjections = _elvis;
_xblockexpression = this.doGenerate(swagger);
}
_xtrycatchfinallyexpression = _xblockexpression;
} finally {
HelperHelper.close();
}
return _xtrycatchfinallyexpression;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public String doGenerate(final Swagger swagger) {
String _xblockexpression = null;
{
this.optionHelper = HelperHelper.getOptionHelper();
final String urlPrefix = this.optionHelper.getUrlPrefix();
final Boolean preview = this.optionHelper.isPreview();
boolean _isEmpty = swagger.getPaths().isEmpty();
final boolean showPaths = (!_isEmpty);
final boolean showDefs = (((!(preview).booleanValue()) || (!showPaths)) && (!swagger.getDefinitions().isEmpty()));
final boolean showParams = (((!(preview).booleanValue()) || (!showPaths)) && (!swagger.getParameters().isEmpty()));
final boolean showResponses = (((!(preview).booleanValue()) || (!showPaths)) && (!swagger.getResponses().isEmpty()));
final boolean includeTOC = ((!(preview).booleanValue()) && (this.optionHelper.isIncludeTOC()).booleanValue());
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append("\t");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.append("\t");
CharSequence _htmlHeadSection = this.htmlHeadSection(swagger, urlPrefix, (preview).booleanValue());
_builder.append(_htmlHeadSection, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append(" ");
_builder.newLine();
_builder.append("\t\t");
String _inject = this.htmlInjections.inject(HtmlInjections.BODY_TOP);
_builder.append(_inject, "\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLine();
{
if (includeTOC) {
_builder.append("\t\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("\t");
_builder.append("");
_builder.newLine();
}
}
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append(" ");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t\t\t\t");
_builder.append("Swagger Specification
");
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("");
_builder.newLine();
_builder.newLine();
_builder.append("\t\t\t\t\t");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
CharSequence _get = new TopMatter().get(swagger);
_builder.append(_get, "\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
CharSequence _xifexpression = null;
if (showPaths) {
_xifexpression = this.pathsHtml(swagger);
}
_builder.append(_xifexpression, "\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
CharSequence _xifexpression_1 = null;
if (showParams) {
_xifexpression_1 = this.parametersHtml(swagger);
}
_builder.append(_xifexpression_1, "\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
CharSequence _xifexpression_2 = null;
if (showResponses) {
_xifexpression_2 = this.responsesHtml(swagger);
}
_builder.append(_xifexpression_2, "\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t\t");
CharSequence _xifexpression_3 = null;
if (showDefs) {
_xifexpression_3 = this.definitionsHtml(swagger);
}
_builder.append(_xifexpression_3, "\t\t\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
_builder.append(" ");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append(" ");
_builder.newLine();
_builder.append("\t\t");
_builder.append(" ");
_builder.newLine();
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("");
_builder.newLine();
{
if (includeTOC) {
_builder.append("\t\t");
_builder.append("");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
String _inject_1 = this.htmlInjections.inject(HtmlInjections.BODY_BOTTOM);
_builder.append(_inject_1, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
final String html = _builder.toString();
_xblockexpression = this.removeUnwantedIndentation(html);
}
return _xblockexpression;
}
private CharSequence htmlHeadSection(final Swagger swagger, final String urlPrefix, final boolean preview) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append(" ");
String _inject = this.htmlInjections.inject(HtmlInjections.HEAD_TOP);
_builder.append(_inject, " ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("");
Info _info = null;
if (swagger!=null) {
_info=swagger.getInfo();
}
String _title = null;
if (_info!=null) {
_title=_info.getTitle();
}
_builder.append(_title, " ");
_builder.append(" Documentation ");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append("");
_builder.newLineIfNotEmpty();
{
if (preview) {
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
}
}
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
String _inject_1 = this.htmlInjections.inject(HtmlInjections.HEAD_BOTTOM);
_builder.append(_inject_1, " ");
_builder.newLineIfNotEmpty();
_builder.append("");
_builder.newLine();
return _builder;
}
private CharSequence pathsHtml(final Swagger swagger) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Path Specifications
");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Path Specifications
");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
{
List _elvis = null;
Map _paths = swagger.getPaths();
Set _keySet = null;
if (_paths!=null) {
_keySet=_paths.keySet();
}
List _sortByPosition = this.miscHelper.sortByPosition(_keySet, swagger.getPaths());
if (_sortByPosition != null) {
_elvis = _sortByPosition;
} else {
_elvis = Collections.unmodifiableList(CollectionLiterals.newArrayList());
}
for(final String path : _elvis) {
_builder.append(" ");
CharSequence _html = new PathDoc(path).getHtml();
_builder.append(_html, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.newLine();
_builder.append("");
_builder.newLine();
return _builder;
}
private CharSequence parametersHtml(final Swagger swagger) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Parameters
");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Parameters
");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
{
List _sortByPosition = this.miscHelper.sortByPosition(swagger.getParameters().keySet(), swagger.getParameters());
for(final String param : _sortByPosition) {
_builder.append(" ");
CharSequence _html = new ParamDoc(swagger, param).getHtml();
_builder.append(_html, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.newLine();
_builder.append("");
_builder.newLine();
return _builder;
}
private CharSequence responsesHtml(final Swagger swagger) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Responses
");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Responses
");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
{
List _sortByPosition = this.miscHelper.sortByPosition(swagger.getResponses().keySet(), swagger.getResponses());
for(final String response : _sortByPosition) {
_builder.append(" ");
CharSequence _html = new ResponseDoc(response).getHtml();
_builder.append(_html, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.newLine();
_builder.append("");
_builder.newLine();
return _builder;
}
private CharSequence definitionsHtml(final Swagger swagger) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Schema Definitions
");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Schema Definitions
");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
{
List _sortByPosition = this.miscHelper.sortByPosition(swagger.getDefinitions().keySet(), swagger.getDefinitions());
for(final String definition : _sortByPosition) {
_builder.append(" ");
CharSequence _html = new ModelDoc(definition).getHtml();
_builder.append(_html, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.append(" ");
_builder.append(" ");
_builder.newLine();
_builder.append("");
_builder.newLine();
return _builder;
}
private final Pattern indentedPreBlock = Pattern.compile("^(\\s*).*$",
(Pattern.CASE_INSENSITIVE + Pattern.DOTALL));
private String removeUnwantedIndentation(final String html) {
return this.removeUnwantedIndentation(((List)Conversions.doWrapArray(html.split("\n"))));
}
private String removeUnwantedIndentation(final List lines) {
String _xblockexpression = null;
{
int i = 0;
final ArrayList unindentedLines = Lists.newArrayList();
while ((i < lines.size())) {
{
String line = lines.get(i);
Matcher matcher = this.indentedPreBlock.matcher(line);
boolean _matches = matcher.matches();
if (_matches) {
String indentation = matcher.group(1);
int indentLen = matcher.end(1);
while (((i < lines.size()) && line.startsWith(indentation))) {
{
unindentedLines.add(line.substring(indentLen));
i = (i + 1);
String _xifexpression = null;
int _size = lines.size();
boolean _lessThan = (i < _size);
if (_lessThan) {
_xifexpression = lines.get(i);
} else {
_xifexpression = "";
}
line = _xifexpression;
}
}
} else {
unindentedLines.add(lines.get(i));
i = (i + 1);
}
}
}
_xblockexpression = IterableExtensions.join(unindentedLines, "\n");
}
return _xblockexpression;
}
}
");
_builder.newLine();
_builder.append("\t\t");
_builder.append("
© 2015 - 2025 Weber Informatics LLC | Privacy Policy