Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
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("");
String _name_2 = ((CollectionResource)resource).getDataType().getName();
_builder.append(_name_2, " ");
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append(" ");
_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();
_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("
");
_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 extends Parameter> params) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("");
_builder.newLine();
_builder.append(" ");
_builder.append("Name ");
_builder.newLine();
_builder.append(" ");
_builder.append("Documentation ");
_builder.newLine();
_builder.append(" ");
_builder.append("Default ");
_builder.newLine();
_builder.append(" ");
_builder.append("Property ");
_builder.newLine();
_builder.append(" ");
_builder.append("Type ");
_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(" ");
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(" ");
_builder.newLine();
_builder.append(" ");
_builder.append(" ");
_builder.append("");
String _generateDoc = null;
if (param!=null) {
_generateDoc=this.docHelper.generateDoc(param);
}
_builder.append(_generateDoc, " ");
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("");
String _default = param.getDefault();
_builder.append(_default, " ");
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("");
String _paramName = this.parameterHelper.paramName(param.getSourceReference());
_builder.append(_paramName, " ");
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.append("");
String _paramType = this.parameterHelper.paramType(param.getSourceReference(), this.importHelper);
_builder.append(_paramType, " ");
_builder.append(" ");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.append(" ");
_builder.newLine();
}
}
_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("Realization Name ");
_builder_1.append(realizationName, "\t\t");
_builder_1.append(" ");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append("Realization Template ");
String _value = templateNameTag.get().getValue();
_builder_1.append(_value, "\t\t");
_builder_1.append(" ");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\t\t");
_builder_1.append("Data Structure ");
String _name = resource.getActualType().getName();
_builder_1.append(_name, "\t\t");
_builder_1.append(" ");
_builder_1.newLineIfNotEmpty();
_builder_1.append("\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("Name ");
_builder.newLine();
_builder.append(" ");
_builder.append("Type ");
_builder.newLine();
_builder.append(" ");
_builder.append("Documentation ");
_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("
");
_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("Name ");
_builder.newLine();
_builder.append(" ");
_builder.append("Type ");
_builder.newLine();
_builder.append(" ");
_builder.append("Documentation ");
_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("
");
_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());
}
}
}