List of usage examples for org.hibernate.envers AuditReader createQuery
AuditQueryCreator createQuery();
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();/* w ww. jav a 2s.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 . j a v a 2 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 av a 2 s. 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
/** * @param user/*from w w w . ja v a 2 s .co m*/ * @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 . j a va 2 s . com*/ * @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 *///from ww w .j ava2 s . co 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; }//ww w.j a v a 2 s .c o m 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 *///ww w . j a va 2 s . co 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;//from www . j a v a 2 s . c o m 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 av a 2s. c om*/ * * @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; } }