de.alpharogroup.service.domain.AbstractDomainService Maven / Gradle / Ivy
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