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

com.blossomproject.generator.classes.DaoImplGenerator 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.JMethod;
import com.helger.jcodemodel.JMod;
import com.helger.jcodemodel.JVar;
import com.blossomproject.core.common.dao.GenericCrudDaoImpl;
import com.blossomproject.generator.configuration.model.Field;
import com.blossomproject.generator.configuration.model.Settings;
import com.blossomproject.generator.utils.GeneratorUtils;

public class DaoImplGenerator implements ClassGenerator {

  private AbstractJClass entityClass;
  private AbstractJClass daoClass;
  private AbstractJClass repositoryClass;

  @Override
  public void prepare(Settings settings, JCodeModel codeModel) {
    this.entityClass = codeModel.ref(GeneratorUtils.getEntityFullyQualifiedClassName(settings));
    this.repositoryClass = codeModel.ref(GeneratorUtils.getRepositoryFullyQualifiedClassName(settings));
    this.daoClass = codeModel.ref(GeneratorUtils.getDaoFullyQualifiedClassName(settings));
  }

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

      JDefinedClass definedClass = codeModel._class(GeneratorUtils.getDaoImplFullyQualifiedClassName(settings));
      definedClass._extends(codeModel.ref(GenericCrudDaoImpl.class).narrow(entityClass));
      definedClass._implements(daoClass);

      JMethod constructor = definedClass.constructor(JMod.PUBLIC);
      JVar repositoryParam = constructor.param(repositoryClass, "repository");

      JBlock constructorBody = constructor.body();
      constructorBody.invoke("super").arg(repositoryParam);

      JMethod updateEntity = definedClass.method(JMod.PUBLIC, entityClass, "updateEntity");
      updateEntity.annotate(Override.class);
      JVar originalEntity = updateEntity.param(entityClass, "originalEntity");
      JVar modifiedEntity = updateEntity.param(entityClass, "modifiedEntity");

      JBlock updateEntityBody = updateEntity.body();
      for (Field field : settings.getFields()) {
        if (field.isPossibleUpdate()) {
          updateEntityBody.add(originalEntity.invoke(field.getSetterName()).arg(modifiedEntity.invoke(field.getGetterName())));
        }
      }

      updateEntityBody._return(originalEntity);

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

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy