Java tutorial
package com.webbfontaine.valuewebb.envers; import com.webbfontaine.valuewebb.action.PdHome; import com.webbfontaine.valuewebb.action.SimpleDocumentHome; import com.webbfontaine.valuewebb.action.irms.CriteriaHome; import com.webbfontaine.valuewebb.action.pricedb.mp.MarketPriceHome; import com.webbfontaine.valuewebb.action.pricedb.pdss.PdssSearch; import com.webbfontaine.valuewebb.action.tms.RuleHome; import com.webbfontaine.valuewebb.action.tt.TtGenHome; import com.webbfontaine.valuewebb.model.Pd; import com.webbfontaine.valuewebb.model.SimpleDocument; import com.webbfontaine.valuewebb.model.util.Utils; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; import org.jboss.seam.Component; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.web.RequestParameter; import org.jboss.seam.log.Log; import org.jboss.seam.log.Logging; import javax.faces.context.FacesContext; import java.util.List; /** * Copyrights 2002-2013 Webb Fontaine * This software is the proprietary information of Webb Fontaine. * Its use is subject to License terms. * Developer: nigiyan * Date: 28/10/2013 */ @Name("auditedEntityLoader") public class AuditedEntityLoader { public static final Log LOGGER = Logging.getLog(AuditedEntityHistoryReader.class); @RequestParameter String revNum; @RequestParameter String entityId; public Object viewAuditedEntity() { String viewPage = FacesContext.getCurrentInstance().getViewRoot().getViewId(); SimpleDocumentHome simpleDocumentHome = null; if (viewPage.contains("Tt")) { simpleDocumentHome = TtGenHome.getComponentInstance(true); } else { if (viewPage.contains("Pd")) { simpleDocumentHome = PdHome.getComponentInstance(true); } else { if (viewPage.contains("Criteria")) { simpleDocumentHome = (SimpleDocumentHome) Component.getInstance(CriteriaHome.class, true); } else { if (viewPage.contains("Rule")) { simpleDocumentHome = (SimpleDocumentHome) Component.getInstance(RuleHome.class, true); } else { if (viewPage.contains("MarketResearch")) { simpleDocumentHome = MarketPriceHome.getComponentInstance(true); } } } } } if (simpleDocumentHome != null) { SimpleDocument simpleDocument = getAuditRecord(simpleDocumentHome.getEntityClass()); if (viewPage.contains("Pd")) { //PDSS loads dynamically on page. So it should be initialized beforehand. better way? (think) Pd pd = (Pd) simpleDocument; pd.getPfs(); PdssSearch pdssSearch = (PdssSearch) Component.getInstance("pdssSearch"); pdssSearch.setInstance(pd); pdssSearch.initByPdInstance(); } simpleDocumentHome.setInstance(simpleDocument); simpleDocumentHome.setAuditedInstanceLoaded(true); } return ""; } private SimpleDocument getAuditRecord(Class entityClass) { Integer revNum = Integer.parseInt(this.revNum); Long entityId = Long.valueOf(this.entityId); Object auditRecord; AuditReader reader = AuditReaderFactory.get(Utils.getEntityManager()); AuditQuery auditQuery = reader.createQuery().forEntitiesAtRevision(entityClass, revNum) .add(AuditEntity.revisionNumber().eq(revNum)).add(AuditEntity.id().eq(entityId)); List result = auditQuery.getResultList(); if (result.isEmpty()) { auditQuery = reader.createQuery().forEntitiesAtRevision(entityClass, revNum) .add(AuditEntity.revisionNumber().le(revNum)).add(AuditEntity.id().eq(entityId)); auditRecord = auditQuery.getResultList().get(0); } else { auditRecord = result.get(0); } SimpleDocument simpleDocument = null; if (auditRecord instanceof SimpleDocument) { simpleDocument = (SimpleDocument) auditRecord; } else { LOGGER.error("Audited entity of class {} does not implement necessary logic of {}", auditRecord.getClass().getName(), SimpleDocument.class.getName()); } return simpleDocument; } public String getRevNum() { return revNum; } public void setRevNum(String revNum) { this.revNum = revNum; } public String getEntityId() { return entityId; } public void setEntityId(String entityId) { this.entityId = entityId; } }