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

com.reprezen.genflow.rapidml.csharp.generators.ResourceAPIGenerator Maven / Gradle / Ivy

The newest version!
package com.reprezen.genflow.rapidml.csharp.generators;

import com.google.common.base.Objects;
import com.reprezen.genflow.api.template.IGenTemplateContext;
import com.reprezen.genflow.rapidml.csharp.Config;
import com.reprezen.genflow.rapidml.csharp.helpers.DocHelper;
import com.reprezen.genflow.rapidml.csharp.helpers.FileHelper;
import com.reprezen.genflow.rapidml.csharp.helpers.FileRole;
import com.reprezen.genflow.rapidml.csharp.helpers.NameHelper;
import com.reprezen.genflow.rapidml.csharp.helpers.SnippetHelper;
import com.reprezen.genflow.rapidml.csharp.helpers.TypeHelper;
import com.reprezen.genflow.rapidml.csharp.helpers.UtilsHelper;
import com.reprezen.rapidml.CollectionResource;
import com.reprezen.rapidml.DataModel;
import com.reprezen.rapidml.HTTPMethods;
import com.reprezen.rapidml.MessageParameter;
import com.reprezen.rapidml.Method;
import com.reprezen.rapidml.ObjectResource;
import com.reprezen.rapidml.ResourceAPI;
import com.reprezen.rapidml.ResourceDefinition;
import com.reprezen.rapidml.ServiceDataResource;
import com.reprezen.rapidml.Structure;
import com.reprezen.rapidml.TypedMessage;
import com.reprezen.rapidml.TypedRequest;
import com.reprezen.rapidml.TypedResponse;
import com.reprezen.rapidml.URIParameter;
import com.reprezen.rapidml.ZenModel;
import java.net.URI;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.Set;
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.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;

@SuppressWarnings("all")
public class ResourceAPIGenerator {
  private final ZenModel model;
  
  private final IGenTemplateContext context;
  
  private final Config config;
  
  @Extension
  private NameHelper nameHelper;
  
  @Extension
  private TypeHelper typeHelper;
  
  @Extension
  private SnippetHelper snippetHelper;
  
  public ResourceAPIGenerator(final ZenModel model, final IGenTemplateContext context, final Config config) {
    this.model = model;
    this.context = context;
    this.config = config;
    this.nameHelper = NameHelper.forModel(model);
    this.typeHelper = TypeHelper.forModel(model);
    SnippetHelper _snippetHelper = new SnippetHelper(config);
    this.snippetHelper = _snippetHelper;
  }
  
  public void generate() {
    EList _resourceAPIs = this.model.getResourceAPIs();
    for (final ResourceAPI api : _resourceAPIs) {
      EList _ownedResourceDefinitions = api.getOwnedResourceDefinitions();
      for (final ResourceDefinition resource : _ownedResourceDefinitions) {
        {
          this.generateInterface(resource);
          boolean _isGenerateDelegateController = this.config.isGenerateDelegateController();
          if (_isGenerateDelegateController) {
            this.generateDelegateController(resource);
            this.generateAbstractDelegateHandler(resource);
          }
        }
      }
    }
  }
  
  private Path generateInterface(final ResourceDefinition resource) {
    Path _xblockexpression = null;
    {
      final String name = this.nameHelper.getResourceName(resource);
      @Extension
      final FileHelper fileHelper = FileHelper.of(resource, FileRole.INTERFACE, this.context, this.config);
      this.useDataModels(fileHelper, resource);
      StringConcatenation _builder = new StringConcatenation();
      CharSequence _simpleDoc = DocHelper.simpleDoc(resource);
      _builder.append(_simpleDoc);
      CharSequence _generatedAttr = UtilsHelper.generatedAttr();
      _builder.append(_generatedAttr);
      _builder.newLineIfNotEmpty();
      _builder.append("public interface I");
      _builder.append(name);
      _builder.append("Controller {");
      _builder.newLineIfNotEmpty();
      {
        EList _methods = resource.getMethods();
        for(final Method method : _methods) {
          _builder.append("    ");
          CharSequence _returnType = this.getReturnType(method);
          _builder.append(_returnType, "    ");
          _builder.append(" ");
          String _initialUpper = this.nameHelper.initialUpper(method.getName());
          _builder.append(_initialUpper, "    ");
          _builder.append("(");
          String _signature = this.getSignature(method);
          _builder.append(_signature, "    ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
        }
      }
      _builder.append("}");
      _builder.newLine();
      final String content = _builder.toString();
      StringConcatenation _builder_1 = new StringConcatenation();
      _builder_1.append("I");
      _builder_1.append(name);
      _builder_1.append("Controller");
      _xblockexpression = fileHelper.writeFile(content, fileHelper.getCsharpFileName(_builder_1));
    }
    return _xblockexpression;
  }
  
  private Path generateDelegateController(final ResourceDefinition resource) {
    Path _xblockexpression = null;
    {
      final String name = this.nameHelper.getResourceName(resource);
      EObject _eContainer = resource.eContainer();
      final ResourceAPI api = ((ResourceAPI) _eContainer);
      @Extension
      final FileHelper fileHelper = FileHelper.of(resource, FileRole.DELEGATE_CONTROLLER, this.context, this.config);
      this.useDataModels(fileHelper, resource);
      StringConcatenation _builder = new StringConcatenation();
      CharSequence _simpleDoc = DocHelper.simpleDoc(resource);
      _builder.append(_simpleDoc);
      CharSequence _routingAttrs = this.getRoutingAttrs(api);
      _builder.append(_routingAttrs);
      CharSequence _generatedAttr = UtilsHelper.generatedAttr();
      _builder.append(_generatedAttr);
      _builder.newLineIfNotEmpty();
      _builder.append("public partial class ");
      _builder.append(name);
      _builder.append("DelegateController : ");
      String _apiController = this.snippetHelper.apiController();
      _builder.append(_apiController);
      _builder.append(", I");
      _builder.append(name);
      _builder.append("Controller {");
      _builder.newLineIfNotEmpty();
      {
        EList _methods = resource.getMethods();
        for(final Method method : _methods) {
          _builder.append("    ");
          final String methName = this.nameHelper.initialUpper(method.getName());
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("public delegate void ");
          _builder.append(methName, "    ");
          _builder.append("_PreProcessDelegate(");
          String _signature = this.getSignature(method);
          _builder.append(_signature, "    ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public static ");
          _builder.append(methName, "    ");
          _builder.append("_PreProcessDelegate ");
          _builder.append(methName, "    ");
          _builder.append("_PreProcess;");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public delegate ");
          CharSequence _delegateReturnType = this.getDelegateReturnType(method);
          _builder.append(_delegateReturnType, "    ");
          _builder.append(" ");
          _builder.append(methName, "    ");
          _builder.append("_ProcessDelegate(");
          String _signature_1 = this.getSignature(method);
          _builder.append(_signature_1, "    ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public static ");
          _builder.append(methName, "    ");
          _builder.append("_ProcessDelegate ");
          _builder.append(methName, "    ");
          _builder.append("_Process;");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public delegate void ");
          _builder.append(methName, "    ");
          _builder.append("_PostProcessDelegate(");
          String _signature_2 = this.getSignature(method, true);
          _builder.append(_signature_2, "    ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public static ");
          _builder.append(methName, "    ");
          _builder.append("_PostProcessDelegate ");
          _builder.append(methName, "    ");
          _builder.append("_PostProcess;");
          _builder.newLineIfNotEmpty();
        }
      }
      _builder.newLine();
      {
        EList _methods_1 = resource.getMethods();
        for(final Method method_1 : _methods_1) {
          _builder.append("    ");
          final String methName_1 = this.nameHelper.initialUpper(method_1.getName());
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          CharSequence _returnType = this.getReturnType(method_1);
          final boolean notVoid = (!Objects.equal(_returnType, "void"));
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.newLine();
          _builder.append("    ");
          List _routingAttrs_1 = this.getRoutingAttrs(method_1);
          _builder.append(_routingAttrs_1, "    ");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("public ");
          CharSequence _returnType_1 = this.getReturnType(method_1);
          _builder.append(_returnType_1, "    ");
          _builder.append(" ");
          _builder.append(methName_1, "    ");
          _builder.append("(");
          String _signature_3 = this.getSignature(method_1, false, true);
          _builder.append(_signature_3, "    ");
          _builder.append(") {");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          CharSequence _delegateVarDecl = this.snippetHelper.delegateVarDecl(this.getValueType(IterableExtensions.head(method_1.getResponses())));
          _builder.append(_delegateVarDecl, "        ");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("if (");
          _builder.append(methName_1, "        ");
          _builder.append("_PreProcess != null) {");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("        ");
          _builder.append(methName_1, "            ");
          _builder.append("_PreProcess(");
          String _args = this.getArgs(method_1);
          _builder.append(_args, "            ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("}");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("if (");
          _builder.append(methName_1, "        ");
          _builder.append("_Process != null) {");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("        ");
          {
            if (notVoid) {
              String _delegateVar = this.snippetHelper.delegateVar();
              _builder.append(_delegateVar, "            ");
              _builder.append(" = ");
            }
          }
          _builder.append(methName_1, "            ");
          _builder.append("_Process(");
          String _args_1 = this.getArgs(method_1);
          _builder.append(_args_1, "            ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("} else {");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("        ");
          _builder.append("throw new NotImplementedException();");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("}");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("if (");
          _builder.append(methName_1, "        ");
          _builder.append("_PostProcess != null");
          String _postProcessExtraCond = this.snippetHelper.postProcessExtraCond();
          _builder.append(_postProcessExtraCond, "        ");
          _builder.append(") {");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("        ");
          _builder.append(methName_1, "            ");
          _builder.append("_PostProcess(");
          String _args_2 = this.getArgs(method_1, true);
          _builder.append(_args_2, "            ");
          _builder.append(");");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("}");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("    ");
          String _delegateReturn = this.snippetHelper.delegateReturn(notVoid);
          _builder.append(_delegateReturn, "        ");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("}");
          _builder.newLine();
        }
      }
      _builder.append("}");
      _builder.newLine();
      final String content = _builder.toString();
      StringConcatenation _builder_1 = new StringConcatenation();
      _builder_1.append(name);
      _builder_1.append("DelegateController");
      _xblockexpression = fileHelper.writeFile(content, fileHelper.getCsharpFileName(_builder_1));
    }
    return _xblockexpression;
  }
  
  private Path generateAbstractDelegateHandler(final ResourceDefinition resource) {
    Path _xblockexpression = null;
    {
      final String name = this.nameHelper.getResourceName(resource);
      @Extension
      final FileHelper fileHelper = FileHelper.of(resource, FileRole.ABSTRACT_DELEGATE_HANDLER, this.context, this.config);
      EObject _eContainer = resource.eContainer();
      fileHelper.using(((ResourceAPI) _eContainer));
      this.useDataModels(fileHelper, resource);
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("public abstract class Abstract");
      _builder.append(name);
      _builder.append("Handlers {");
      _builder.newLineIfNotEmpty();
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// ");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// Bind handlers to delegates here. For example:");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("///    ");
      _builder.append(name, "    ");
      _builder.append("DelegateController.MethodName_Process += MethodName;");
      _builder.newLineIfNotEmpty();
      _builder.append("    ");
      _builder.append("/// Unbound handlers will not be used. Handlers that are not overridden act as follows:");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// * PreProcess handlers do nothing");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// * Process handlers throw NotImplementedException");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// * PostProcess handlers do nothing");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("/// ");
      _builder.newLine();
      _builder.append("    ");
      _builder.append("public Abstract");
      _builder.append(name, "    ");
      _builder.append("Handlers() {}");
      _builder.newLineIfNotEmpty();
      _builder.append("    ");
      _builder.newLine();
      {
        EList _methods = resource.getMethods();
        for(final Method method : _methods) {
          _builder.append("    ");
          final String methName = this.nameHelper.initialUpper(method.getName());
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("protected virtual void ");
          _builder.append(methName, "    ");
          _builder.append("_PreProcess(");
          String _signature = this.getSignature(method);
          _builder.append(_signature, "    ");
          _builder.append(") { }");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("protected virtual ");
          CharSequence _delegateReturnType = this.getDelegateReturnType(method);
          _builder.append(_delegateReturnType, "    ");
          _builder.append(" ");
          _builder.append(methName, "    ");
          _builder.append("(");
          String _signature_1 = this.getSignature(method);
          _builder.append(_signature_1, "    ");
          _builder.append(") {");
          _builder.newLineIfNotEmpty();
          _builder.append("    ");
          _builder.append("    ");
          _builder.append("throw new NotImplementedException();");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("}");
          _builder.newLine();
          _builder.append("    ");
          _builder.append("protected virtual void ");
          _builder.append(methName, "    ");
          _builder.append("_PostProcess(");
          String _signature_2 = this.getSignature(method, true);
          _builder.append(_signature_2, "    ");
          _builder.append(") { }");
          _builder.newLineIfNotEmpty();
        }
      }
      _builder.append("}");
      _builder.newLine();
      final String content = _builder.toString();
      StringConcatenation _builder_1 = new StringConcatenation();
      _builder_1.append("Abstract");
      _builder_1.append(name);
      _builder_1.append("DelegateHandler");
      _xblockexpression = fileHelper.writeFile(content, fileHelper.getCsharpFileName(_builder_1));
    }
    return _xblockexpression;
  }
  
  private FileHelper useDataModels(final FileHelper helper, final ResourceDefinition resource) {
    FileHelper _xblockexpression = null;
    {
      final Set usedDataModels = CollectionLiterals.newHashSet();
      EList _methods = resource.getMethods();
      for (final Method method : _methods) {
        {
          TypedRequest _request = method.getRequest();
          ResourceDefinition _resourceType = null;
          if (_request!=null) {
            _resourceType=_request.getResourceType();
          }
          Structure _structure = null;
          if (_resourceType!=null) {
            _structure=this.getStructure(_resourceType);
          }
          EObject _eContainer = null;
          if (_structure!=null) {
            _eContainer=_structure.eContainer();
          }
          usedDataModels.add(((DataModel) _eContainer));
          EList _responses = method.getResponses();
          for (final TypedResponse response : _responses) {
            ResourceDefinition _resourceType_1 = response.getResourceType();
            Structure _structure_1 = null;
            if (_resourceType_1!=null) {
              _structure_1=this.getStructure(_resourceType_1);
            }
            EObject _eContainer_1 = null;
            if (_structure_1!=null) {
              _eContainer_1=_structure_1.eContainer();
            }
            usedDataModels.add(((DataModel) _eContainer_1));
          }
        }
      }
      final Function1 _function = (DataModel it) -> {
        return Boolean.valueOf((it != null));
      };
      _xblockexpression = helper.using(IterableExtensions.toList(IterableExtensions.filter(usedDataModels, _function)).toArray());
    }
    return _xblockexpression;
  }
  
  private boolean isVoidReturn(final Method method) {
    Structure _underlyingStructure = this.getUnderlyingStructure(IterableExtensions.head(method.getResponses()));
    return (_underlyingStructure == null);
  }
  
  private CharSequence getReturnType(final Method method) {
    CharSequence _elvis = null;
    CharSequence _messageType = this.getMessageType(IterableExtensions.head(method.getResponses()));
    if (_messageType != null) {
      _elvis = _messageType;
    } else {
      String _voidMethodResponseType = this.snippetHelper.voidMethodResponseType();
      _elvis = _voidMethodResponseType;
    }
    return _elvis;
  }
  
  private CharSequence getDelegateReturnType(final Method method) {
    CharSequence _elvis = null;
    CharSequence _delegateType = this.getDelegateType(IterableExtensions.head(method.getResponses()));
    if (_delegateType != null) {
      _elvis = _delegateType;
    } else {
      String _voidDelegateType = this.snippetHelper.voidDelegateType();
      _elvis = _voidDelegateType;
    }
    return _elvis;
  }
  
  private String getRequestType(final Method method) {
    TypedRequest _request = method.getRequest();
    String _valueType = null;
    if (_request!=null) {
      _valueType=this.getValueType(_request);
    }
    return _valueType;
  }
  
  private CharSequence getMessageType(final TypedMessage msg) {
    String _valueType = this.getValueType(msg);
    CharSequence _methodResponseType = null;
    if (_valueType!=null) {
      _methodResponseType=this.snippetHelper.methodResponseType(_valueType);
    }
    return _methodResponseType;
  }
  
  private CharSequence getDelegateType(final TypedMessage msg) {
    String _valueType = this.getValueType(msg);
    CharSequence _delegateType = null;
    if (_valueType!=null) {
      _delegateType=this.snippetHelper.delegateType(_valueType);
    }
    return _delegateType;
  }
  
  private String getValueType(final TypedMessage msg) {
    String _xblockexpression = null;
    {
      Structure _underlyingStructure = this.getUnderlyingStructure(msg);
      String _name = null;
      if (_underlyingStructure!=null) {
        _name=_underlyingStructure.getName();
      }
      String _initialUpper = null;
      if (_name!=null) {
        _initialUpper=this.nameHelper.initialUpper(_name);
      }
      final String typeName = _initialUpper;
      String _xifexpression = null;
      if ((typeName != null)) {
        String _xifexpression_1 = null;
        ResourceDefinition _resourceType = msg.getResourceType();
        if ((_resourceType instanceof CollectionResource)) {
          StringConcatenation _builder = new StringConcatenation();
          _builder.append("IEnumerable");
          _xifexpression_1 = _builder.toString();
        } else {
          _xifexpression_1 = ("I" + typeName);
        }
        _xifexpression = _xifexpression_1;
      }
      _xblockexpression = _xifexpression;
    }
    return _xblockexpression;
  }
  
  private Structure getUnderlyingStructure(final TypedMessage msg) {
    Structure _elvis = null;
    Structure _elvis_1 = null;
    Structure _dataType = msg.getDataType();
    if (_dataType != null) {
      _elvis_1 = _dataType;
    } else {
      Structure _msgResourceDataType = this.getMsgResourceDataType(msg);
      _elvis_1 = _msgResourceDataType;
    }
    if (_elvis_1 != null) {
      _elvis = _elvis_1;
    } else {
      Structure _containingResourceDataType = this.getContainingResourceDataType(msg);
      _elvis = _containingResourceDataType;
    }
    return _elvis;
  }
  
  private Structure getMsgResourceDataType(final TypedMessage msg) {
    ResourceDefinition _resourceType = msg.getResourceType();
    Structure _resourceDataType = null;
    if (_resourceType!=null) {
      _resourceDataType=this.getResourceDataType(_resourceType);
    }
    return _resourceDataType;
  }
  
  private Structure getContainingResourceDataType(final TypedMessage msg) {
    Structure _xifexpression = null;
    boolean _isUseParentTypeReference = msg.isUseParentTypeReference();
    if (_isUseParentTypeReference) {
      EObject _eContainer = msg.eContainer();
      _xifexpression = this.getResourceDataType(((Method) _eContainer).getContainingResourceDefinition());
    }
    return _xifexpression;
  }
  
  private Structure getResourceDataType(final ResourceDefinition resource) {
    Structure _switchResult = null;
    boolean _matched = false;
    if (resource instanceof ServiceDataResource) {
      _matched=true;
      _switchResult = ((ServiceDataResource)resource).getDataType();
    }
    return _switchResult;
  }
  
  private Structure getStructure(final ResourceDefinition resource) {
    Structure _switchResult = null;
    boolean _matched = false;
    if (resource instanceof ObjectResource) {
      _matched=true;
      _switchResult = ((ObjectResource)resource).getDataType();
    }
    if (!_matched) {
      if (resource instanceof CollectionResource) {
        _matched=true;
        _switchResult = ((CollectionResource)resource).getDataType();
      }
    }
    return _switchResult;
  }
  
  private String getSignature(final Method method) {
    return this.getSignature(method, false);
  }
  
  private String getSignature(final Method method, final boolean includeResponse) {
    return this.getSignature(method, includeResponse, false);
  }
  
  private String getSignature(final Method method, final boolean includeResponse, final boolean includeBodyAttr) {
    String _xblockexpression = null;
    {
      final List params = CollectionLiterals.newArrayList();
      List _elvis = null;
      EList _uriParameters = method.getContainingResourceDefinition().getURI().getUriParameters();
      if (_uriParameters != null) {
        _elvis = _uriParameters;
      } else {
        _elvis = Collections.unmodifiableList(CollectionLiterals.newArrayList());
      }
      for (final URIParameter param : _elvis) {
        StringConcatenation _builder = new StringConcatenation();
        String _csharpType = this.typeHelper.getCsharpType(param.getType().getName());
        _builder.append(_csharpType);
        _builder.append(" ");
        String _name = param.getName();
        _builder.append(_name);
        params.add(_builder.toString());
      }
      EList _parameters = method.getRequest().getParameters();
      for (final MessageParameter param_1 : _parameters) {
        StringConcatenation _builder_1 = new StringConcatenation();
        String _csharpType_1 = this.typeHelper.getCsharpType(param_1.getType().getName());
        _builder_1.append(_csharpType_1);
        _builder_1.append(" ");
        String _name_1 = param_1.getName();
        _builder_1.append(_name_1);
        params.add(_builder_1.toString());
      }
      String _requestType = this.getRequestType(method);
      boolean _tripleNotEquals = (_requestType != null);
      if (_tripleNotEquals) {
        StringConcatenation _builder_2 = new StringConcatenation();
        {
          if (includeBodyAttr) {
            _builder_2.append("[FromBody] ");
          }
        }
        String _requestType_1 = this.getRequestType(method);
        _builder_2.append(_requestType_1);
        _builder_2.append(" requestPayload");
        params.add(_builder_2.toString());
      }
      if ((includeResponse && (!this.isVoidReturn(method)))) {
        StringConcatenation _builder_3 = new StringConcatenation();
        String _valueType = this.getValueType(IterableExtensions.head(method.getResponses()));
        _builder_3.append(_valueType);
        _builder_3.append(" responsePayload");
        params.add(_builder_3.toString());
      }
      _xblockexpression = IterableExtensions.join(params, ", ");
    }
    return _xblockexpression;
  }
  
  private String getArgs(final Method method) {
    return this.getArgs(method, false);
  }
  
  private String getArgs(final Method method, final boolean includeResponse) {
    String _xblockexpression = null;
    {
      final List args = CollectionLiterals.newArrayList();
      List _elvis = null;
      EList _uriParameters = method.getContainingResourceDefinition().getURI().getUriParameters();
      if (_uriParameters != null) {
        _elvis = _uriParameters;
      } else {
        _elvis = Collections.unmodifiableList(CollectionLiterals.newArrayList());
      }
      for (final URIParameter param : _elvis) {
        args.add(param.getName());
      }
      EList _parameters = method.getRequest().getParameters();
      for (final MessageParameter param_1 : _parameters) {
        args.add(param_1.getName());
      }
      String _requestType = this.getRequestType(method);
      boolean _tripleNotEquals = (_requestType != null);
      if (_tripleNotEquals) {
        args.add("requestPayload");
      }
      if ((includeResponse && (!this.isVoidReturn(method)))) {
        args.add(this.snippetHelper.responseValue());
      }
      _xblockexpression = IterableExtensions.join(args, ", ");
    }
    return _xblockexpression;
  }
  
  private CharSequence getRoutingAttrs(final ResourceAPI api) {
    try {
      CharSequence _xblockexpression = null;
      {
        String _baseURI = api.getBaseURI();
        String prefix = new URI(_baseURI).getPath();
        boolean _startsWith = prefix.startsWith("/");
        if (_startsWith) {
          prefix = prefix.substring(1);
        }
        CharSequence _xifexpression = null;
        boolean _isEmpty = prefix.isEmpty();
        boolean _not = (!_isEmpty);
        if (_not) {
          StringConcatenation _builder = new StringConcatenation();
          _builder.append("[");
          String _routePrefix = this.snippetHelper.routePrefix();
          _builder.append(_routePrefix);
          _builder.append("(\"");
          _builder.append(prefix);
          _builder.append("\")]");
          _builder.newLineIfNotEmpty();
          _xifexpression = _builder;
        }
        _xblockexpression = _xifexpression;
      }
      return _xblockexpression;
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
  
  private List getRoutingAttrs(final Method method) {
    List _xblockexpression = null;
    {
      final List attrs = CollectionLiterals.newArrayList();
      String _switchResult = null;
      HTTPMethods _httpMethod = method.getHttpMethod();
      if (_httpMethod != null) {
        switch (_httpMethod) {
          case GET:
            _switchResult = "HttpGet";
            break;
          case HEAD:
            _switchResult = "HttpHead";
            break;
          case POST:
            _switchResult = "HttpPost";
            break;
          case PUT:
            _switchResult = "HttpPut";
            break;
          case OPTIONS:
            _switchResult = "HttpOptions";
            break;
          case DELETE:
            _switchResult = "HttpDelete";
            break;
          case CONNECT:
            _switchResult = "HttpConnect";
            break;
          case PATCH:
            _switchResult = "HttpPatch";
            break;
          case TRACE:
            _switchResult = "HttpTrace";
            break;
          default:
            break;
        }
      }
      final String methodAttr = _switchResult;
      if ((methodAttr != null)) {
        attrs.add(methodAttr);
      }
      final String uri = IterableExtensions.join(method.getContainingResourceDefinition().getURI().getSegments(), "/");
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("Route(\"");
      _builder.append(uri);
      _builder.append("\")");
      attrs.add(_builder.toString());
      IterableExtensions.join(attrs, ", ");
      _xblockexpression = attrs;
    }
    return _xblockexpression;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy