package org.jboss.as.test.integration.jpa.hibernate.envers; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; /** * @author Madhumita Sadhukhan */ @Stateless public class SLSBAudit { @PersistenceContext(unitName = "myCustPhone") EntityManager em; public Customer createCustomer(String firstName, String surName, String type, String areacode, String phnumber) { Phone phone1 = new Phone(); phone1.setNumber(phnumber); phone1.setAreacode(areacode); phone1.setType(type); Phone phone2 = new Phone(); phone2.setNumber("777222123"); phone2.setAreacode("+420"); phone2.setType("HOME"); Customer cust = new Customer(); cust.setFirstname(firstName); cust.setSurname(surName); cust.getPhones().add(phone1); cust.getPhones().add(phone2); em.persist(cust); em.persist(phone1); em.persist(phone2); return cust; } public Customer updateCustomer(Customer c) { return em.merge(c); } public Phone updatePhone(Phone p) { return em.merge(p); } public void deletePhone(Phone p) { em.remove(em.merge(p)); } public int retrieveOldPhoneListSizeFromCustomer(int id, int revnumber) { AuditReader reader = AuditReaderFactory.get(em); Customer cust_rev = reader.find(Customer.class, id, revnumber); return cust_rev.getPhones().size(); } public String retrieveOldPhoneListVersionFromCustomer(int id) { AuditReader reader = AuditReaderFactory.get(em); Customer cust_rev = reader.find(Customer.class, id, 2); return cust_rev.getPhones().get(1).getType(); } public List<Object> verifyRevision(int id) { AuditReader reader = AuditReaderFactory.get(em); // boolean b; // String queryString = "select a.originalId.REV from " + "CUSTOMER_PHONE" + "_AUD a"; // String queryString = "select column_name from information_schema.columns where table_name = 'CUSTOMER_PHONE_AUD'"; // Query query = em.createQuery(queryString); List<Object> custHistory = new ArrayList<Object>(); List<Number> revList = reader.getRevisions(Customer.class, id); for (Number revisionNumber : revList) { AuditQuery query = reader.createQuery().forEntitiesAtRevision(Customer.class, revisionNumber); query.add(AuditEntity.property("firstname").eq("MADHUMITA")); if (query.getResultList() != null && query.getResultList().size() > 0) { custHistory.add(query.getResultList()); } } return custHistory; } public List<Object> verifyRevisionType(int id) { AuditReader reader = AuditReaderFactory.get(em); List<Object> custHistory = new ArrayList<Object>(); List<Number> revList = reader.getRevisions(Customer.class, id); for (Number revisionNumber : revList) { AuditQuery query = reader.createQuery().forEntitiesAtRevision(Customer.class, revisionNumber); query.add(AuditEntity.revisionType().eq(RevisionType.MOD)); if (query.getResultList() != null && query.getResultList().size() > 0) { custHistory.add(query.getResultList()); } } return custHistory; } public List<Object> verifyOtherFields(int id) { AuditReader reader = AuditReaderFactory.get(em); boolean b; Customer cust1_rev = reader.find(Customer.class, id, 3); String queryString = "select a.originalId.phones_id from CUSTOMER_PHONE_AUD a"; Query query = em.createQuery(queryString); List<Object> custHistory = query.getResultList(); return custHistory; } }