List of usage examples for org.hibernate.envers.query AuditEntity revisionNumber
public static AuditProperty<Number> revisionNumber()
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; }