com.webbfontaine.valuewebb.envers.AuditedEntityLoader.java Source code

Java tutorial

Introduction

Here is the source code for com.webbfontaine.valuewebb.envers.AuditedEntityLoader.java

Source

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;
    }
}