Example usage for org.hibernate.envers AuditReader getRevisionNumberForDate

List of usage examples for org.hibernate.envers AuditReader getRevisionNumberForDate

Introduction

In this page you can find the example usage for org.hibernate.envers AuditReader getRevisionNumberForDate.

Prototype

Number getRevisionNumberForDate(Date date)
        throws IllegalStateException, RevisionDoesNotExistException, IllegalArgumentException;

Source Link

Document

Gets the revision number, that corresponds to the given date.

Usage

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

License:Open Source License

private Number getRevisionNumberOneYearAgo(AuditReader reader) {
    Calendar c = Calendar.getInstance();
    c.setTime(new Date());
    int currentYear = c.get(Calendar.YEAR);
    c.set(Calendar.YEAR, currentYear - 1);
    return reader.getRevisionNumberForDate(c.getTime());
}

From source file:ch.puzzle.itc.mobiliar.business.database.control.AmwAuditReader.java

License:Open Source License

/**
 * @param clazz//from   ww w. ja  va  2s . c  om
 *             - the entity class which shall be found in the history of the database
 * @param date
 *             - the date for which the result shall be loaded in the history of data
 * @param id
 *             - the id of the entity class that shall be loaded
 * @return the entity-instance with its state at the given date or null if the entity didn't exist at
 *         that time
 * @throws IllegalArgumentException
 *              - if the date is null (re-thrown from {@link AuditReader#getRevisionNumberForDate(Date)})
 */
public <T> T getByDate(final Class<T> clazz, final Date date, final Integer id)
        throws IllegalArgumentException {
    final AuditReader r = getAuditReader();
    Number currentRevisionNumber = null;
    try {
        // find the revision number for the given date
        currentRevisionNumber = r.getRevisionNumberForDate(date);
    } catch (final RevisionDoesNotExistException e) {
        return null;
    }
    return r.find(clazz, id, currentRevisionNumber);
}

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

License:Open Source License

public static List<Revision> queryRevisions(RevisionQuery query) {
    assert query != null;
    long s = System.currentTimeMillis();
    EntityManager session = JPAUtil.getManager();
    AuditReader reader = AuditReaderFactory.get(session);

    int rev1 = 0;
    try {// w  w  w .  j  a  va 2s  .c  o  m
        rev1 = query.getRevId() > 0 ? query.getRevId()
                : query.getFromDate() == null ? 0
                        : reader.getRevisionNumberForDate(query.getFromDate()).intValue() + 1;
    } catch (Exception e) {
        //before first revision->ignore
    }
    int rev2 = Integer.MAX_VALUE;
    try {
        rev2 = query.getRevId() > 0 ? query.getRevId()
                : query.getToDate() == null ? Integer.MAX_VALUE
                        : reader.getRevisionNumberForDate(query.getToDate()).intValue();
    } catch (Exception e) {
        //after last revision->ignore
    }
    LoggerFactory.getLogger(DAORevision.class).debug("getRevisions between " + rev1 + " and " + rev2);
    Set<Class<?>> entityClasses = new HashSet<>();
    if (query.isStudies())
        entityClasses.add(Study.class);
    if (query.isSamples())
        entityClasses.add(Biosample.class);
    if (query.isResults())
        entityClasses.add(Result.class);
    if (query.isLocations())
        entityClasses.add(Location.class);
    if (query.isAdmin())
        entityClasses.add(Biotype.class);
    if (query.isAdmin())
        entityClasses.add(Test.class);
    if (query.isAdmin())
        entityClasses.add(Employee.class);
    if (query.isAdmin())
        entityClasses.add(EmployeeGroup.class);
    if (query.isAdmin())
        entityClasses.add(SpiritProperty.class);

    List<Revision> revisions = getRevisions(entityClasses, queryForRevisions(reader, entityClasses, rev1, rev2,
            query.getUserIdFilter(), query.getSidFilter(), query.getStudyIdFilter()));
    LoggerFactory.getLogger(DAORevision.class)
            .debug("Loaded revisions in " + (System.currentTimeMillis() - s) + "ms");

    //Post filter per study
    List<Revision> res = new ArrayList<>();
    for (Revision revision : revisions) {
        System.out.println("DAORevision.queryRevisions() " + revision + " " + revision.getType() + " "
                + revision.getDifference());
        if (query.getSidFilter() > 0
                || (query.getStudyIdFilter() != null && query.getStudyIdFilter().length() > 0)) {
            boolean ok = false;
            if (!ok) {
                for (Study study : revision.getStudies()) {
                    if (query.getSidFilter() > 0 && query.getSidFilter() == study.getId())
                        ok = true;
                    else if (query.getStudyIdFilter() != null
                            && query.getStudyIdFilter().contains(study.getStudyId()))
                        ok = true;
                }
            }
            if (!ok) {
                for (Biosample b : revision.getBiosamples()) {
                    if (b.getInheritedStudy() != null) {
                        if (query.getSidFilter() > 0 && query.getSidFilter() == b.getInheritedStudy().getId())
                            ok = true;
                        else if (query.getStudyIdFilter() != null
                                && query.getStudyIdFilter().contains(b.getInheritedStudy().getStudyId()))
                            ok = true;
                    }
                }
            }
            if (!ok) {
                for (Result r : revision.getResults()) {
                    if (r.getStudy() != null) {
                        if (query.getSidFilter() > 0 && query.getSidFilter() == r.getStudy().getId())
                            ok = true;
                        else if (query.getStudyIdFilter() != null
                                && query.getStudyIdFilter().contains(r.getStudy().getStudyId()))
                            ok = true;
                    }
                }
            }

            if (!ok) {
                continue;
            }
        }

        res.add(revision);
    }

    return res;
}

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

License:Open Source License

/**
 * @param user//from  ww w .j a  v  a 2 s  . c om
 * @param repository
 * @param searchTerm
 * @return Map<PropertyKey                                                               ,                                                                                                                               Collection                                                               <                                                               Property>> of keys and values that contain the searchTerm
 * @throws ConfigException
 */
public Map<PropertyKey, Collection<Property>> searchKeysAndValues(final UserAccount user,
        final Repository repository, final Date dateObj, final String searchTerm) throws ConfigException {
    if (Utils.anyNull(repository)) {
        throw new ConfigException(Error.Code.MISSING_PARAMS);
    }

    if (!repository.hasReadAccess(user)) {
        throw new ConfigException(Error.Code.USER_ACCESS_DENIED);
    }

    List<PropertyKey> keys = null;
    List<Property> props = null;

    if (null == dateObj) {
        try {
            keys = em.createNamedQuery("Search.keysAndComments").setLockMode(LockModeType.NONE)
                    .setParameter("repository", repository)
                    .setParameter("searchTerm", "%" + searchTerm.toUpperCase() + "%").getResultList();
        } catch (NoResultException ignore) {
        } catch (Exception e) {
            handleException(e);
        }

        try {
            props = em.createNamedQuery("Search.values").setLockMode(LockModeType.NONE)
                    .setParameter("repository", repository)
                    .setParameter("searchTerm", "%" + searchTerm.toUpperCase() + "%").getResultList();
        } catch (NoResultException ignore) {
        } catch (Exception e) {
            handleException(e);
        }
    } else {
        AuditReader reader = AuditReaderFactory.get(em);
        Number rev = reader.getRevisionNumberForDate(dateObj);

        AuditQuery query = reader.createQuery().forEntitiesAtRevision(PropertyKey.class, rev);
        query.add(AuditEntity.property("repository").eq(repository));
        query.add(AuditEntity.or(AuditEntity.property("key").ilike("%" + searchTerm + "%"),
                AuditEntity.property("readme").ilike("%" + searchTerm + "%")));

        keys = query.getResultList();

        query = reader.createQuery().forEntitiesAtRevision(Property.class, rev);
        query.add(AuditEntity.property("repository").eq(repository));
        query.add(AuditEntity.property("value").ilike("%" + searchTerm + "%"));

        props = query.getResultList();
    }

    Map<PropertyKey, Collection<Property>> keyListMap = new HashMap<>();
    if (null != keys) {
        keys.forEach(k -> keyListMap.put(k, null));
    }

    if (null != props) {
        props.forEach(p -> {
            PropertyKey key = p.getPropertyKey();
            if (keyListMap.containsKey(key)) {
                Collection<Property> ps = keyListMap.get(key);
                if (null == ps) {
                    ps = new ArrayList<>();
                    keyListMap.put(key, ps);
                }
                ps.add(p);
            } else {
                ArrayList<Property> ps = new ArrayList<>();
                ps.add(p);
                keyListMap.put(key, ps);
            }
        });
    }
    return keyListMap;
}

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

License:Open Source License

/**
 * @param repositoryId//w  w w.ja v  a2 s .c  o  m
 * @param date
 * @return
 * @throws ConfigException
 */
public Repository getRepository(final Long repositoryId, final Date date) throws ConfigException {
    if (Utils.anyNull(repositoryId)) {
        throw new ConfigException(Error.Code.MISSING_PARAMS);
    }

    if (null == date) {
        return get(Repository.class, repositoryId);
    }

    AuditReader reader = AuditReaderFactory.get(em);
    Number rev = reader.getRevisionNumberForDate(date);

    AuditQuery query = reader.createQuery().forEntitiesAtRevision(Repository.class, rev);
    query.add(AuditEntity.id().eq(repositoryId));

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

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

License:Open Source License

/**
 * Get levels at a specific point in time.
 *
 * @param repository To which levels are assigned
 * @param time       At the time levels were current
 * @return Collection of Levels from that time
 * @throws ConfigException Is thrown if there were problems fetching records
 *///  w  w  w.  j  a  va  2s . c  o m
public Collection<CtxLevel> getLevels(final Repository repository, final Date time) throws ConfigException {
    AuditReader reader = AuditReaderFactory.get(em);
    Number rev = reader.getRevisionNumberForDate(time);

    AuditQuery query = reader.createQuery().forEntitiesAtRevision(CtxLevel.class, rev);
    query.add(AuditEntity.property("repository").eq(repository));

    return query.getResultList();
}

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

License:Open Source License

public CtxLevel getLevel(final String levelName, final Depth depth, final Repository repository,
        final Date time) throws ConfigException {
    if (Utils.anyNull(levelName, repository)) {
        return null;
    }/*from w  w w. j a va2 s. com*/

    if (null == time) {
        try {
            String levelUpper = levelName.toUpperCase();

            return (CtxLevel) em.createNamedQuery("Level.getByName").setLockMode(LockModeType.NONE)
                    .setParameter("repository", repository).setParameter("name", levelUpper)
                    .setParameter("depth", depth).getSingleResult();
        } catch (NoResultException e) {
            return null;
        } catch (Exception e) {
            handleException(e);
        }

        return null;
    }

    AuditReader reader = AuditReaderFactory.get(em);
    Number rev = reader.getRevisionNumberForDate(time);

    // ToDo will not return deleted level
    AuditQuery query = reader.createQuery().forEntitiesAtRevision(CtxLevel.class, rev);
    query.add(AuditEntity.property("repository").eq(repository));
    query.add(AuditEntity.property("name").eq(levelName));
    query.add(AuditEntity.property("depth").eq(depth));

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

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

License:Open Source License

/**
 * Get properties at a specific point in time.
 *
 * @param repository To which levels are assigned
 * @param date       At the time levels were current
 * @return Collection of Levels from that time
 * @throws ConfigException Is thrown if there were problems fetching records
 *//*from w ww.j  ava 2s  . c  o  m*/
public Collection<Property> getProperties(final Repository repository, final Date date) throws ConfigException {
    AuditReader reader = AuditReaderFactory.get(em);
    Number rev = reader.getRevisionNumberForDate(date);

    AuditQuery query = reader.createQuery().forEntitiesAtRevision(Property.class, rev);
    query.add(AuditEntity.property("repository").eq(repository));

    return query.getResultList();
}

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

License:Open Source License

public Pair<PropertyKey, Collection<Property>> getPropertiesForKey(final Repository repository, final Date date,
        String key) throws ConfigException {
    AuditReader reader = AuditReaderFactory.get(em);
    Number rev = reader.getRevisionNumberForDate(null == date ? new Date() : date);

    AuditQuery kq = reader.createQuery().forEntitiesAtRevision(PropertyKey.class, rev);
    kq.add(AuditEntity.property("repository").eq(repository));
    kq.add(AuditEntity.property("key").eq(key));

    PropertyKey propertyKey;/*  w w  w.j  a v a  2s  .c  om*/
    try {
        propertyKey = (PropertyKey) kq.getSingleResult();
    } catch (NoResultException e) {
        return null;
    }

    AuditQuery query = reader.createQuery().forEntitiesAtRevision(Property.class, rev);
    query.add(AuditEntity.property("repository").eq(repository));
    query.add(AuditEntity.relatedId("propertyKey").eq(propertyKey.getId()));

    Collection<Property> properties = query.getResultList();
    propertyKey.propertyCount = properties.size();

    return new Pair(propertyKey, properties);
}

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

License:Open Source License

/**
 * Returns the key from a specific date//from  w w  w . j  a v a  2 s  .co m
 *
 * @param repository
 * @param key
 * @param date
 * @return
 */
public PropertyKey getKey(final Repository repository, final String key, final Date date) {
    if (null == repository || Utils.isBlank(key)) {
        return null;
    }

    try {
        if (null == date) {
            return (PropertyKey) em.createNamedQuery("Key.getByKey").setLockMode(LockModeType.NONE)
                    .setParameter("key", key.toUpperCase()).setParameter("repository", repository)
                    .getSingleResult();
        }

        AuditReader reader = AuditReaderFactory.get(em);
        Number rev = reader.getRevisionNumberForDate(null == date ? new Date() : date);

        AuditQuery kq = reader.createQuery().forEntitiesAtRevision(PropertyKey.class, rev);
        kq.add(AuditEntity.property("repository").eq(repository));
        kq.add(AuditEntity.property("key").eq(key));

        return (PropertyKey) kq.getSingleResult();
    } catch (NoResultException e) {
        return null;
    } catch (Exception e) {
        handleException(e);
        return null;
    }
}