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

com.reprezen.genflow.openapi3.doc.XGenerateOpenApi3Doc Maven / Gradle / Ivy

package com.reprezen.genflow.openapi3.doc;

import com.google.common.collect.Lists;
import com.reprezen.genflow.api.openapi3.OpenApi3OutputItem;
import com.reprezen.genflow.common.HtmlInjections;
import com.reprezen.genflow.openapi3.doc.HelperHelper;
import com.reprezen.genflow.openapi3.doc.HtmlHelper;
import com.reprezen.genflow.openapi3.doc.MiscHelper;
import com.reprezen.genflow.openapi3.doc.ModelDoc;
import com.reprezen.genflow.openapi3.doc.OptionHelper;
import com.reprezen.genflow.openapi3.doc.ParamDoc;
import com.reprezen.genflow.openapi3.doc.PathDoc;
import com.reprezen.genflow.openapi3.doc.ResponseDoc;
import com.reprezen.genflow.openapi3.doc.TopMatter;
import com.reprezen.kaizen.oasparser.model3.Info;
import com.reprezen.kaizen.oasparser.model3.OpenApi3;
import com.reprezen.kaizen.oasparser.model3.Parameter;
import com.reprezen.kaizen.oasparser.model3.Path;
import com.reprezen.kaizen.oasparser.model3.Response;
import com.reprezen.kaizen.oasparser.model3.Schema;
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 XGenerateOpenApi3Doc extends OpenApi3OutputItem {
  @Extension
  private OptionHelper optionHelper;
  
  @Extension
  private HtmlHelper htmlHelper;
  
  @Extension
  private MiscHelper miscHelper;
  
  @Extension
  private HtmlInjections htmlInjections;
  
  @Override
  public String generate(final OpenApi3 model) {
    try {
      String _xtrycatchfinallyexpression = null;
      try {
        String _xblockexpression = null;
        {
          HelperHelper.open(model, this.context);
          OptionHelper _optionHelper = HelperHelper.getOptionHelper();
          this.optionHelper = _optionHelper;
          HtmlHelper _htmlHelper = HelperHelper.getHtmlHelper();
          this.htmlHelper = _htmlHelper;
          MiscHelper _miscHelper = HelperHelper.getMiscHelper();
          this.miscHelper = _miscHelper;
          HtmlInjections _elvis = null;
          Map _genTargetParameters = this.context.getGenTargetParameters();
          Object _get = _genTargetParameters.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(model);
        }
        _xtrycatchfinallyexpression = _xblockexpression;
      } finally {
        HelperHelper.close();
      }
      return _xtrycatchfinallyexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
  
  public String doGenerate(final OpenApi3 model) {
    String _xblockexpression = null;
    {
      final String urlPrefix = this.optionHelper.getUrlPrefix();
      final Boolean preview = this.optionHelper.isPreview();
      final long startTime = System.nanoTime();
      Map _paths = model.getPaths();
      boolean _isEmpty = _paths.isEmpty();
      final boolean showPaths = (!_isEmpty);
      boolean _and = false;
      if (!((!(preview).booleanValue()) || (!showPaths))) {
        _and = false;
      } else {
        Map _schemas = model.getSchemas();
        boolean _isEmpty_1 = _schemas.isEmpty();
        boolean _not = (!_isEmpty_1);
        _and = _not;
      }
      final boolean showDefs = _and;
      boolean _and_1 = false;
      if (!((!(preview).booleanValue()) || (!showPaths))) {
        _and_1 = false;
      } else {
        Map _parameters = model.getParameters();
        boolean _isEmpty_2 = _parameters.isEmpty();
        boolean _not_1 = (!_isEmpty_2);
        _and_1 = _not_1;
      }
      final boolean showParams = _and_1;
      boolean _and_2 = false;
      if (!((!(preview).booleanValue()) || (!showPaths))) {
        _and_2 = false;
      } else {
        Map _responses = model.getResponses();
        boolean _isEmpty_3 = _responses.isEmpty();
        boolean _not_2 = (!_isEmpty_3);
        _and_2 = _not_2;
      }
      final boolean showResponses = _and_2;
      boolean _and_3 = false;
      if (!(!(preview).booleanValue())) {
        _and_3 = false;
      } else {
        Boolean _isIncludeTOC = this.optionHelper.isIncludeTOC();
        _and_3 = (_isIncludeTOC).booleanValue();
      }
      final boolean includeTOC = _and_3;
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("");
      _builder.newLine();
      _builder.append("");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("");
      _builder.newLineIfNotEmpty();
      _builder.append("    ");
      CharSequence _htmlHeadSection = this.htmlHeadSection(model, urlPrefix, (preview).booleanValue());
      _builder.append(_htmlHeadSection, "    ");
      _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.newLine(); _builder.append(" "); _builder.append("
  • Created with
  • "); _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.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); { if (includeTOC) { _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); } } _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("

OpenApi3 Specification

"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); TopMatter _topMatter = new TopMatter(); CharSequence _get = _topMatter.get(model); _builder.append(_get, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _xifexpression = null; if (showPaths) { _xifexpression = this.pathsHtml(model); } _builder.append(_xifexpression, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _xifexpression_1 = null; if (showParams) { _xifexpression_1 = this.parametersHtml(model); } _builder.append(_xifexpression_1, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _xifexpression_2 = null; if (showResponses) { _xifexpression_2 = this.responsesHtml(model); } _builder.append(_xifexpression_2, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _xifexpression_3 = null; if (showDefs) { _xifexpression_3 = this.definitionsHtml(model); } _builder.append(_xifexpression_3, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); { if ((preview).booleanValue()) { _builder.append(" "); String _inject = this.htmlInjections.inject(HtmlInjections.BODY_BOTTOM); _builder.append(_inject, " "); _builder.newLineIfNotEmpty(); } } { if (includeTOC) { _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); final String html = _builder.toString(); _xblockexpression = this.removeUnwantedIndentation(html); } return _xblockexpression; } private String elapsedTime(final long nano) { String _xblockexpression = null; { final long msec = (nano / 1000000); _xblockexpression = String.format("%d.%03d", Long.valueOf((msec / 1000)), Long.valueOf((msec % 1000))); } return _xblockexpression; } private CharSequence htmlHeadSection(final OpenApi3 model, final String urlPrefix, final boolean preview) { StringConcatenation _builder = new StringConcatenation(); _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.newLine(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(" "); _builder.append(""); Info _info = null; if (model!=null) { _info=model.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(); { if (preview) { String _inject = this.htmlInjections.inject(HtmlInjections.HEAD_BOTTOM); _builder.append(_inject, ""); _builder.newLineIfNotEmpty(); } } _builder.append(""); _builder.newLine(); return _builder; } private CharSequence pathsHtml(final OpenApi3 model) { 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 = model.getPaths(); Set _keySet = null; if (_paths!=null) { _keySet=_paths.keySet(); } Map _paths_1 = model.getPaths(); List _sortByPosition = this.miscHelper.sortByPosition(_keySet, _paths_1); if (_sortByPosition != null) { _elvis = _sortByPosition; } else { _elvis = Collections.unmodifiableList(CollectionLiterals.newArrayList()); } for(final String path : _elvis) { _builder.append(" "); PathDoc _pathDoc = new PathDoc(path); CharSequence _html = _pathDoc.getHtml(); _builder.append(_html, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append("
"); _builder.newLine(); return _builder; } private CharSequence parametersHtml(final OpenApi3 model) { 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(); { Map _parameters = model.getParameters(); Set _keySet = _parameters.keySet(); Map _parameters_1 = model.getParameters(); List _sortByPosition = this.miscHelper.sortByPosition(_keySet, _parameters_1); for(final String param : _sortByPosition) { _builder.append(" "); ParamDoc _paramDoc = new ParamDoc(model, param); CharSequence _html = _paramDoc.getHtml(); _builder.append(_html, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append("
"); _builder.newLine(); return _builder; } private CharSequence responsesHtml(final OpenApi3 model) { 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("
\t\t\t "); _builder.newLine(); { Map _responses = model.getResponses(); Set _keySet = _responses.keySet(); Map _responses_1 = model.getResponses(); List _sortByPosition = this.miscHelper.sortByPosition(_keySet, _responses_1); for(final String response : _sortByPosition) { _builder.append(" "); ResponseDoc _responseDoc = new ResponseDoc(response); CharSequence _html = _responseDoc.getHtml(); _builder.append(_html, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append("
"); _builder.newLine(); return _builder; } private CharSequence definitionsHtml(final OpenApi3 model) { 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(); { Map _schemas = model.getSchemas(); Set _keySet = _schemas.keySet(); Map _schemas_1 = model.getSchemas(); List _sortByPosition = this.miscHelper.sortByPosition(_keySet, _schemas_1); for(final String definition : _sortByPosition) { _builder.append(" "); ModelDoc _modelDoc = new ModelDoc(definition); CharSequence _html = _modelDoc.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*)]*class=\"remove-xtend-indent\"[^>]*>.*$", (Pattern.CASE_INSENSITIVE + Pattern.DOTALL)); private String removeUnwantedIndentation(final String html) { String[] _split = html.split("\n"); return this.removeUnwantedIndentation(((List)Conversions.doWrapArray(_split))); } 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))) { { String _substring = line.substring(indentLen); unindentedLines.add(_substring); 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 { String _get = lines.get(i); unindentedLines.add(_get); i = (i + 1); } } } _xblockexpression = IterableExtensions.join(unindentedLines, "\n"); } return _xblockexpression; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy