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

de.alpharogroup.service.domain.AbstractDomainService Maven / Gradle / Ivy

There is a newer version: 5.0.0
Show newest version
package de.alpharogroup.service.domain;

import java.io.Serializable;

import lombok.Getter;
import lombok.Setter;
import de.alpharogroup.db.dao.jpa.EntityManagerDao;
import de.alpharogroup.db.entity.BaseEntity;
import de.alpharogroup.db.entitymapper.EntityDOMapper;
import de.alpharogroup.domain.DomainObject;
import de.alpharogroup.lang.ObjectExtensions;
import de.alpharogroup.lang.TypeArgumentsExtensions;

/**
 * The Class {@link AbstractDomainService}.
 *
 * @param  the generic type of the primary key
 * @param  the generic type of the domain object
 * @param  the element type of the entity
 * @param  the generic type of the data transfer object
 * @param  the generic type of the entity mapper
 */
public abstract class AbstractDomainService<
PK extends Serializable, 
DO extends DomainObject, 
E extends BaseEntity, 
DAO extends EntityManagerDao,
M extends EntityDOMapper>
 implements
		DomainService {
	/** The dao reference. */
	@Setter
	@Getter
	private DAO dao;
	
	/**
	 * The mapper.
	 */
	@Setter
	@Getter
	private M mapper;
    /** The entity class. */
    @SuppressWarnings("unchecked")
    @Getter
    private final Class entityClass = (Class) TypeArgumentsExtensions.getTypeArgument(AbstractDomainService.class, getClass(), 2);
    
    /** The domain object class. */
    @SuppressWarnings("unchecked")
    @Getter
    private final Class domainObjectClass = (Class) TypeArgumentsExtensions.getTypeArgument(AbstractDomainService.class, getClass(), 1);

	/**
	 * {@inheritDoc}
	 */
	@Override
	public DO read(PK id) {
		E entity = dao.get(id);
		return getMapper().toDomainObject(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public DO create(DO domainObject) {
		E entity = getMapper().toEntity(domainObject);
		domainObject.setId(dao.save(entity));
		return domainObject;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void update(DO domainObject) {
		E entity = dao.get(domainObject.getId());
		ObjectExtensions.copyQuietly(entity, domainObject);
		dao.merge(entity);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void delete(PK id) {
		dao.delete(id);
	}	

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy