Example usage for org.hibernate.envers.query AuditQuery getResultList

List of usage examples for org.hibernate.envers.query AuditQuery getResultList

Introduction

In this page you can find the example usage for org.hibernate.envers.query AuditQuery getResultList.

Prototype

List getResultList() throws AuditException;

Source Link

Usage

From source file:br.ufac.sion.service.AuditoriaService.java

public Set<AuditoriaDTO> findAllRevisions(FiltroAuditoria filtro) throws NegocioException {
    if (filtro.getDataInicio() != null && filtro.getDataFim() != null) {
        if (!filtro.getDataFim().isAfter(filtro.getDataInicio())) {
            throw new NegocioException("A data de termino deve ser maior que a data de incio!");
        }/*from www .j  a va 2s . c om*/
    }
    Set<AuditoriaDTO> dtos = new HashSet<>();

    AuditReader reader = AuditReaderFactory.get(em);

    AuditQuery query = reader.createQuery().forRevisionsOfEntity(filtro.getClasse(), false, true);

    if (filtro.getDataInicio() != null) {
        query.add(AuditEntity.revisionProperty("timestamp")
                .gt(Timestamp.from(filtro.getDataInicio().toInstant(ZoneOffset.UTC)).getTime()));
    }
    if (filtro.getDataFim() != null) {
        query.add(AuditEntity.revisionProperty("timestamp")
                .lt(Timestamp.from(filtro.getDataFim().toInstant(ZoneOffset.UTC)).getTime()));
    }

    if (StringUtils.isNotEmpty(filtro.getLogin())) {
        query.add(AuditEntity.revisionProperty("username").ilike(filtro.getLogin(), MatchMode.EXACT));
    }

    if (filtro.getTiposRevisao().length > 0) {
        System.out.println("entra id tipo revisao");
        query.add(AuditEntity.property("REVTYPE").in(filtro.getTiposRevisao()));
    }

    List<Object[]> result = query.getResultList();

    for (Object[] o : result) {
        try {
            //                Object instancia = filtro.getClass().cast(o[0]);
            Object instancia = Class.forName(filtro.getClasse().getName()).cast(o[0]);
            //                Method metodo;
            //                metodo = instancia.getClass().getMethod("getId");
            //                Long id = (Long) metodo.invoke(instancia);

            CustomRevisionEntity revision = (CustomRevisionEntity) o[1];
            RevisionType revisionType = (RevisionType) o[2];

            Instant instant = Instant.ofEpochMilli(revision.getTimestamp());

            AuditoriaDTO dto = new AuditoriaDTO(instancia, revisionType, filtro.getEntidade(), revision);

            dtos.add(dto);
        } catch (Exception ex) {
            throw new NegocioException(ex.getMessage());
        }
    }
    return dtos;
}

From source file:br.ufac.sion.service.AuditoriaService.java

public <T> List<T> findRevisionsById(Class<?> classe, Long id) {
    AuditReader reader = AuditReaderFactory.get(em);

    AuditQuery q = reader.createQuery().forRevisionsOfEntity(classe, true, true);
    q.add(AuditEntity.id().eq(id));/*from   w  ww. j  a v a 2s .  c  o  m*/
    List<T> audit = q.getResultList();

    return audit;
}

From source file:ch.puzzle.itc.mobiliar.business.auditview.control.AuditService.java

License:Open Source License

@SuppressWarnings("unchecked")
public <T> Object getDeletedEntity(T entity, Integer id) {
    Objects.requireNonNull(entity, "Entity can not be null");
    Objects.requireNonNull(id, "Id can not be null");

    AuditReader reader = AuditReaderFactory.get(entityManager);

    if (reader.isEntityClassAudited(entity.getClass())) {
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(entity.getClass(), false, true)
                .add(AuditEntity.id().eq(id)).add(AuditEntity.revisionType().eq(DEL));

        List<Object[]> resultList = query.getResultList();
        if (!resultList.isEmpty()) {
            return resultList.get(0)[0];
        }/*from  www . jav  a 2  s.  co  m*/
    }
    return null;
}

From source file:ch.puzzle.itc.mobiliar.business.auditview.control.AuditService.java

License:Open Source License

@SuppressWarnings("unchecked")
public List<Object> getAllDeletedEntities(Class clazz) {
    Objects.requireNonNull(clazz, "Clazz can not be null");

    AuditReader reader = AuditReaderFactory.get(entityManager);

    if (reader.isEntityClassAudited(clazz)) {
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(clazz, false, true)
                .add(AuditEntity.revisionType().eq(DEL));

        List<Object[]> resultList = query.getResultList();
        if (!resultList.isEmpty()) {
            List<Object> deleted = new ArrayList<>();
            for (Object[] objects : resultList) {
                deleted.add(objects[0]);
            }//from   w ww .  ja v  a2  s  . c  om
            return deleted;
        }
    }
    return Collections.EMPTY_LIST;
}

