Example usage for org.hibernate.envers.query AuditEntity revisionNumber

List of usage examples for org.hibernate.envers.query AuditEntity revisionNumber

Introduction

In this page you can find the example usage for org.hibernate.envers.query AuditEntity revisionNumber.

Prototype

public static AuditProperty<Number> revisionNumber() 

Source Link

Document

Create restrictions, projections and specify order for the revision number, corresponding to an audited entity.

Usage

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

License:Open Source License

public List<AuditViewEntry> getAuditViewEntriesForResource(Integer resourceId) {
    // Map<Hashcode, AuditViewEntry>
    Map<Integer, AuditViewEntry> allAuditViewEntries = new HashMap<>();
    AuditReader reader = AuditReaderFactory.get(entityManager);
    CrossTypeRevisionChangesReader crossTypeRevisionChangesReader = reader.getCrossTypeRevisionChangesReader();
    List<MyRevisionEntity> revisionsForResource = getRevisionsForResource(resourceId);
    for (MyRevisionEntity revisionEntity : revisionsForResource) {
        List<Object> changedEntitiesForRevision = crossTypeRevisionChangesReader
                .findEntities(revisionEntity.getId());
        for (Object o : changedEntitiesForRevision) {
            List resultList = reader.createQuery().forRevisionsOfEntity(o.getClass(), false, true)
                    .add(AuditEntity.revisionNumber().eq(revisionEntity.getId())).getResultList();
            createAuditViewEntriesAndAddToMap(allAuditViewEntries, resultList);
        }//from w  ww .  j a va  2 s .c o m
    }
    return new ArrayList<>(allAuditViewEntries.values());
}

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.  j  av  a2s .c o  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. j ava 2s  .c  o 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 www.  j  a va  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  .  j  a  va2 s. c om
            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//from ww  w.ja v  a  2s.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//w  w  w  . jav a2s  .c  o  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)));
    }
}

From source file:com.confighub.core.store.Store.java

License:Open Source License

public Property getAuditProperty(final Repository repository, final UserAccount user, final long propertyId,
        final long revId) throws ConfigException {
    try {/*w w w  . j a  v a2  s .  com*/
        if (!repository.hasReadAccess(user)) {
            throw new ConfigException(Error.Code.USER_ACCESS_DENIED);
        }

        AuditReader reader = AuditReaderFactory.get(em);
        AuditQuery query = reader.createQuery().forRevisionsOfEntity(Property.class, true, true)
                .add(AuditEntity.revisionNumber().ge(revId)).add(AuditEntity.revisionNumber().le(revId))
                .add(AuditEntity.property("repository").eq(repository)).add(AuditEntity.id().eq(propertyId));

        return (Property) query.getSingleResult();
    } catch (NoResultException e) {
        return null;
    }
}

From source file:com.confighub.core.store.Store.java

License:Open Source License

public RepoFile getAuditConfigFile(final UserAccount user, final Repository repository, final Long fileId,
        final Long revId) throws ConfigException {
    try {/*  www  .  j  av  a 2 s.  com*/
        if (!repository.hasReadAccess(user)) {
            throw new ConfigException(Error.Code.USER_ACCESS_DENIED);
        }

        AuditReader reader = AuditReaderFactory.get(em);

        AuditQuery query = reader.createQuery().forRevisionsOfEntity(RepoFile.class, true, true)
                .add(AuditEntity.revisionNumber().ge(revId)).add(AuditEntity.revisionNumber().le(revId))
                .add(AuditEntity.property("repository").eq(repository)).add(AuditEntity.id().eq(fileId));

        return (RepoFile) query.getSingleResult();
    } catch (NoResultException e) {
        return null;
    } catch (Exception e) {
        handleException(e);
        return null;
    }
}

From source file:com.griffinslogistics.dao.DAO.java

@Override
public List getRevisions(Class aClass, Long id) {
    AuditReader auditReader = AuditReaderFactory.get(this.sessionFactory.getCurrentSession());
    AuditQuery query = auditReader.createQuery().forRevisionsOfEntity(aClass, false, true)
            .add(AuditEntity.property("id").eq(id)).addOrder(AuditEntity.revisionNumber().desc());
    List result = query.getResultList();

    return result;
}