@Override @SuppressWarnings({"unchecked"}) public Set<Pair<String, Class>> findEntityTypes(Number revision) throws IllegalStateException, IllegalArgumentException { checkNotNull(revision, "Entity revision"); checkPositive(revision, "Entity revision"); checkSession(); final Session session = auditReaderImplementor.getSession(); final SessionImplementor sessionImplementor = auditReaderImplementor.getSessionImplementor(); final Set<Number> revisions = new HashSet<Number>(1); revisions.add(revision); final Criteria query = verCfg.getRevisionInfoQueryCreator().getRevisionsQuery(session, revisions); final Object revisionInfo = query.uniqueResult(); if (revisionInfo != null) { // If revision exists. final Set<String> entityNames = verCfg.getModifiedEntityNamesReader().getModifiedEntityNames(revisionInfo); if (entityNames != null) { // Generate result that contains entity names and corresponding Java classes. final Set<Pair<String, Class>> result = new HashSet<Pair<String, Class>>(); for (String entityName : entityNames) { result.add( Pair.make( entityName, EntityTools.getEntityClass(sessionImplementor, session, entityName))); } return result; } } return Collections.EMPTY_SET; }
@Override @SuppressWarnings({"unchecked"}) public List<Object> findEntities(Number revision) throws IllegalStateException, IllegalArgumentException { final Set<Pair<String, Class>> entityTypes = findEntityTypes(revision); final List<Object> result = new ArrayList<Object>(); for (Pair<String, Class> type : entityTypes) { result.addAll( auditReaderImplementor .createQuery() .forEntitiesModifiedAtRevision(type.getSecond(), type.getFirst(), revision) .getResultList()); } return result; }
@Override @SuppressWarnings({"unchecked"}) public Map<RevisionType, List<Object>> findEntitiesGroupByRevisionType(Number revision) throws IllegalStateException, IllegalArgumentException { final Set<Pair<String, Class>> entityTypes = findEntityTypes(revision); final Map<RevisionType, List<Object>> result = new HashMap<RevisionType, List<Object>>(); for (RevisionType revisionType : RevisionType.values()) { result.put(revisionType, new ArrayList<Object>()); for (Pair<String, Class> type : entityTypes) { final List<Object> list = auditReaderImplementor .createQuery() .forEntitiesModifiedAtRevision(type.getSecond(), type.getFirst(), revision) .add(new RevisionTypeAuditExpression(revisionType, "=")) .getResultList(); result.get(revisionType).addAll(list); } } return result; }
private void checkSession() { if (!auditReaderImplementor.getSession().isOpen()) { throw new IllegalStateException("The associated entity manager is closed!"); } }