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

com.blossomproject.generator.classes.MapperGenerator Maven / Gradle / Ivy

package com.blossomproject.generator.classes;

import com.helger.jcodemodel.AbstractJClass;
import com.helger.jcodemodel.JBlock;
import com.helger.jcodemodel.JCodeModel;
import com.helger.jcodemodel.JDefinedClass;
import com.helger.jcodemodel.JExpr;
import com.helger.jcodemodel.JInvocation;
import com.helger.jcodemodel.JMethod;
import com.helger.jcodemodel.JMod;
import com.helger.jcodemodel.JOp;
import com.helger.jcodemodel.JVar;
import com.blossomproject.core.common.mapper.AbstractDTOMapper;
import com.blossomproject.generator.configuration.model.Field;
import com.blossomproject.generator.configuration.model.Settings;
import com.blossomproject.generator.utils.GeneratorUtils;

public class MapperGenerator implements ClassGenerator {

  private AbstractJClass entityClass;
  private AbstractJClass dtoClass;

  @Override
  public void prepare(Settings settings, JCodeModel codeModel) {
    this.entityClass = codeModel.ref(GeneratorUtils.getEntityFullyQualifiedClassName(settings));
    this.dtoClass = codeModel.ref(GeneratorUtils.getDtoFullyQualifiedClassName(settings));
  }

  @Override
  public JDefinedClass generate(Settings settings, JCodeModel codeModel) {
    try {

      JDefinedClass definedClass = codeModel
        ._class(GeneratorUtils.getMapperFullyQualifiedClassName(settings));
      definedClass._extends(codeModel.ref(AbstractDTOMapper.class).narrow(entityClass, dtoClass));

      buildMapEntity(definedClass, settings);
      buildMapDto(definedClass, settings);

      return definedClass;
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException("Can't generate mapper class", e);
    }
  }

  private void buildMapEntity(JDefinedClass definedClass, Settings settings) {

    JMethod mapEntity = definedClass.method(JMod.PUBLIC, dtoClass, "mapEntity");
    JVar entity = mapEntity.param(entityClass, "entity");
    JBlock mapEntityBody = mapEntity.body();
    mapEntityBody._if(JOp.eq(entity, JExpr._null()))._then()._return(JExpr._null());

    JVar dto = mapEntityBody.decl(dtoClass, "dto", JExpr._new(dtoClass));
    JInvocation mapEntityCommonFields = mapEntityBody.invoke("mapEntityCommonFields").arg(dto)
      .arg(entity);

    for (Field field : settings.getFields()) {
      mapEntityBody.add(dto.invoke(field.getSetterName()).arg(entity.invoke(field.getGetterName())));
    }

    mapEntityBody._return(dto);

  }

  private void buildMapDto(JDefinedClass definedClass, Settings settings) {

    JMethod mapDto = definedClass.method(JMod.PUBLIC, entityClass, "mapDto");
    JVar dto = mapDto.param(dtoClass, "dto");
    JBlock mapDtoBody = mapDto.body();
    mapDtoBody._if(JOp.eq(dto, JExpr._null()))._then()._return(JExpr._null());

    JVar entity = mapDtoBody.decl(entityClass, "entity", JExpr._new(entityClass));
    JInvocation mapDtoCommonFields = mapDtoBody.invoke("mapDtoCommonFields").arg(entity).arg(dto);


    for (Field field : settings.getFields()) {
      mapDtoBody.add(entity.invoke(field.getSetterName()).arg(dto.invoke(field.getGetterName())));
    }

    mapDtoBody._return(entity);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy