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

org.jboss.pressgang.ccms.provider.DBDataProvider Maven / Gradle / Ivy

package org.jboss.pressgang.ccms.provider;

import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.PersistenceException;
import javax.persistence.criteria.CriteriaQuery;
import javax.validation.ValidationException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.hibernate.envers.exception.RevisionDoesNotExistException;
import org.jboss.pressgang.ccms.model.base.AuditedEntity;
import org.jboss.pressgang.ccms.model.exceptions.CustomConstraintViolationException;
import org.jboss.pressgang.ccms.model.utils.EnversUtilities;
import org.jboss.pressgang.ccms.provider.exception.BadRequestException;
import org.jboss.pressgang.ccms.provider.exception.InternalServerErrorException;
import org.jboss.pressgang.ccms.provider.exception.NotFoundException;
import org.jboss.pressgang.ccms.provider.exception.ProviderException;
import org.jboss.pressgang.ccms.provider.listener.ProviderListener;
import org.jboss.pressgang.ccms.wrapper.DBWrapperFactory;

public class DBDataProvider extends DataProvider {
    private final EntityManager entityManager;

    protected DBDataProvider(final EntityManager entityManager, final DBProviderFactory providerFactory,
            final List listeners) {
        super(providerFactory, listeners);
        this.entityManager = entityManager;
    }

    protected EntityManager getEntityManager() {
        return entityManager;
    }

    @Override
    protected DBProviderFactory getProviderFactory() {
        return (DBProviderFactory) super.getProviderFactory();
    }

    protected DBWrapperFactory getWrapperFactory() {
        return getProviderFactory().getWrapperFactory();
    }

    protected  T getEntity(Class clazz, Integer id) {
        try {
            final T entity = getEntityManager().find(clazz, id);
            if (entity == null) {
                throw new NotFoundException("Unable to find " + clazz.getSimpleName()  + " with id " + id);
            } else {
                return entity;
            }
        } catch (Exception e) {
            throw handleException(e);
        }
    }

    protected  T getRevisionEntity(T entity, Integer revision) {
        return getRevisionEntity((Class) entity.getClass(), entity.getId(), revision);
    }

    protected  T getRevisionEntity(Class entityClass, Integer id, Integer revision) {
        try {
            final T entity =  EnversUtilities.getRevision(getEntityManager(), entityClass, id, revision);
            if (entity == null) {
                throw new NotFoundException();
            } else {
                return entity;
            }
        } catch (Exception e) {
            throw handleException(e);
        }
    }

    protected  List getRevisionList(Class entityClass, Integer id) {
        try {
            final Map revisionMapping = EnversUtilities.getRevisionEntities(getEntityManager(), entityClass, id);

            final List revisions = new ArrayList();
            for (final Map.Entry entry : revisionMapping.entrySet()) {
                revisions.add(entry.getValue());
            }

            return revisions;
        } catch (Exception e) {
            throw handleException(e);
        }
    }

    protected  List executeQuery(final CriteriaQuery query) {
        try {
            return getEntityManager().createQuery(query).getResultList();
        } catch (Exception e) {
            throw handleException(e);
        }
    }

    protected RuntimeException handleException(final Exception e) {
        if (e instanceof EntityNotFoundException || e instanceof RevisionDoesNotExistException) {
            return new NotFoundException(e);
        } else if (e instanceof ProviderException) {
            return (ProviderException) e;
        } else if (e instanceof PersistenceException || e instanceof ValidationException || e instanceof
                CustomConstraintViolationException) {
            return new BadRequestException(e);
        } else {
            return new InternalServerErrorException(e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy