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:com.sdm.core.hibernate.dao.AuditDAO.java

private AuditQuery getQueryById(Class entityClass, Object id) {
    return reader.createQuery().forRevisionsOfEntity(entityClass, false, true)
            .addOrder(AuditEntity.revisionNumber().desc()).add(AuditEntity.id().eq(id));
}

From source file:com.sdm.core.hibernate.dao.AuditDAO.java

public List<?> getNewDataByVersion(Class entityClass, long version) {
    AuditQuery query = reader.createQuery().forRevisionsOfEntity(entityClass, false, true)
            .add(AuditEntity.revisionNumber().gt(version))
            .add(AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext())
            .addOrder(AuditEntity.revisionNumber().desc());

    List data = query.getResultList();

    List<Map<String, Object>> responseList = new ArrayList<>();
    for (Object result : data) {
        responseList.add(this.convertMap((Object[]) result));
    }// ww  w.jav  a  2 s.  co  m

    return responseList;

}

From source file:com.sdm.core.hibernate.dao.AuditDAO.java

public HashMap<String, Object> getDataByVersion(Class entityClass, Object id, long version) {
    Object data = this.getQueryById(entityClass, id).add(AuditEntity.revisionNumber().eq(version))
            .getSingleResult();/*  ww  w. j  av a  2s  .c o  m*/

    return this.convertMap(((Object[]) data));
}

From source file:com.sdm.core.hibernate.dao.AuditDAO.java

public long getTotal(Class entityClass, Object id) {
    Object data = this.getQueryById(entityClass, id).addProjection(AuditEntity.revisionNumber().count())
            .getSingleResult();/*  w  ww  .  ja va  2  s  .  c  om*/
    return (long) data;
}

From source file:com.webbfontaine.valuewebb.envers.AuditedEntityLoader.java

License:Open Source License

private SimpleDocument getAuditRecord(Class entityClass) {
    Integer revNum = Integer.parseInt(this.revNum);
    Long entityId = Long.valueOf(this.entityId);

    Object auditRecord;/*from ww w  .  j a  v  a2  s. c  o  m*/
    AuditReader reader = AuditReaderFactory.get(Utils.getEntityManager());

    AuditQuery auditQuery = reader.createQuery().forEntitiesAtRevision(entityClass, revNum)
            .add(AuditEntity.revisionNumber().eq(revNum)).add(AuditEntity.id().eq(entityId));
    List result = auditQuery.getResultList();
    if (result.isEmpty()) {
        auditQuery = reader.createQuery().forEntitiesAtRevision(entityClass, revNum)
                .add(AuditEntity.revisionNumber().le(revNum)).add(AuditEntity.id().eq(entityId));
        auditRecord = auditQuery.getResultList().get(0);
    } else {
        auditRecord = result.get(0);
    }

    SimpleDocument simpleDocument = null;

    if (auditRecord instanceof SimpleDocument) {
        simpleDocument = (SimpleDocument) auditRecord;
    } else {
        LOGGER.error("Audited entity of class {} does not implement necessary logic of {}",
                auditRecord.getClass().getName(), SimpleDocument.class.getName());
    }

    return simpleDocument;
}

From source file:cz.filmtit.userspace.Session.java

License:Open Source License

/**
 * Loads previous versions of subtitle items
 *
 * @param results list of currently loaded Translation Results
 * @param date date before which the translation results to load were
 * created/*ww w .jav  a  2s  .c  o m*/
 * @return returns list of old Translation Results created before given date
 */
public List<TranslationResult> loadPreviousVersions(List<TranslationResult> results, Date date) {
    AuditReader auditReader = AuditReaderFactory.get(usHibernateUtil.getSessionWithActiveTransaction());
    List<TranslationResult> tResults = new ArrayList<TranslationResult>();

    try {

        Number revisionNumber = auditReader.getRevisionNumberForDate(date);

        logger.log(Logger.Level.ERROR, revisionNumber);

        for (TranslationResult result : results) {
            List resultList = auditReader.createQuery()
                    .forRevisionsOfEntity(USTranslationResult.class, true, false)
                    .add(AuditEntity.id().eq(result.getId()))
                    .add(AuditEntity.revisionNumber().le(revisionNumber))
                    .addOrder(AuditEntity.revisionNumber().desc()).getResultList();

            if (resultList != null && !resultList.isEmpty()) {
                USTranslationResult singleResult = (USTranslationResult) resultList.get(0);
                tResults.add(singleResult.getTranslationResult());
            }
        }

    } catch (RevisionDoesNotExistException e) {
        logger.log(Logger.Level.ERROR, e.getDate() + " " + e.getRevision());
    }

    return tResults;

}

From source file:cz.filmtit.userspace.Session.java

License:Open Source License

/**
 * Loads old Subtitle Item for a given Translation Result created before
 * revision number// w ww.j a v  a2 s  .  c o  m
 *
 * @param result Translation Result of which to load old version
 * @param number Revision Number
 * @return returns an object containing old version of Translation Result
 * and number of revision at which it was created
 */
public AuditResponse loadOldTranslationResult(TranslationResult result, Number number) {
    AuditReader auditReader = AuditReaderFactory.get(usHibernateUtil.getSessionWithActiveTransaction());

    if (number == null) {
        number = Integer.MAX_VALUE;
    }

    Number revisionNumber = (Number) auditReader.createQuery()
            .forRevisionsOfEntity(USTranslationResult.class, true, false)
            .add(AuditEntity.id().eq(result.getId())).addProjection(AuditEntity.revisionNumber().max())
            .add(AuditEntity.revisionNumber().lt(number))
            .add(AuditEntity.or(AuditEntity.property("userTranslation").hasChanged(),
                    AuditEntity.property("posteditedString").hasChanged()))
            .getSingleResult();

    if (revisionNumber == null) {
        return new AuditResponse();
    }

    USTranslationResult singleResult = (USTranslationResult) auditReader.createQuery()
            .forEntitiesAtRevision(USTranslationResult.class, revisionNumber)
            .add(AuditEntity.id().eq(result.getId())).getSingleResult();

    if (singleResult == null) {
        return new AuditResponse();
    }

    logger.log(Logger.Level.ERROR, singleResult.getTranslationResult() + " " + revisionNumber);

    return new AuditResponse(singleResult.getTranslationResult(), revisionNumber);
}

From source file:de.crowdcode.bitemporal.example.AddressRepository.java

License:Apache License

public Number findRevisionNumberByAddressIdAndRevisionNumber(Long addressId, Number revisionNumber) {
    Number revision = (Number) getAuditReader().createQuery()
            .forRevisionsOfEntity(AddressImpl.class, false, true)
            .addProjection(AuditEntity.revisionNumber().min()).add(AuditEntity.id().eq(addressId))
            .add(AuditEntity.revisionNumber().gt(revisionNumber)).getSingleResult();
    return revision;
}

From source file:de.iteratec.iteraplan.persistence.dao.HistoryDAOImpl.java

License:Open Source License

public <T extends BuildingBlock> T getPreceedingRevisionFor(Class<T> entityClass, Integer bbId,
        Integer currentRevId) {//from ww w  .j ava2 s.  c om
    AuditReader auditReader = getAuditReader();

    // Query to get max Rev less than this one (Should exist, since this is a MOD, but might not
    Number prevRev = (Number) auditReader.createQuery().forRevisionsOfEntity(entityClass, true, true)
            .addProjection(AuditEntity.revisionNumber().max()).add(AuditEntity.id().eq(bbId))
            .add(AuditEntity.revisionNumber().lt(currentRevId)).getSingleResult();

    // If History recording was off during the Initial creation of this BB, this MOD rev might be the
    // first known rev
    if (prevRev == null) {
        return null;
    }

    return auditReader.find(entityClass, bbId, prevRev);
}

From source file:de.iteratec.iteraplan.persistence.dao.HistoryDAOImpl.java

License:Open Source License

/** {@inheritDoc} */
@SuppressWarnings({ "unchecked", "boxing" })
public <T extends BuildingBlock> List<BuildingBlockRevision<T>> getRevisionBounded(final Class<T> entityClass,
        Integer id, Integer curPage, Integer pageSize, DateTime fromDate, DateTime toDate) {

    Preconditions.checkArgument(id != null && id.intValue() >= 0, "Param id is invalid, should be >=0");
    Preconditions.checkArgument(pageSize >= -1, "Param pageSize is invalid, should be -1 or >0");
    Preconditions.checkArgument(pageSize.intValue() != 0, "Param pageSize is invalid, should be -1 or >0"); //would lead to /0 err

    AuditReader auditReader = getAuditReader();

    // Query retrieves RevisionType in addition to Entity; Revs of type DEL are not retrieved
    // Get date on revisions of this BB
    AuditQuery curPageQuery = auditReader.createQuery().forRevisionsOfEntity(entityClass, false, false)
            .add(AuditEntity.id().eq(id));

    // Limit results by date
    if (fromDate != null) {
        Long fromDateLong = Long.valueOf(fromDate.getMillis());
        curPageQuery.add(AuditEntity.revisionProperty(TIMESTAMP_PROPERTY).ge(fromDateLong));
    }//  w w w  . j a  va  2s .  c o  m
    if (toDate != null) {
        Long toDateLong = Long.valueOf(toDate.getMillis());
        curPageQuery.add(AuditEntity.revisionProperty(TIMESTAMP_PROPERTY).le(toDateLong));
    }

    int firstResult = curPage * pageSize;

    // Paging (first results, max results), disabled when requesting all results (pageSize=-1)
    if (pageSize > 0) {
        curPageQuery.setFirstResult(firstResult).setMaxResults(pageSize);
    }

    // Object Array[3] contains: T, HistoryRevisionEntity, RevisionType
    List<Object[]> revsList = curPageQuery.addOrder(AuditEntity.revisionNumber().desc()).getResultList();

    return Lists.newArrayList(Lists.transform(revsList, new Function<Object[], BuildingBlockRevision<T>>() {

        @Override
        public BuildingBlockRevision<T> apply(Object[] revObjects) {
            return new BuildingBlockRevision<T>(revObjects, entityClass);
        }

    }));
}