it.eng.spagobi.monitoring.dao.DbAuditImpl.java Source code

Java tutorial

Introduction

Here is the source code for it.eng.spagobi.monitoring.dao.DbAuditImpl.java

Source

/* SpagoBI, the Open Source Business Intelligence suite
    
 * Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
 * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0, without the "Incompatible With Secondary Licenses" notice. 
 * If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package it.eng.spagobi.monitoring.dao;

import it.eng.spago.error.EMFErrorSeverity;
import it.eng.spago.error.EMFUserError;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiObjects;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiSubObjects;
import it.eng.spagobi.commons.dao.AbstractHibernateDAO;
import it.eng.spagobi.engines.config.metadata.SbiEngines;
import it.eng.spagobi.hotlink.rememberme.bo.HotLink;
import it.eng.spagobi.monitoring.metadata.SbiAudit;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DbAuditImpl extends AbstractHibernateDAO implements IAuditDAO {

    private static transient Logger logger = Logger.getLogger(DbAuditImpl.class);

    /**
     * Insert audit.
     * 
     * @param aSbiAudit the a sbi audit
     * 
     * @throws EMFUserError the EMF user error
     * 
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#insertAudit(it.eng.spagobi.bo.SbiAudit)
     */
    public void insertAudit(SbiAudit aSbiAudit) throws EMFUserError {
        logger.debug("IN");
        Session session = null;
        Transaction tx = null;
        try {
            session = getSession();
            ;
            tx = session.beginTransaction();
            if (aSbiAudit.getSbiObject() == null) {
                Integer objectId = aSbiAudit.getDocumentId();
                SbiObjects sbiObject = (SbiObjects) session.load(SbiObjects.class, objectId);
                aSbiAudit.setSbiObject(sbiObject);
            }
            if (aSbiAudit.getSbiSubObject() == null) {
                Integer subObjId = aSbiAudit.getSubObjId();
                if (subObjId != null) {
                    SbiSubObjects subObj = (SbiSubObjects) session.load(SbiSubObjects.class, subObjId);
                    aSbiAudit.setSbiSubObject(subObj);
                }
            }
            if (aSbiAudit.getSbiEngine() == null) {
                Integer engineId = aSbiAudit.getEngineId();
                SbiEngines sbiEngine = (SbiEngines) session.load(SbiEngines.class, engineId);
                aSbiAudit.setSbiEngine(sbiEngine);
            }
            updateSbiCommonInfo4Insert(aSbiAudit);
            session.save(aSbiAudit);
            session.flush();
            tx.commit();
        } catch (HibernateException he) {
            logger.error(he);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (session != null) {
                if (session.isOpen())
                    session.close();
            }
            logger.debug("OUT");
        }
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#loadAllAudits()
     */
    public List loadAllAudits() throws EMFUserError {
        logger.debug("IN");
        logger.error("this method is not implemented!!");
        logger.debug("OUT");
        return null;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#loadAuditByID(java.lang.Integer)
     */
    public SbiAudit loadAuditByID(Integer id) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        SbiAudit aSbiAudit = null;
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            aSbiAudit = (SbiAudit) aSession.load(SbiAudit.class, id);
            aSbiAudit.getSbiObject();
            aSbiAudit.getDocumentLabel();
            aSbiAudit.getDocumentId();
            aSbiAudit.getDocumentName();
            aSbiAudit.getDocumentParameters();
            aSbiAudit.getDocumentState();
            aSbiAudit.getDocumentType();
            aSbiAudit.getSbiSubObject();
            aSbiAudit.getSubObjId();
            aSbiAudit.getSubObjName();
            aSbiAudit.getSubObjOwner();
            aSbiAudit.getSubObjIsPublic();
            aSbiAudit.getSbiEngine();
            aSbiAudit.getEngineClass();
            aSbiAudit.getEngineDriver();
            aSbiAudit.getEngineId();
            aSbiAudit.getEngineLabel();
            aSbiAudit.getEngineName();
            aSbiAudit.getEngineType();
            aSbiAudit.getEngineUrl();
            aSbiAudit.getExecutionModality();
            aSbiAudit.getRequestTime();
            aSbiAudit.getId();
            aSbiAudit.getUserName();
            aSbiAudit.getUserGroup();
            aSbiAudit.getExecutionStartTime();
            aSbiAudit.getExecutionEndTime();
            aSbiAudit.getExecutionTime();
            aSbiAudit.getExecutionState();
            aSbiAudit.getError();
            aSbiAudit.getErrorMessage();
            aSbiAudit.getErrorCode();
            tx.commit();
        } catch (HibernateException he) {
            logger.error(he);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }
        return aSbiAudit;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#modifyAudit(it.eng.spagobi.monitoring.metadata.SbiAudit)
     */
    public void modifyAudit(SbiAudit aSbiAudit) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            // TODO forse mettere un controllo per vedere se ci sono sbiobject e sbiengine?
            updateSbiCommonInfo4Update(aSbiAudit);
            aSession.saveOrUpdate(aSbiAudit);
            tx.commit();
        } catch (HibernateException he) {
            logger.error(he);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }

    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#loadAuditsByDocumentLabel(java.lang.String)
     */
    public List loadAuditsByDocumentLabel(String documentLabel) throws EMFUserError {
        logger.debug("IN");
        logger.error("this method is not implemented!!");
        logger.debug("OUT");
        return null;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#loadAuditsByEngineLabel(java.lang.String)
     */
    public List loadAuditsByEngineLabel(String engineLabel) throws EMFUserError {
        logger.debug("IN");
        logger.error("this method is not implemented!!");
        logger.debug("OUT");
        return null;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#loadAuditsByUserName(java.lang.String)
     */
    public List loadAuditsByUserName(String userName) throws EMFUserError {
        logger.debug("IN");
        logger.error("this method is not implemented!!");
        logger.debug("OUT");
        return null;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#eraseAudit(java.lang.Integer)
     */
    public void eraseAudit(Integer id) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            SbiAudit sbiAudit = (SbiAudit) aSession.load(SbiAudit.class, id);
            aSession.delete(sbiAudit);
            tx.commit();
        } catch (HibernateException he) {
            logger.error(he);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } catch (Exception ex) {
            logger.error(ex);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }

    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#getMostPopular(java.util.Collection, int)
     */
    public List getMostPopular(Collection roles, int limit) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        List toReturn = new ArrayList();
        List userGroups = new ArrayList();
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            String usergroups = "";
            Iterator it = roles.iterator();
            while (it.hasNext()) {
                String roleName = (String) it.next();
                //usergroups += "'" + roleName + "'";
                //if (it.hasNext()) usergroups += ",";
                if (!userGroups.contains(roleName))
                    userGroups.add(roleName);
            }
            StringBuffer hql = new StringBuffer();
            hql.append("select ");
            hql.append("      count(a.sbiObject.biobjId), ");
            hql.append("      a.sbiObject.biobjId, ");
            hql.append("      a.sbiObject.label, ");
            hql.append("      a.sbiObject.name, ");
            hql.append("      a.sbiObject.descr, ");
            hql.append("      a.sbiObject.objectTypeCode, ");
            hql.append("      a.subObjId, ");
            hql.append("      a.subObjName, ");
            hql.append("      a.documentParameters, ");
            hql.append("      a.sbiEngine.name ");
            hql.append("from ");
            hql.append("      SbiAudit a ");
            hql.append("where    ");
            hql.append("      a.sbiObject is not null and ");
            hql.append("      a.sbiEngine is not null and ");
            hql.append("      a.sbiObject.label not like 'SBI_%' and ");
            hql.append("      a.userGroup in (:USER_GROUPS) and ");
            hql.append("      (a.sbiSubObject is null or a.sbiSubObject.subObjId = a.subObjId) ");
            hql.append("group by    a.sbiObject.biobjId, ");
            hql.append("         a.sbiObject.label, ");
            hql.append("         a.sbiObject.name, ");
            hql.append("         a.sbiObject.descr, ");
            hql.append("         a.sbiObject.objectTypeCode, ");
            hql.append("         a.subObjId, ");
            hql.append("         a.subObjName, ");
            hql.append("         a.documentParameters, ");
            hql.append("         a.sbiEngine.name ");
            hql.append("order by count(a.sbiObject.biobjId) desc ");
            Query hqlQuery = aSession.createQuery(hql.toString());
            hqlQuery.setParameterList("USER_GROUPS", userGroups);
            hqlQuery.setMaxResults(limit);
            List result = hqlQuery.list();
            Iterator resultIt = result.iterator();
            while (resultIt.hasNext()) {
                Object[] row = (Object[]) resultIt.next();
                toReturn.add(toHotLink(row));
            }
        } catch (Exception ex) {
            logger.error(ex);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }
        return toReturn;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#getMyRecentlyUsed(java.lang.String, int)
     */
    public List getMyRecentlyUsed(String userId, int limit) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        List toReturn = new ArrayList();
        if (userId == null || userId.trim().equals("")) {
            logger.warn("The user id in input is null or empty.");
            return toReturn;
        }
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            StringBuffer hql = new StringBuffer();
            hql.append("select ");
            hql.append("      max(a.requestTime), ");
            hql.append("      a.sbiObject.biobjId, ");
            hql.append("      a.sbiObject.label, ");
            hql.append("      a.sbiObject.name, ");
            hql.append("      a.sbiObject.descr, ");
            hql.append("      a.sbiObject.objectTypeCode, ");
            hql.append("      a.subObjId, ");
            hql.append("      a.subObjName, ");
            hql.append("      a.documentParameters, ");
            hql.append("      a.sbiEngine.name ");
            hql.append("from ");
            hql.append("      SbiAudit a ");
            hql.append("where    ");
            hql.append("      a.sbiObject is not null and ");
            hql.append("      a.sbiEngine is not null and ");
            hql.append("      a.sbiObject.label not like 'SBI_%' and ");
            hql.append("      a.userName = ? and ");
            hql.append("      (a.sbiSubObject is null or a.sbiSubObject.subObjId = a.subObjId) ");
            hql.append("group by    a.sbiObject.biobjId, ");
            hql.append("         a.sbiObject.label, ");
            hql.append("         a.sbiObject.name, ");
            hql.append("         a.sbiObject.descr, ");
            hql.append("         a.sbiObject.objectTypeCode, ");
            hql.append("         a.subObjId, ");
            hql.append("         a.subObjName, ");
            hql.append("         a.documentParameters, ");
            hql.append("         a.sbiEngine.name ");
            hql.append("order by max(a.requestTime) desc ");
            Query hqlQuery = aSession.createQuery(hql.toString());
            hqlQuery.setString(0, userId);
            hqlQuery.setMaxResults(limit);
            List result = hqlQuery.list();
            Iterator resultIt = result.iterator();
            while (resultIt.hasNext()) {
                Object[] row = (Object[]) resultIt.next();
                toReturn.add(toHotLink(row));
            }
        } catch (Exception ex) {
            logger.error(ex);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }
        return toReturn;
    }

    private Object toHotLink(Object[] row) {
        HotLink toReturn = new HotLink();
        toReturn.setObjId((Integer) row[1]);
        toReturn.setDocumentLabel((String) row[2]);
        toReturn.setDocumentName((String) row[3]);
        toReturn.setDocumentDescription((String) row[4]);
        toReturn.setDocumentType((String) row[5]);
        toReturn.setSubObjId((Integer) row[6]);
        toReturn.setSubObjName((String) row[7]);
        toReturn.setParameters((String) row[8]);
        toReturn.setEngineName((String) row[9]);
        return toReturn;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#getLastExecution(java.lang.Integer)
     */
    public SbiAudit getLastExecution(Integer objId) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        SbiAudit toReturn = new SbiAudit();
        if (objId == null) {
            logger.warn("The object id in input is null or empty.");
            return toReturn;
        }
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            StringBuffer hql = new StringBuffer();
            hql.append("select ");
            hql.append("      max(a.executionStartTime)");
            hql.append("from ");
            hql.append("      SbiAudit a ");
            hql.append("where    ");
            hql.append("      a.sbiObject is not null and ");
            hql.append("      a.sbiObject.biobjId = ? ");
            Query hqlQuery = aSession.createQuery(hql.toString());
            hqlQuery.setInteger(0, objId.intValue());
            Timestamp date = (Timestamp) hqlQuery.uniqueResult();
            toReturn.setDocumentId(objId);
            toReturn.setExecutionStartTime(date);

            StringBuffer hql2 = new StringBuffer();
            hql2.append("select ");
            hql2.append("      a.userName, ");
            hql2.append("      a.documentParameters, ");
            hql2.append("      a.requestTime, ");
            hql2.append("      a.executionEndTime, ");
            hql2.append("      a.executionState ");
            hql2.append("from ");
            hql2.append("      SbiAudit a ");
            hql2.append("where    ");
            hql2.append("      a.sbiObject is not null and ");
            hql2.append("      a.sbiObject.biobjId = ? and ");
            hql2.append("      a.executionStartTime = ? ");
            Query hqlQuery2 = aSession.createQuery(hql2.toString());
            hqlQuery2.setInteger(0, objId.intValue());
            hqlQuery2.setTimestamp(1, date);
            Object[] row = (Object[]) hqlQuery2.uniqueResult();

            toReturn.setUserName((String) row[0]);
            toReturn.setDocumentParameters((String) row[1]);
            toReturn.setRequestTime((Timestamp) row[2]);
            toReturn.setExecutionEndTime((Timestamp) row[3]);
            toReturn.setExecutionState((String) row[4]);

        } catch (Exception ex) {
            logger.error(ex);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }
        return toReturn;
    }

    /* (non-Javadoc)
     * @see it.eng.spagobi.monitoring.dao.IAuditDAO#getMediumExecTime(java.lang.Integer)
     */
    public Double getMediumExecTime(Integer objId) throws EMFUserError {
        logger.debug("IN");
        Session aSession = null;
        Transaction tx = null;
        Double toReturn = new Double(0);
        if (objId == null) {
            logger.warn("The object id in input is null or empty.");
            return toReturn;
        }
        try {
            aSession = getSession();
            tx = aSession.beginTransaction();
            StringBuffer hql = new StringBuffer();
            hql.append("select ");
            hql.append("      a.executionTime ");
            hql.append("from ");
            hql.append("      SbiAudit a ");
            hql.append("where    ");
            hql.append("      a.sbiObject is not null and ");
            hql.append("      a.sbiObject.biobjId = ? ");
            Query hqlQuery = aSession.createQuery(hql.toString());
            hqlQuery.setInteger(0, objId.intValue());
            List l = hqlQuery.list();
            int x = 0;
            int count = 1;
            if (!l.isEmpty()) {
                Iterator it = l.iterator();
                while (it.hasNext()) {
                    Integer tosum = (Integer) it.next();
                    if (tosum != null) {
                        x = x + tosum.intValue();
                        count++;
                    }
                }
            }
            if (x != 0)
                toReturn = new Double(x / count);

        } catch (Exception ex) {
            logger.error(ex);
            if (tx != null)
                tx.rollback();
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        } finally {
            if (aSession != null) {
                if (aSession.isOpen())
                    aSession.close();
            }
            logger.debug("OUT");
        }
        return toReturn;
    }

}