![JAR search and dependency download from the Maven repository](/logo.png)
io.pelle.mango.db.dao.BaseVODAO Maven / Gradle / Ivy
The newest version!
package io.pelle.mango.db.dao;
import io.pelle.mango.client.base.vo.IBaseEntity;
import io.pelle.mango.client.base.vo.IBaseVO;
import io.pelle.mango.client.base.vo.IVOEntity;
import io.pelle.mango.client.base.vo.query.CountQuery;
import io.pelle.mango.client.base.vo.query.SelectQuery;
import io.pelle.mango.db.query.ServerCountQuery;
import io.pelle.mango.db.util.DBUtil;
import io.pelle.mango.db.util.EntityVOMapper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.Collections2;
@Component
public class BaseVODAO extends BaseDAO {
@Autowired(required = false)
private List voDaoDecorators = new ArrayList();
@Autowired
private IBaseEntityDAO baseEntityDAO;
@SuppressWarnings("unchecked")
@Override
public T create(T baseVO) {
// if (baseVO instanceof IHasMetadata) {
// ((IHasMetadata) baseVO).getMetadata().disableLoadChecking();
// }
IBaseEntity baseEntity = DBUtil.convertVOToEntityClass(baseVO);
baseEntity = baseEntityDAO.create(baseEntity);
T result = (T) DBUtil.convertEntityToVO(baseEntity);
decorateVO(result);
return result;
}
@SuppressWarnings("unchecked")
@Override
public T read(long id, Class voClass) {
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
IBaseEntity baseEntity = baseEntityDAO.read(id, entityClass);
return (T) DBUtil.convertEntityToVO(baseEntity);
}
@Override
public void deleteAll(Class voClass) {
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
baseEntityDAO.deleteAll(entityClass);
}
@SuppressWarnings("unchecked")
@Override
public T save(T baseVO) {
IBaseEntity baseEntity = DBUtil.convertVOToEntityClass(baseVO);
baseEntity = baseEntityDAO.save(baseEntity);
T result = (T) DBUtil.convertEntityToVO(baseEntity);
decorateVO(result);
return result;
}
@Override
public void delete(T baseVO) {
IBaseEntity baseEntity = DBUtil.convertVOToEntityClass(baseVO);
baseEntityDAO.delete(baseEntity);
}
@Override
public Optional read(SelectQuery selectQuery) {
List result = filter(selectQuery);
if (result.size() == 1) {
return Optional.of(result.get(0));
} else {
return Optional. absent();
}
}
@Override
public List filter(SelectQuery selectQuery) {
List entityResult = (List) getResultListInternal(selectQuery, entityManager);
final Map, Set> loadAssociations = DBUtil.getLoadAssociations(selectQuery);
return new ArrayList<>(Collections2.transform(entityResult, new Function() {
@Override
public T apply(IBaseEntity baseEntity) {
@SuppressWarnings("unchecked")
T baseVO = (T) DBUtil.convertEntityToVO(baseEntity, loadAssociations);
decorateVO(baseVO);
return baseVO;
}
}));
}
@Override
@SuppressWarnings("unchecked")
public List getAll(Class voClass) {
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
return (List) baseEntityDAO.getAll(entityClass);
}
@Override
public long count(CountQuery countQuery) {
return (long) entityManager.createQuery(ServerCountQuery.adapt(countQuery).getJPQL(EntityVOMapper.getInstance())).getSingleResult();
}
@Override
public List searchByNaturalKey(Class entityClass, String naturalKey) {
return filter(DBUtil.getNaturalKeyQuery(entityClass, naturalKey));
}
@Override
public void delete(Class voClass, long id) {
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
baseEntityDAO.delete(entityClass, id);
}
@Override
public long count(Class voClass) {
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
return baseEntityDAO.count(entityClass);
}
private void decorateVO(IBaseVO vo) {
for (IVODAODecorator voDaoDecorator : this.voDaoDecorators) {
if (voDaoDecorator.supports(vo.getClass())) {
voDaoDecorator.decorateVO(vo);
}
}
}
@Override
public T getNewVO(String className, Map properties) {
Class extends IBaseVO> voClass = EntityVOMapper.getInstance().getVOClass(className);
Class extends IBaseEntity> entityClass = EntityVOMapper.getInstance().getMappedEntityClass(voClass);
IBaseEntity entity = baseEntityDAO.getNewVO(entityClass.getName(), properties);
T result = DBUtil. convertEntityToVO(entity);
decorateVO(result);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy