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

vertx-groovy.template.common.templ Maven / Gradle / Ivy

There is a newer version: 5.0.0.CR3
Show newest version
@comment{'various stuff'}
@includeNamed{'/vertx-java/template/common-lib.templ'}
@code{

  /**
   * Render a relative html link to the dataObjectType from the current type.
   */
  def renderDataObjectHtmlLink(dataObjectType) {
    var link = new StringBuilder();
    for (name : CASE_QUALIFIED.parse(type.raw.getPackageName())) {
      link.append("../");
    }
    link.append("../../../cheatsheet/").append(dataObjectType.simpleName).append(".html");
    return "" + dataObjectType.simpleName + "";;
  }

  def genGroovyDocType(type) {
    if (type.kind == CLASS_JSON_ARRAY) {
      return "java.util.List";
    } if (type.kind == CLASS_DATA_OBJECT || type.kind == CLASS_JSON_OBJECT) {
      return "java.util.Map";
    } else if (type.kind == CLASS_API) {
      return type.translateName("groovy");
    } else if (type.kind == CLASS_LIST || type.kind == CLASS_SET) {
      return type.raw.name + "<" + genGroovyDocType(type.args[0]) + ">";
    } else if (type.kind == CLASS_MAP) {
      return "java.util.Map<" + genGroovyDocType(type.args[0]) + "," + genGroovyDocType(type.args[1]) + ">";
    } else if (type.kind == CLASS_HANDLER) {
      return "io.vertx.core.Handler<" + genGroovyDocType(type.args[0]) + ">";
    } else if (type.kind == CLASS_ASYNC_RESULT) {
      return "io.vertx.core.AsyncResult<" + genGroovyDocType(type.args[0]) + ">";
    } else {
      return type.name;
    }
  }

  /**
   * Render a tag link to an html link, this function is used as parameter of the
   * renderDocToHtml function when it needs to render tag links.
   */
  def renderLinkToHtml(link) {
    var rawType = link.targetType.raw;
    if (rawType.module != null) {
      var label = link.label.trim();
      if (rawType.kind == CLASS_DATA_OBJECT) {
        if (label.length() == 0) {
          label = rawType.simpleName;
        }
        return renderDataObjectHtmlLink(rawType);
      } else {
        if (type.kind == CLASS_API) {
          var elt = link.targetElement;
          var eltKind = elt.getKind().name();
          var ret = "{@link " + rawType.translateName("groovy");
          if (eltKind == "METHOD") {
            ret += "#" + elt.getSimpleName().toString();
          }
          if (label.length() > 0) {
            ret += " " + label;
          }
          ret += "}";
          return ret;
        }
      }
    }
    return "{@link " + rawType.name + "}";
  }

  def genConstructorType(type) {
    var fqn = type.translateName("groovy");
    if (type.concrete) {
      return fqn;
    } else {
      return fqn + "Impl";
    }
  }

  def genConstructor(type, arg) {
    return "new " + genConstructorType(type) + "(" + arg + ")";
  }
  
  def genConvReturn(type) {
    var kind = type.kind;
    if (kind == CLASS_JSON_OBJECT || kind == CLASS_DATA_OBJECT) {
      return 'Map';
    } else if (kind == CLASS_JSON_ARRAY) {
      return 'List';
    } else if (kind == CLASS_LIST) {
      return 'List<' + genConvReturn(type.args[0]) + '>';
    } else if (kind == CLASS_SET) {
      return 'Set<' + genConvReturn(type.args[0]) + '>';
    } else if (kind == CLASS_MAP) {
      return 'Map>';
    } else {
      return type.simpleName;
    }
  }
}