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

com.reprezen.genflow.rapidml.doc.xtend.XGenerateInterfaces 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.rapidml.doc.xtend;

import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.reprezen.genflow.api.zenmodel.util.CommonServices;
import com.reprezen.genflow.common.doc.XDocHelper;
import com.reprezen.genflow.common.services.DocServices;
import com.reprezen.genflow.common.xtend.XDataTypeExtensions;
import com.reprezen.genflow.common.xtend.XImportHelper;
import com.reprezen.genflow.common.xtend.XParameterHelper;
import com.reprezen.rapidml.AuthenticationMethod;
import com.reprezen.rapidml.CollectionRealizationEnum;
import com.reprezen.rapidml.CollectionResource;
import com.reprezen.rapidml.Enumeration;
import com.reprezen.rapidml.Feature;
import com.reprezen.rapidml.HTTPMethods;
import com.reprezen.rapidml.HasSecurityValue;
import com.reprezen.rapidml.MediaType;
import com.reprezen.rapidml.Method;
import com.reprezen.rapidml.NamedLinkDescriptor;
import com.reprezen.rapidml.ObjectRealization;
import com.reprezen.rapidml.Parameter;
import com.reprezen.rapidml.PrimitiveProperty;
import com.reprezen.rapidml.PropertyRealization;
import com.reprezen.rapidml.RealizationContainer;
import com.reprezen.rapidml.ReferenceElement;
import com.reprezen.rapidml.ReferenceEmbed;
import com.reprezen.rapidml.ReferenceLink;
import com.reprezen.rapidml.ReferenceProperty;
import com.reprezen.rapidml.ReferenceTreatment;
import com.reprezen.rapidml.ResourceAPI;
import com.reprezen.rapidml.ResourceDefinition;
import com.reprezen.rapidml.SecurityScope;
import com.reprezen.rapidml.ServiceDataResource;
import com.reprezen.rapidml.SingleValueType;
import com.reprezen.rapidml.Structure;
import com.reprezen.rapidml.TypedMessage;
import com.reprezen.rapidml.TypedRequest;
import com.reprezen.rapidml.TypedResponse;
import com.reprezen.rapidml.URI;
import com.reprezen.rapidml.UserDefinedType;
import com.reprezen.rapidml.ZenModel;
import com.reprezen.rapidml.realization.processor.CycleDetector;
import com.reprezen.rapidml.util.InheritanceUtils;
import com.reprezen.rapidml.util.TagUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;

@SuppressWarnings("all")
public class XGenerateInterfaces {
  @Extension
  private XDocHelper docHelper;
  
  private final XParameterHelper parameterHelper = new XParameterHelper();
  
  private final DocServices docServices = new DocServices();
  
  private final CommonServices commonServices = new CommonServices();
  
  private final XImportHelper importHelper;
  
  private boolean isLiveView = false;
  
  public XGenerateInterfaces(final XImportHelper importHelper, final XDocHelper docHelper) {
    this.importHelper = importHelper;
    this.docHelper = docHelper;
  }
  
  public CharSequence generateInterfaces(final ZenModel zenModel) {
    StringConcatenation _builder = new StringConcatenation();
    {
      EList _resourceAPIs = zenModel.getResourceAPIs();
      for(final ResourceAPI iface : _resourceAPIs) {
        CharSequence _generateInterface = this.generateInterface(iface, zenModel);
        _builder.append(_generateInterface);
        _builder.newLineIfNotEmpty();
      }
    }
    return _builder;
  }
  
  private CharSequence generateInterface(final ResourceAPI resourceAPI, final ZenModel zenModel) {
    CharSequence _xblockexpression = null;
    {
      final String alias = this.importHelper.getAlias(resourceAPI);
      String _xifexpression = null;
      if ((alias != null)) {
        StringConcatenation _builder = new StringConcatenation();
        _builder.append(" ");
        _builder.append("[as ");
        _builder.append(alias, " ");
        _builder.append("]");
        _xifexpression = _builder.toString();
      }
      final String aliasNote = _xifexpression;
      StringConcatenation _builder_1 = new StringConcatenation();
      _builder_1.append("");
      _builder_1.newLine();
      _builder_1.append("
"); _builder_1.newLineIfNotEmpty(); _builder_1.append(" "); _builder_1.append("
"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("

"); String _nameOrTitle = this.docHelper.nameOrTitle(resourceAPI); _builder_1.append(_nameOrTitle, " "); _builder_1.append(" ("); String _baseURI = resourceAPI.getBaseURI(); _builder_1.append(_baseURI, " "); _builder_1.append(")

"); _builder_1.newLineIfNotEmpty(); _builder_1.append(" "); _builder_1.append("

"); String _modelFullQualifiedName = this.importHelper.getModelFullQualifiedName(resourceAPI); _builder_1.append(_modelFullQualifiedName, " "); _builder_1.append(aliasNote, " "); _builder_1.append("

"); _builder_1.newLineIfNotEmpty(); _builder_1.append(" "); _builder_1.append("
"); _builder_1.newLine(); _builder_1.append(" "); _builder_1.append("
"); _builder_1.newLine(); _builder_1.append(" "); CharSequence _generateDocItem = this.docHelper.generateDocItem(resourceAPI); _builder_1.append(_generateDocItem, " "); _builder_1.newLineIfNotEmpty(); _builder_1.append(" "); CharSequence _generateSecuritySchemeUsage = this.generateSecuritySchemeUsage(resourceAPI); _builder_1.append(_generateSecuritySchemeUsage, " "); _builder_1.newLineIfNotEmpty(); { EList _ownedResourceDefinitions = resourceAPI.getOwnedResourceDefinitions(); for(final ResourceDefinition resource : _ownedResourceDefinitions) { _builder_1.append(" "); CharSequence _generateResource = this.generateResource(((ServiceDataResource) resource)); _builder_1.append(_generateResource, " "); _builder_1.newLineIfNotEmpty(); } } _builder_1.append(" "); _builder_1.append("
"); _builder_1.newLine(); _builder_1.append("
"); _builder_1.newLine(); _xblockexpression = _builder_1; } return _xblockexpression; } private CharSequence generateResource(final ServiceDataResource resource) { StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("

"); _builder.newLine(); { if ((resource instanceof CollectionResource)) { _builder.append(" "); _builder.append(""); _builder.newLine(); } else { _builder.append(" "); _builder.append(""); _builder.newLine(); } } _builder.append(" "); String _name_1 = resource.getName(); _builder.append(_name_1, " "); _builder.append(" "); URI _uRI = resource.getURI(); _builder.append(_uRI, " "); _builder.append(" "); _builder.newLineIfNotEmpty(); { Structure _dataType = resource.getDataType(); boolean _tripleNotEquals = (_dataType != null); if (_tripleNotEquals) { _builder.append(" "); _builder.append(" "); String _qualifiedName = this.importHelper.getQualifiedName(resource.getDataType()); _builder.append(_qualifiedName, " "); _builder.append(""); _builder.newLineIfNotEmpty(); } } { boolean _isDefault = resource.isDefault(); if (_isDefault) { _builder.append(" "); _builder.append("Default"); _builder.newLine(); } } _builder.append(" "); _builder.append("

"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); CharSequence _generateDocItem = this.docHelper.generateDocItem(resource); _builder.append(_generateDocItem, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("

Resource Properties

"); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); CharSequence _generateMediaTypes = this.generateMediaTypes(resource.getMediaTypes()); _builder.append(_generateMediaTypes, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _generateLinkDescriptors = this.generateLinkDescriptors(resource); _builder.append(_generateLinkDescriptors, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append(" "); CharSequence _generateSecuritySchemeUsage = this.generateSecuritySchemeUsage(resource); _builder.append(_generateSecuritySchemeUsage, " "); _builder.newLineIfNotEmpty(); _builder.newLine(); { if (((resource.getURI() != null) && (!resource.getURI().getUriParameters().isEmpty()))) { _builder.append(" "); _builder.append("

Parameters

"); _builder.newLine(); _builder.append(" "); CharSequence _generateParams = this.generateParams(resource.getURI().getUriParameters()); _builder.append(_generateParams, " "); _builder.newLineIfNotEmpty(); } } _builder.newLine(); { if ((resource instanceof CollectionResource)) { _builder.append(" "); _builder.newLine(); { boolean _isEmpty = ((CollectionResource) resource).getCollectionParameters().isEmpty(); boolean _not = (!_isEmpty); if (_not) { _builder.append(" "); _builder.append(" "); _builder.append("

Collection Parameters

"); _builder.newLine(); _builder.append(" "); _builder.append(" "); CharSequence _generateParams_1 = this.generateParams(((CollectionResource) resource).getCollectionParameters()); _builder.append(_generateParams_1, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append(" "); _builder.newLine(); { CollectionRealizationEnum _resourceRealizationKind = ((CollectionResource) resource).getResourceRealizationKind(); boolean _equals = Objects.equal(_resourceRealizationKind, CollectionRealizationEnum.REFERENCE_LINK_LIST); if (_equals) { _builder.append(" "); _builder.append(" "); _builder.append("

Data Properties

"); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLine(); { NamedLinkDescriptor _defaultLinkDescriptor = defResource.getDefaultLinkDescriptor(); boolean _tripleNotEquals_1 = (_defaultLinkDescriptor != null); if (_tripleNotEquals_1) { { final Function1 _function = (PropertyRealization it) -> { return it.getBaseProperty(); }; List _map = ListExtensions.map(defResource.getDefaultLinkDescriptor().getAllIncludedProperties(), _function); for(final Feature feature : _map) { _builder.append(" "); _builder.append(" "); _builder.append(" "); CharSequence _generateReferenceTreatmentPropertyRow = this.generateReferenceTreatmentPropertyRow(feature, Integer.valueOf(1), false); _builder.append(_generateReferenceTreatmentPropertyRow, " "); _builder.newLineIfNotEmpty(); } } } } _builder.append(" "); _builder.append(" "); _builder.append("
"); String _name_2 = ((CollectionResource)resource).getDataType().getName(); _builder.append(_name_2, " "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(" "); ResourceDefinition _targetResource = ((CollectionResource)resource).getReferenceLinks().get(0).getTargetResource(); final ServiceDataResource defResource = ((ServiceDataResource) _targetResource); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append(""); String _name_3 = defResource.getName(); _builder.append(_name_3, " "); _builder.append("*"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(" "); _builder.append("
"); _builder.newLine(); } else { _builder.append(" "); _builder.append(" "); CharSequence _generateResourceDataType = this.generateResourceDataType(resource); _builder.append(_generateResourceDataType, " "); _builder.newLineIfNotEmpty(); } } } else { _builder.append(" "); CharSequence _generateResourceDataType_1 = this.generateResourceDataType(resource); _builder.append(_generateResourceDataType_1, " "); _builder.newLineIfNotEmpty(); } } _builder.newLine(); { EList _methods = resource.getMethods(); for(final Method method : _methods) { _builder.append(" "); CharSequence _generateMethod = this.generateMethod(method); _builder.append(_generateMethod, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append("
"); _builder.newLine(); _builder.append("
"); _builder.newLine(); return _builder; } private CharSequence generateLinkDescriptors(final ServiceDataResource resource) { StringConcatenation _builder = new StringConcatenation(); { boolean _isEmpty = resource.getDefinedLinkDescriptors().isEmpty(); boolean _not = (!_isEmpty); if (_not) { _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append("Link Descriptors"); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); { EList _definedLinkDescriptors = resource.getDefinedLinkDescriptors(); boolean _hasElements = false; for(final NamedLinkDescriptor link : _definedLinkDescriptors) { if (!_hasElements) { _hasElements = true; } else { _builder.appendImmediate("
", " "); } _builder.append(" "); String _name = link.getName(); _builder.append(_name, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("\t\t\t\t\t "); _builder.append("("); { final Function1 _function = (PropertyRealization it) -> { return it.getBaseProperty(); }; List _map = ListExtensions.map(link.getAllIncludedProperties(), _function); boolean _hasElements_1 = false; for(final Feature feature : _map) { if (!_hasElements_1) { _hasElements_1 = true; } else { _builder.appendImmediate(", ", " \t\t\t\t\t "); } _builder.append(""); String _name_1 = feature.getName(); _builder.append(_name_1, " \t\t\t\t\t "); _builder.append(""); } } _builder.append(")"); _builder.newLineIfNotEmpty(); { boolean _isDefault = link.isDefault(); if (_isDefault) { _builder.append(" "); _builder.append("\t\t\t\t\t "); _builder.append("Default"); _builder.newLine(); } } } } _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(""); _builder.newLine(); } } return _builder; } private CharSequence generateParams(final List params) { 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.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); { for(final Parameter param : params) { _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); } } _builder.append("
NameDocumentationDefaultPropertyType
"); _builder.newLine(); _builder.append(" "); _builder.append(" "); String _name = param.getName(); _builder.append(_name, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); { boolean _isRequired = param.isRequired(); boolean _not = (!_isRequired); if (_not) { _builder.append("(optional)"); } } _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(" "); _builder.append(""); String _generateDoc = null; if (param!=null) { _generateDoc=this.docHelper.generateDoc(param); } _builder.append(_generateDoc, " "); _builder.append(""); String _default = param.getDefault(); _builder.append(_default, " "); _builder.append(""); String _paramName = this.parameterHelper.paramName(param.getSourceReference()); _builder.append(_paramName, " "); _builder.append(""); String _paramType = this.parameterHelper.paramType(param.getSourceReference(), this.importHelper); _builder.append(_paramType, " "); _builder.append("
"); _builder.newLine(); return _builder; } private CharSequence generateRealizationTemplateDetails(final RealizationContainer resource) { CharSequence _xblockexpression = null; { if ((!this.isLiveView)) { StringConcatenation _builder = new StringConcatenation(); return _builder.toString(); } final Optional templateNameTag = TagUtils.getTagWithName(resource, TagUtils.REALIZATION_TEMPLATE_NAME); boolean _isWithDefaultRealization = resource.isWithDefaultRealization(); final boolean isInline = (!_isWithDefaultRealization); String _xifexpression = null; if (isInline) { _xifexpression = "(inline)"; } else { String _realizationName = resource.getRealizationName(); String _xifexpression_1 = null; if ((resource instanceof CollectionResource)) { _xifexpression_1 = " [*]"; } else { _xifexpression_1 = ""; } _xifexpression = (_realizationName + _xifexpression_1); } final String realizationName = _xifexpression; StringConcatenation _builder_1 = new StringConcatenation(); { boolean _isPresent = templateNameTag.isPresent(); if (_isPresent) { _builder_1.append("Realization: "); _builder_1.append(realizationName); _builder_1.newLineIfNotEmpty(); { if ((!isInline)) { _builder_1.append(""); _builder_1.newLineIfNotEmpty(); _builder_1.append("\t"); _builder_1.append(""); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append(""); _builder_1.newLine(); _builder_1.append(""); _builder_1.newLine(); _builder_1.append("
"); _builder_1.newLineIfNotEmpty(); _builder_1.append("\t"); _builder_1.append(""); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append(""); _builder_1.newLineIfNotEmpty(); _builder_1.append("\t\t"); _builder_1.append(""); _builder_1.newLineIfNotEmpty(); _builder_1.append("\t\t"); _builder_1.append(""); _builder_1.newLineIfNotEmpty(); _builder_1.append("\t"); _builder_1.append("
Realization Name"); _builder_1.append(realizationName, "\t\t"); _builder_1.append("
Realization Template"); String _value = templateNameTag.get().getValue(); _builder_1.append(_value, "\t\t"); _builder_1.append("
Data Structure"); String _name = resource.getActualType().getName(); _builder_1.append(_name, "\t\t"); _builder_1.append("
"); _builder_1.newLine(); _builder_1.append("
"); _builder_1.newLine(); } } } } _xblockexpression = _builder_1; } return _xblockexpression; } private CharSequence generateResourceDataType(final ServiceDataResource resource, final String headerMessage) { StringConcatenation _builder = new StringConcatenation(); _builder.append("

Data Properties

"); _builder.newLine(); CharSequence _generateRealizationTemplateDetails = this.generateRealizationTemplateDetails(resource); _builder.append(_generateRealizationTemplateDetails); _builder.newLineIfNotEmpty(); _builder.append(headerMessage); _builder.newLineIfNotEmpty(); _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.newLine(); { final Function1 _function = (Feature e) -> { boolean _hasReferenceTreatment = this.hasReferenceTreatment(resource, e); return Boolean.valueOf((!_hasReferenceTreatment)); }; Iterable _filter = IterableExtensions.filter(resource.getDataType().getOwnedFeatures(), _function); for(final Feature aFeature : _filter) { { boolean _isIncluded = resource.isIncluded(aFeature); if (_isIncluded) { CharSequence _generateIncludedPropertyRow = this.generateIncludedPropertyRow(this.getIncludedProperty(resource, aFeature)); _builder.append(_generateIncludedPropertyRow); _builder.newLineIfNotEmpty(); } } } } CharSequence _generateReferenceTreatments = this.generateReferenceTreatments(resource); _builder.append(_generateReferenceTreatments); _builder.newLineIfNotEmpty(); _builder.append("
NameTypeDocumentation
"); _builder.newLine(); return _builder; } private CharSequence generateResourceDataType(final ServiceDataResource resource) { return this.generateResourceDataType(resource, ""); } private CharSequence generateMessageName(final TypedMessage message) { StringConcatenation _builder = new StringConcatenation(); { ResourceDefinition _resourceType = message.getResourceType(); boolean _tripleNotEquals = (_resourceType != null); if (_tripleNotEquals) { _builder.append(""); _builder.newLine(); _builder.append(""); String _name = message.getResourceType().getName(); _builder.append(_name); _builder.append(""); _builder.newLineIfNotEmpty(); } else { Structure _actualType = message.getActualType(); boolean _tripleNotEquals_1 = (_actualType != null); if (_tripleNotEquals_1) { _builder.append(""); _builder.newLine(); _builder.append(""); String _name_1 = message.getActualType().getName(); _builder.append(_name_1); _builder.append(""); _builder.newLineIfNotEmpty(); } } } return _builder; } private CharSequence generateMessageDataType(final TypedMessage message) { StringConcatenation _builder = new StringConcatenation(); { if (((!message.getReferenceTreatments().isEmpty()) || (!IterableExtensions.isEmpty(IterableExtensions.filter(message.getActualType().getOwnedFeatures(), ((Function1) (Feature e) -> { return Boolean.valueOf(((!this.hasReferenceTreatment(message, e)) && message.isIncluded(e))); })))))) { _builder.append("

Data Properties

"); _builder.newLine(); CharSequence _generateRealizationTemplateDetails = this.generateRealizationTemplateDetails(message); _builder.append(_generateRealizationTemplateDetails); _builder.newLineIfNotEmpty(); _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.newLine(); { final Function1 _function = (Feature e) -> { boolean _hasReferenceTreatment = this.hasReferenceTreatment(message, e); return Boolean.valueOf((!_hasReferenceTreatment)); }; Iterable _filter = IterableExtensions.filter(message.getActualType().getOwnedFeatures(), _function); for(final Feature aFeature : _filter) { { boolean _isIncluded = message.isIncluded(aFeature); if (_isIncluded) { CharSequence _generateIncludedPropertyRow = this.generateIncludedPropertyRow(this.getIncludedProperty(message, aFeature)); _builder.append(_generateIncludedPropertyRow); _builder.newLineIfNotEmpty(); } } } } CharSequence _generateReferenceTreatments = this.generateReferenceTreatments(message); _builder.append(_generateReferenceTreatments); _builder.newLineIfNotEmpty(); _builder.append("
NameTypeDocumentation
"); _builder.newLine(); } } return _builder; } private CharSequence generateMethod(final Method method) { StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); HTTPMethods _httpMethod = method.getHttpMethod(); _builder.append(_httpMethod); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); String _id = method.getId(); _builder.append(_id); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.newLine(); CharSequence _generateDocItem = this.docHelper.generateDocItem(method); _builder.append(_generateDocItem); _builder.newLineIfNotEmpty(); _builder.newLine(); CharSequence _generateSecuritySchemeUsage = this.generateSecuritySchemeUsage(method); _builder.append(_generateSecuritySchemeUsage); _builder.newLineIfNotEmpty(); _builder.newLine(); { if (((method.getRequest() != null) || (!method.getResponses().isEmpty()))) { _builder.append("
    "); } } _builder.newLineIfNotEmpty(); { TypedRequest _request = method.getRequest(); boolean _tripleNotEquals = (_request != null); if (_tripleNotEquals) { CharSequence _generateRequest = this.generateRequest(method.getRequest()); _builder.append(_generateRequest); _builder.newLineIfNotEmpty(); } } { boolean _isEmpty = method.getResponses().isEmpty(); boolean _not = (!_isEmpty); if (_not) { { EList _responses = method.getResponses(); for(final TypedResponse response : _responses) { CharSequence _generateResponse = this.generateResponse(response); _builder.append(_generateResponse); _builder.newLineIfNotEmpty(); } } } } { if (((method.getRequest() != null) || (!method.getResponses().isEmpty()))) { _builder.append("
"); } } _builder.newLineIfNotEmpty(); return _builder; } private CharSequence generateRequest(final TypedRequest request) { CharSequence _xblockexpression = null; { String id = this.docServices.randomId(); StringConcatenation _builder = new StringConcatenation(); { if ((request != null)) { _builder.append("
  • "); _builder.newLine(); _builder.append("Request "); CharSequence _generateMessageName = this.generateMessageName(request); _builder.append(_generateMessageName); _builder.newLineIfNotEmpty(); { boolean _hasOverridedMediaTypes = this.hasOverridedMediaTypes(request); if (_hasOverridedMediaTypes) { _builder.append("

    Properties

    "); _builder.newLine(); _builder.append(""); _builder.newLine(); CharSequence _generateMediaTypes = this.generateMediaTypes(request.getMediaTypes()); _builder.append(_generateMediaTypes); _builder.newLineIfNotEmpty(); _builder.append("
    "); _builder.newLine(); } } { boolean _showMessageDataType = this.showMessageDataType(request); if (_showMessageDataType) { CharSequence _generateMessageDataType = this.generateMessageDataType(request); _builder.append(_generateMessageDataType); _builder.newLineIfNotEmpty(); } } CharSequence _generateDocItem = this.docHelper.generateDocItem(request); _builder.append(_generateDocItem); _builder.newLineIfNotEmpty(); { boolean _isEmpty = request.getParameters().isEmpty(); boolean _not = (!_isEmpty); if (_not) { _builder.append("
    "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("Parameters"); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append("
    "); _builder.newLine(); _builder.append("
    "); _builder.newLineIfNotEmpty(); _builder.append(" "); CharSequence _generateParams = this.generateParams(request.getParameters()); _builder.append(_generateParams, " "); _builder.newLineIfNotEmpty(); _builder.append("
    "); _builder.newLine(); } } _builder.append("
  • "); _builder.newLine(); } } _xblockexpression = _builder; } return _xblockexpression; } private CharSequence generateResponse(final TypedResponse response) { StringConcatenation _builder = new StringConcatenation(); _builder.append(" "); _builder.append("
  • "); _builder.newLine(); _builder.append(" "); _builder.append("Response "); CharSequence _generateMessageName = this.generateMessageName(response); _builder.append(_generateMessageName, " "); _builder.newLineIfNotEmpty(); { int _statusCode = response.getStatusCode(); boolean _greaterThan = (_statusCode > 0); if (_greaterThan) { _builder.append(""); int _statusCode_1 = response.getStatusCode(); _builder.append(_statusCode_1); _builder.append(""); _builder.newLineIfNotEmpty(); } } { boolean _hasOverridedMediaTypes = this.hasOverridedMediaTypes(response); if (_hasOverridedMediaTypes) { _builder.append("

    Properties

    "); _builder.newLine(); _builder.append(""); _builder.newLine(); CharSequence _generateMediaTypes = this.generateMediaTypes(response.getMediaTypes()); _builder.append(_generateMediaTypes); _builder.newLineIfNotEmpty(); _builder.append("
    "); _builder.newLine(); } } { boolean _showMessageDataType = this.showMessageDataType(response); if (_showMessageDataType) { CharSequence _generateMessageDataType = this.generateMessageDataType(response); _builder.append(_generateMessageDataType); _builder.newLineIfNotEmpty(); } } _builder.append(" "); CharSequence _generateDocItem = this.docHelper.generateDocItem(response); _builder.append(_generateDocItem, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("
  • "); _builder.newLine(); return _builder; } private boolean showMessageDataType(final TypedMessage message) { return ((message.getActualType() != null) && (message.getResourceType() == null)); } private CharSequence generateIncludedPropertyRow(final PropertyRealization includedProperty) { StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); String _name = includedProperty.getBaseProperty().getName(); _builder.append(_name, " "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); { Feature _baseProperty = includedProperty.getBaseProperty(); if ((_baseProperty instanceof ReferenceProperty)) { _builder.append(" "); _builder.append(""); CharSequence _generateIncludedPropertyType = this.generateIncludedPropertyType(includedProperty); _builder.append(_generateIncludedPropertyType, " "); _builder.append(""); _builder.newLineIfNotEmpty(); } else { _builder.append(" "); Feature _baseProperty_2 = includedProperty.getBaseProperty(); final SingleValueType type = ((PrimitiveProperty) _baseProperty_2).getType(); _builder.newLineIfNotEmpty(); { if (((type instanceof Enumeration) || (type instanceof UserDefinedType))) { _builder.append(" "); _builder.append(""); CharSequence _generateIncludedPropertyType_1 = this.generateIncludedPropertyType(includedProperty); _builder.append(_generateIncludedPropertyType_1, " "); _builder.append(""); _builder.newLineIfNotEmpty(); } else { _builder.append(" "); CharSequence _generateIncludedPropertyType_2 = this.generateIncludedPropertyType(includedProperty); _builder.append(_generateIncludedPropertyType_2, " "); _builder.newLineIfNotEmpty(); } } } } _builder.append(" "); CharSequence _generateInlineConstraints = this.docHelper.generateInlineConstraints(includedProperty.getAllConstraints()); _builder.append(_generateInlineConstraints, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); Feature _baseProperty_3 = includedProperty.getBaseProperty(); String _generateDoc = null; if (_baseProperty_3!=null) { _generateDoc=this.docHelper.generateDoc(_baseProperty_3); } _builder.append(_generateDoc, " "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); return _builder; } private CharSequence generateMediaTypes(final List mediaTypes) { StringConcatenation _builder = new StringConcatenation(); { boolean _isEmpty = mediaTypes.isEmpty(); boolean _not = (!_isEmpty); if (_not) { _builder.append(""); _builder.newLine(); _builder.append("\t"); _builder.append("Media Types"); _builder.newLine(); _builder.append("\t"); _builder.append(""); _builder.newLine(); _builder.append("\t"); { boolean _hasElements = false; for(final MediaType mediaType : mediaTypes) { if (!_hasElements) { _hasElements = true; } else { _builder.appendImmediate(", ", "\t"); } _builder.append(""); String _name = mediaType.getName(); _builder.append(_name, "\t"); _builder.append(""); } } _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append(""); _builder.newLine(); _builder.append(""); _builder.newLine(); } } return _builder; } private boolean hasOverridedMediaTypes(final TypedMessage message) { boolean _isEmpty = message.getMediaTypes().isEmpty(); boolean _not = (!_isEmpty); if (_not) { EObject _eContainer = message.eContainer(); boolean _elementsEqual = IterableExtensions.elementsEqual(message.getMediaTypes(), ((Method) _eContainer).getContainingResourceDefinition().getMediaTypes()); return (!_elementsEqual); } return false; } private boolean hasReferenceTreatment(final ServiceDataResource resource, final Feature feature) { final Function1 _function = (ReferenceTreatment it) -> { return it.getReferenceElement(); }; final Function1 _function_1 = (ReferenceElement f) -> { return Boolean.valueOf((f == feature)); }; return IterableExtensions.exists(ListExtensions.map(resource.getReferenceTreatments(), _function), _function_1); } private boolean hasReferenceTreatment(final TypedMessage message, final Feature feature) { final Function1 _function = (ReferenceTreatment it) -> { return it.getReferenceElement(); }; final Function1 _function_1 = (ReferenceElement f) -> { return Boolean.valueOf((f == feature)); }; return IterableExtensions.exists(ListExtensions.map(message.getReferenceTreatments(), _function), _function_1); } private PropertyRealization getIncludedProperty(final ServiceDataResource resource, final Feature feature) { return this.getIncludedProperty(resource.getProperties(), feature); } private PropertyRealization getIncludedProperty(final TypedMessage message, final Feature feature) { return this.getIncludedProperty(message.getProperties(), feature); } private PropertyRealization getIncludedProperty(final ObjectRealization objectRealization, final Feature feature) { final Function1 _function = (PropertyRealization it) -> { return Boolean.valueOf(InheritanceUtils.sameOrOverrides(it.getBaseProperty(), feature)); }; return IterableExtensions.head(IterableExtensions.filter(objectRealization.getAllIncludedProperties(), _function)); } private CharSequence generateReferenceTreatments(final ServiceDataResource resource) { StringConcatenation _builder = new StringConcatenation(); { EList _referenceTreatments = resource.getReferenceTreatments(); for(final ReferenceTreatment refTreatment : _referenceTreatments) { EList _includedProperties = resource.getIncludedProperties(); CycleDetector _cycleDetector = new CycleDetector(); String _generateReferenceTreatment = this.generateReferenceTreatment(refTreatment, _includedProperties, _cycleDetector, Integer.valueOf(0)); _builder.append(_generateReferenceTreatment); _builder.newLineIfNotEmpty(); } } return _builder; } private CharSequence generateReferenceTreatments(final TypedMessage message) { StringConcatenation _builder = new StringConcatenation(); { EList _referenceTreatments = message.getReferenceTreatments(); for(final ReferenceTreatment refTreatment : _referenceTreatments) { EList _includedProperties = message.getIncludedProperties(); CycleDetector _cycleDetector = new CycleDetector(); String _generateReferenceTreatment = this.generateReferenceTreatment(refTreatment, _includedProperties, _cycleDetector, Integer.valueOf(0)); _builder.append(_generateReferenceTreatment); _builder.newLineIfNotEmpty(); } } return _builder; } private String _generateReferenceTreatment(final ReferenceLink refLink, final List includedProperies, final CycleDetector cycleDetector, final Integer indent) { String _xblockexpression = null; { final ReferenceElement referencedProperty = refLink.getReferenceElement(); final String cardinality = XDataTypeExtensions.getCardinalityLabel(refLink, includedProperies); StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLine(); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); String _name = referencedProperty.getName(); _builder.append(_name, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(""); String _name_1 = refLink.getTargetResource().getName(); _builder.append(_name_1); _builder.append(""); _builder.append(cardinality); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); _builder.append(""); String _xifexpression = null; if ((referencedProperty instanceof ReferenceProperty)) { _xifexpression = this.docHelper.generateDoc(((ReferenceProperty) referencedProperty)); } else { _xifexpression = "TODO"; } _builder.append(_xifexpression); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); { List _includedProperties = this.getIncludedProperties(refLink); for(final Feature feature : _includedProperties) { CharSequence _generateReferenceTreatmentPropertyRow = this.generateReferenceTreatmentPropertyRow(feature, Integer.valueOf(((indent).intValue() + 1)), true); _builder.append(_generateReferenceTreatmentPropertyRow); _builder.newLineIfNotEmpty(); } } _xblockexpression = _builder.toString(); } return _xblockexpression; } private String _generateReferenceTreatment(final ReferenceEmbed refEmbed, final List includedProperies, final CycleDetector cycleDetector, final Integer indent) { String _xblockexpression = null; { boolean _visit = cycleDetector.visit(refEmbed); final boolean isRecursive = (!_visit); final ReferenceElement referencedProperty = refEmbed.getReferenceElement(); final String cardinality = XDataTypeExtensions.getCardinalityLabel(refEmbed, includedProperies); StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); String _name = referencedProperty.getName(); _builder.append(_name, " "); _builder.append(" "); { if (isRecursive) { _builder.append(" (recursive) "); } } _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); String _qualifiedName = this.importHelper.getQualifiedName(referencedProperty.getDataType()); _builder.append(_qualifiedName, " "); _builder.append(""); _builder.append(cardinality, " "); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); _builder.append(""); String _xifexpression = null; if ((referencedProperty instanceof ReferenceProperty)) { _xifexpression = this.docHelper.generateDoc(((ReferenceProperty) referencedProperty)); } else { _xifexpression = "TODO"; } _builder.append(_xifexpression); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); { if ((!isRecursive)) { { final Function1 _function = (Feature e) -> { return Boolean.valueOf((e instanceof PrimitiveProperty)); }; Iterable _filter = IterableExtensions.filter(this.getIncludedProperties(refEmbed), _function); for(final Feature feature : _filter) { CharSequence _generateReferenceTreatmentPropertyRow = this.generateReferenceTreatmentPropertyRow(feature, Integer.valueOf(((indent).intValue() + 1)), true); _builder.append(_generateReferenceTreatmentPropertyRow); _builder.newLineIfNotEmpty(); } } { EList _nestedReferenceTreatments = refEmbed.getNestedReferenceTreatments(); for(final ReferenceTreatment refTreatment : _nestedReferenceTreatments) { String _generateReferenceTreatment = this.generateReferenceTreatment(refTreatment, includedProperies, cycleDetector, Integer.valueOf(((indent).intValue() + 1))); _builder.append(_generateReferenceTreatment); _builder.newLineIfNotEmpty(); } } } } _xblockexpression = _builder.toString(); } return _xblockexpression; } private CharSequence generateIncludedPropertyType(final PropertyRealization includedProperty) { StringConcatenation _builder = new StringConcatenation(); String _featureType = this.parameterHelper.featureType(includedProperty.getBaseProperty(), this.importHelper); _builder.append(_featureType); String _prettyPrintedCardinality = this.commonServices.getPrettyPrintedCardinality(includedProperty); _builder.append(_prettyPrintedCardinality); _builder.newLineIfNotEmpty(); return _builder; } private List getIncludedProperties(final ReferenceTreatment refLink) { List _xifexpression = null; ObjectRealization _linkDescriptor = refLink.getLinkDescriptor(); boolean _tripleEquals = (_linkDescriptor == null); if (_tripleEquals) { _xifexpression = Collections.emptyList(); } else { final Function1 _function = (PropertyRealization it) -> { return it.getBaseProperty(); }; _xifexpression = ListExtensions.map(refLink.getLinkDescriptor().getAllIncludedProperties(), _function); } return _xifexpression; } private CharSequence generateReferenceTreatmentPropertyRow(final Feature property, final Integer indent, final boolean genDoc) { StringConcatenation _builder = new StringConcatenation(); _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); String _name = property.getName(); _builder.append(_name, " "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); _builder.newLine(); { if ((property instanceof ReferenceProperty)) { _builder.append(" "); _builder.append(""); String _featureType = this.parameterHelper.featureType(property, this.importHelper); _builder.append(_featureType, " "); String _prettyPrintedMultiplicity = this.commonServices.getPrettyPrintedMultiplicity(property); _builder.append(_prettyPrintedMultiplicity, " "); _builder.append(""); _builder.newLineIfNotEmpty(); } else { _builder.append(" "); String _featureType_1 = this.parameterHelper.featureType(property, this.importHelper); _builder.append(_featureType_1, " "); String _prettyPrintedMultiplicity_1 = this.commonServices.getPrettyPrintedMultiplicity(property); _builder.append(_prettyPrintedMultiplicity_1, " "); _builder.newLineIfNotEmpty(); } } _builder.append(" "); _builder.append(""); _builder.newLine(); { if (genDoc) { _builder.append(" "); _builder.append(""); String _generateDoc = null; if (property!=null) { _generateDoc=this.docHelper.generateDoc(property); } _builder.append(_generateDoc, " "); _builder.append(""); _builder.newLineIfNotEmpty(); } } _builder.append(""); _builder.newLine(); return _builder; } protected CharSequence generateSecuritySchemeUsage(final HasSecurityValue hasSecuredValue) { StringConcatenation _builder = new StringConcatenation(); { boolean _isEmpty = hasSecuredValue.getSecuredBy().isEmpty(); boolean _not = (!_isEmpty); if (_not) { CharSequence _tableWithHeader = XDocHelper.tableWithHeader("Security Schemes", "Name", "Type", "Authorized Scopes"); _builder.append(_tableWithHeader); _builder.newLineIfNotEmpty(); { EList _securedBy = hasSecuredValue.getSecuredBy(); for(final AuthenticationMethod authMethod : _securedBy) { _builder.append(""); _builder.newLine(); _builder.append(" "); _builder.append(""); String _name = authMethod.getScheme().getName(); _builder.append(_name, " "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); String _string = authMethod.getScheme().getType().toString(); _builder.append(_string, " "); _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append(""); { EList _scopes = authMethod.getScopes(); boolean _hasElements = false; for(final SecurityScope scope : _scopes) { if (!_hasElements) { _hasElements = true; } else { _builder.appendImmediate(", ", " "); } String _name_1 = scope.getName(); _builder.append(_name_1, " "); } } _builder.append(""); _builder.newLineIfNotEmpty(); _builder.append(""); _builder.newLine(); } } _builder.append(""); _builder.newLine(); } } return _builder; } public static String statusColorCode(final Integer code) { String _switchResult = null; boolean _matched = false; if ((((code).intValue() >= 100) && ((code).intValue() < 200))) { _matched=true; _switchResult = "info"; } if (!_matched) { if ((((code).intValue() >= 200) && ((code).intValue() < 300))) { _matched=true; _switchResult = "success"; } } if (!_matched) { if ((((code).intValue() >= 300) && ((code).intValue() < 400))) { _matched=true; _switchResult = "info"; } } if (!_matched) { _switchResult = "danger"; } return _switchResult; } public boolean isLiveView(final boolean isLiveView) { return this.isLiveView = isLiveView; } private String generateReferenceTreatment(final ReferenceTreatment refEmbed, final List includedProperies, final CycleDetector cycleDetector, final Integer indent) { if (refEmbed instanceof ReferenceEmbed) { return _generateReferenceTreatment((ReferenceEmbed)refEmbed, includedProperies, cycleDetector, indent); } else if (refEmbed instanceof ReferenceLink) { return _generateReferenceTreatment((ReferenceLink)refEmbed, includedProperies, cycleDetector, indent); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.asList(refEmbed, includedProperies, cycleDetector, indent).toString()); } } }