From source file:ch.puzzle.itc.mobiliar.business.auditview.control.AuditService.java

License:Open Source License

/**
 * @return a list of three-element arrays, containing:
 * <ol>//from w ww.  ja va2s  . co m
 * <li>the entity instance</li>
 * <li>revision entity, corresponding to the revision at which the entity was modified. If no custom
 * revision entity is used, this will be an instance of {@link org.hibernate.envers.DefaultRevisionEntity}</li>
 * <li>type of the revision (an enum instance of class {@link org.hibernate.envers.RevisionType})</li>
 * </ol>
 */
private <T> List getAllRevisionsForEntity(T entity, Integer id) {
    Objects.requireNonNull(entity, "Entity can not be null");
    Objects.requireNonNull(id, "Id can not be null");

    AuditReader reader = AuditReaderFactory.get(entityManager);
    Number revisionNumberOneYearAgo = getRevisionNumberOneYearAgo(reader);

    if (reader.isEntityClassAudited(entity.getClass())) {
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(entity.getClass(), false, true)
                .add(AuditEntity.id().eq(id)).add(AuditEntity.revisionNumber().gt(revisionNumberOneYearAgo))
                .addOrder(AuditEntity.revisionNumber().desc());
        return (List<T>) query.getResultList();
    }
    return null;
}

From source file:com.actelion.research.spiritcore.services.dao.DAORevision.java

License:Open Source License

/**
 * Returns all revisions of the given entity until the given maxRevId
 * @param obj//w w  w  . java 2s. co  m
 * @param maxRevId (-1, to ignore)
 * @return
 */
@SuppressWarnings("unchecked")
public static List<Revision> getLastRevisions(Class<?> claz, Serializable entityId, int maxRevId, int n) {

    long s = System.currentTimeMillis();
    EntityManager session = JPAUtil.getManager();
    AuditReader reader = AuditReaderFactory.get(session);
    AuditQuery query = reader.createQuery().forRevisionsOfEntity(claz, false, true).setCacheable(false)
            .setLockMode(LockMode.NONE);
    query.add(AuditEntity.id().eq(entityId));

    if (maxRevId > 0) {
        query.add(AuditEntity.revisionNumber().le(maxRevId));
    }
    if (n > 0) {
        query.setMaxResults(n);
        query.addOrder(AuditEntity.revisionNumber().desc());
    }
    List<Revision> revisions = getRevisions(null, query.getResultList());
    LoggerFactory.getLogger(DAORevision.class).debug("Loaded revisions for " + claz.getSimpleName() + "("
            + entityId + ") maxRevId=" + maxRevId + "-" + n + " in " + (System.currentTimeMillis() - s) + "ms");
    return revisions;
}

From source file:com.actelion.research.spiritcore.services.dao.DAORevision.java

License:Open Source License

/**
 * Get the different version of an element, the first element of the list shows the most recent version
 * @param obj//from  w w  w.j  av  a 2  s .c  o  m
 * @return
 */
public static <T extends IObject> List<T> getHistory(Class claz, Serializable objectId, int maxRevs) {
    long s = System.currentTimeMillis();
    EntityManager session = JPAUtil.getManager();
    AuditReader reader = AuditReaderFactory.get(session);
    AuditQuery query = reader.createQuery().forRevisionsOfEntity(claz, true, false)
            .add(AuditEntity.id().eq(objectId)).addOrder(AuditEntity.revisionNumber().desc())
            .setCacheable(false).setLockMode(LockMode.NONE);
    if (maxRevs > 0) {
        query.setMaxResults(maxRevs);
    }
    List<T> res = query.getResultList();
    for (T t : res) {
        session.detach(t);
    }

    LoggerFactory.getLogger(DAORevision.class).debug("Loaded history for " + claz.getSimpleName() + ": ("
            + objectId + ") in " + (System.currentTimeMillis() - s) + "ms");
    return res;
}

From source file:com.actelion.research.spiritcore.services.dao.DAORevision.java

License:Open Source License

private static List<Object[]> queryForRevisions(AuditReader reader, Set<Class<?>> entityClasses, int minRev,
        int maxRev, String userFilter, int sid, String studyIdFilter) {
    List<Object[]> res = new ArrayList<>();
    LoggerFactory.getLogger(DAORevision.class).debug("queryForRevisions " + entityClasses + " " + userFilter
            + " " + sid + " " + studyIdFilter + " " + minRev + " " + maxRev);
    //Find the study Id from the studyId (the study may have been deleted)
    if (sid <= 0 && studyIdFilter != null && studyIdFilter.length() > 0) {
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(Study.class, false, true)
                .add(AuditEntity.revisionType().eq(RevisionType.ADD))
                .add(AuditEntity.property("studyId").eq(studyIdFilter));
        List<Object[]> array = query.getResultList();
        for (Object[] a : array) {
            Study entity = (Study) a[0];
            sid = entity.getId();//from w w w  .ja  va  2 s.  com
            break;
        }
        if (sid <= 0)
            return res;
    }

    for (Class<?> claz : entityClasses) {
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(claz, false, true)
                .add(AuditEntity.revisionNumber().between(minRev, maxRev));
        if (userFilter != null && userFilter.length() > 0 && (claz == Result.class || claz == Biosample.class
                || claz == Study.class || claz == Location.class)) {
            query = query.add(AuditEntity.property("updUser").eq(userFilter));
        }
        if (sid > 0) {
            //If a studyId filter is given, query the properyId directly
            if (claz == Study.class) {
                query = query.add(AuditEntity.property("id").eq(sid));
            } else if (claz == Biosample.class) {
                query = query.add(AuditEntity.property("inheritedStudy").eq(new Study(sid)));
            } else if (claz == Result.class) {
                query = query.add(AuditEntity.property("study").eq(new Study(sid)));
            } else {
                continue;
            }
        }
        res.addAll(query.getResultList());
    }
    return res;
}

From source file:com.actelion.research.spiritcore.services.dao.DAORevision.java

License:Open Source License

/**
 * Gets the last version and the change for the given entity, in the given context.
 * This method should return the last change, even if the changes of the given entity have not been committed.
 *
 * This method should be used exclusively from the SpritRevisionEntityListener to record the differences between the object to be saved and the last revision.
 * (when the record to be saved in already in the audit table)
 *
 * @param entityClass/*ww  w  .  jav a2 s.  c o  m*/
 * @param entityId
 * @return
 */
@SuppressWarnings("unchecked")
public static <T extends IAuditable> Pair<IAuditable, DifferenceList> getLastChange(RevisionType revisionType,
        Class<T> entityClass, Serializable entityId) {
    //Query the 2 last revisions of entityClass:entityId
    EntityManager session = JPAUtil.getManager();
    AuditReader reader = AuditReaderFactory.get(session);
    AuditQuery query = reader.createQuery().forRevisionsOfEntity(entityClass, false, true)
            .add(AuditEntity.id().eq(entityId)).addOrder(AuditEntity.revisionNumber().desc()).setMaxResults(2)
            .setCacheable(false).setLockMode(LockMode.NONE);
    List<Object[]> histories = query.getResultList();

    //Compute the difference between those 2 last versions
    assert histories.size() > 0;

    DifferenceList diff = null;
    if (revisionType == RevisionType.DEL) {
        diff = ((T) histories.get(0)[0]).getDifferenceList(null);
        diff.add("", ChangeType.DEL);
        assert diff.size() == 1;
    } else if (revisionType == RevisionType.ADD) {
        diff = ((T) histories.get(0)[0]).getDifferenceList(null);
        diff.add("", ChangeType.ADD);
        assert diff.size() == 1;
    } else if (histories.size() >= 2) {
        diff = ((T) histories.get(0)[0]).getDifferenceList((T) histories.get(1)[0]);
    } else {
        return null;
    }
    return new Pair<IAuditable, DifferenceList>((T) histories.get(0)[0], diff);
}

From source file:com.actelion.research.spiritcore.services.dao.DAORevision.java

License:Open Source License

/**
 * Returns the lastChange from the given entity.
 * This method should be called outside the SpritRevisionEntityListener (when the record is not yet in the audit table)
 *
 * @param auditable/*from  w ww. j  a  v  a2 s . co  m*/
 * @return
 */
@SuppressWarnings("unchecked")
public static <T extends IAuditable> Pair<T, DifferenceList> getLastChange(IAuditable auditable) {
    //Query the 2 last revisions of entityClass:entityId
    EntityManager session = JPAUtil.getManager();
    AuditReader reader = AuditReaderFactory.get(session);
    AuditQuery query = reader.createQuery().forRevisionsOfEntity(auditable.getClass(), true, true)
            .add(AuditEntity.id().eq(auditable.getSerializableId()))
            .addOrder(AuditEntity.revisionNumber().desc()).setMaxResults(1).setCacheable(false)
            .setLockMode(LockMode.NONE);
    List<IAuditable> histories = query.getResultList();

    //Compute the difference between those 2 last versions
    if (histories.size() == 0) {
        return new Pair<T, DifferenceList>(null, new DifferenceList());
    } else {
        return new Pair<T, DifferenceList>((T) histories.get(0), auditable.getDifferenceList(histories.get(0)));
    }
}