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

io.vertx.lang.jphp.generator.AbstractPhpDataObjectGenerator Maven / Gradle / Ivy

package io.vertx.lang.jphp.generator;

import io.vertx.codegen.DataObjectModel;
import io.vertx.codegen.PropertyInfo;
import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.annotations.ModuleGen;
import io.vertx.codegen.doc.Doc;
import io.vertx.codegen.doc.Tag;
import io.vertx.codegen.doc.Token;
import io.vertx.codegen.writer.CodeWriter;

import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;

public abstract class AbstractPhpDataObjectGenerator extends PhpGenerator {
  public AbstractPhpDataObjectGenerator() {
    this.kinds = Collections.singleton("dataObject");
  }

  @Override
  public Collection> annotations() {
    return Arrays.asList(ModuleGen.class, DataObject.class);
  }

  @Override
  final void render(DataObjectModel model, int index, int size, Map session, CodeWriter writer) {
    String packageName = model.getType().translatePackageName(id);
    genPackageOrNamespace(writer, packageName);
    writer.println();
    genImportsOrUses(model, writer);
    writer.println();

    genClassTemplate(model, writer);
  }

  final void genClassTemplate(DataObjectModel model, CodeWriter writer) {
    Doc doc = model.getDoc();
    if (doc != null) {
      writer.println("/**");
      Token.toHtml(doc.getTokens(), " *", this::renderLinkToHtml, "\n", writer);
      writer.println(" */");
    }
    genClassStartTemplate(model, writer);
    writer.println();
    writer.indent();

    genConstructor(model, writer);

    for (PropertyInfo property : model.getPropertyMap().values()) {
      if (property.getAdderMethod() != null) {
        genAdderMethod(model, property, writer);
      }
      if (property.getGetterMethod() != null) {
        genGetterMethod(model, property, writer);
      }
      if (property.getSetterMethod() != null) {
        genSetterMethod(model, property, writer);
      }
    }
    writer.unindent().print("}");
  }

  abstract void genPackageOrNamespace(CodeWriter writer, String packageOrNamespace);

  abstract void genImportsOrUses(DataObjectModel model, CodeWriter writer);

  abstract void genClassStartTemplate(DataObjectModel model, CodeWriter writer);

  abstract void genConstructor(DataObjectModel model, CodeWriter writer);

  abstract void genAdderMethod(DataObjectModel model, PropertyInfo property, CodeWriter writer);

  abstract void genGetterMethod(DataObjectModel model, PropertyInfo property, CodeWriter writer);

  abstract void genSetterMethod(DataObjectModel model, PropertyInfo property, CodeWriter writer);


  abstract String renderLinkToHtml(Tag.Link link);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy