/* Index ECM Engine - A system for managing the capture (when created * or received), classification (cataloguing), storage, retrieval, * revision, sharing, reuse and disposition of documents. * * Copyright (C) 2008 Regione Piemonte * Copyright (C) 2008 Provincia di Torino * Copyright (C) 2008 Comune di Torino * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2, * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ package it.doqui.index.ecmengine.integration.job.dao; import it.doqui.index.ecmengine.integration.job.vo.JobParamVO; import it.doqui.index.ecmengine.integration.job.vo.JobVO; import it.doqui.index.ecmengine.util.EcmEngineConstants; import java.math.BigInteger; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; import org.hibernate.criterion.Conjunction; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * DAO per l'interrogazione e l'inserimento di dati sulla tabella dei job sul database * di ECMENGINE. * * @author DoQui */ public class JobDAO extends HibernateDaoSupport { private static Log logger = LogFactory.getLog(EcmEngineConstants.ECMENGINE_DAO_LOG_CATEGORY); /** * Inserisce una riga relativa ad un job. * * @param job * L'istanza di {@code JobVO} contenente i dati del job da * inserire. * @return L'id generato per il job inserito. * * @throws Exception */ public int insertJob(JobVO job) throws Exception { logger.debug("[JobDAO::insertJob] BEGIN"); int result = -1; Object generatedId = null; try { generatedId = getHibernateTemplate().save(job); //NOTA: flush inserito per gestire la sequence di oracle //getHibernateTemplate().flush(); if (generatedId instanceof Integer) { result = ((Integer)generatedId).intValue(); } else if (generatedId instanceof Long) { result = ((Long)generatedId).intValue(); } else if (generatedId instanceof BigInteger) { result = ((BigInteger)generatedId).intValue(); } } catch(Exception e) { logger.error("[JobDAO::insertJob] ERROR", e); throw e; } finally { logger.debug("[JobDAO::insertJob] END"); } return result; } /** * Inserisce una riga relativa ad un parametro di un job. * * @param jobParam * L'istanza di {@code JobParamVO} contenente i dati del * parametro da inserire. * @throws Exception */ public void insertJobParam(JobParamVO jobParam) throws Exception { logger.debug("[JobDAO::insertJobParam] BEGIN"); try { getHibernateTemplate().save(jobParam); } catch(Exception e) { logger.error("[JobDAO::insertJobParam] ERROR", e); } finally { logger.debug("[JobDAO::insertJobParam] END"); } } /** * Aggiorna la riga contenente i dati di un job. I campi che devono essere * impostati nel VO sono: * <ul> * <li>id</li> * <li>status</li> * <li>message</li> * </ul> * Il campo timestampUltimoAggiornamento viene sempre valorizzato con il * current time dell'operazione. * * @param job * Istanza di {@code JobVO} contenente i dati da aggiornare. * * @throws Exception */ public void updateJob(JobVO job) throws Exception { logger.debug("[JobDAO::updateJob] BEGIN"); try { getHibernateTemplate().update(job); } catch(Exception e) { logger.error("[JobDAO::updateJob] ERROR", e); throw e; } finally { logger.debug("[JobDAO::updateJob] END"); } } /** * Reperisce le righe dei job filtrati per id dell'esecutore e per stato. * * @param jobRef * Stringa che identifica l'esecutore che ha rischiesto * l'accodamento del job. * @param status * Stato dei job da reperire. * @return Un array di {@code JobVO} contenente i job trovati dalla query. * @throws Exception * * @see it.doqui.index.ecmengine.business.job.util.JobStatus */ @SuppressWarnings("unchecked") public JobVO[] getJobsByStatus(String jobRef, String status) throws Exception { logger.debug("[JobDAO::getJobsByStatus] BEGIN"); logger.debug("[JobDAO::getJobsByStatus] Param [" +jobRef +"][" +status +"]"); JobVO[] result = null; try { Conjunction filters = Restrictions.conjunction(); filters.add(Restrictions.eq("ref", jobRef)); // Se ho passato lo status, lo aggiungo alla query if( status != null ){ filters.add(Restrictions.eq("status", status)); } Criteria criteria = getSession().createCriteria(JobVO.class); criteria.add(filters); // Ordino per progressivo, non e' garantita la temporarita' criteria.addOrder(Order.asc("id")); List<JobVO> queryResult = criteria.list(); if (queryResult != null) { result = queryResult.toArray(new JobVO[]{}); } else { result = new JobVO[0]; } } catch(Exception e) { logger.error("[JobDAO::getJobsByStatus] ERROR", e); throw e; } finally { if( result!=null ){ logger.debug("[JobDAO::getJobsByStatus] Result size " +result.length ); } else { logger.debug("[JobDAO::getJobsByStatus] Result size NULL" ); } logger.debug("[JobDAO::getJobsByStatus] Result " +result); logger.debug("[JobDAO::getJobsByStatus] END"); } return result; } /** * Reperisce le righe dei job filtrati per id dell'esecutore * * @param jobRef * Stringa che identifica l'esecutore che ha rischiesto * l'accodamento del job. * * @return Un array di {@code JobVO} contenente i job trovati dalla query. * @throws Exception */ public JobVO[] getJobsByExecutor(String jobRef) throws Exception { logger.debug("[JobDAO::getJobsByExecutor] BEGIN"); JobVO[] result = null; try { result = getJobsByStatus( jobRef, null ); } catch(Exception e) { logger.error("[JobDAO::getJobsByExecutor] ERROR", e); throw e; } finally { logger.debug("[JobDAO::getJobsByExecutor] END"); } return result; } /** * Reperisce i parametri relativi ad un job specifico. * * @param jobVO * L'istanza di {@code JobVO} relativa al job di cui reperire i * parametri. * @return Un array di {@code JobParamVO} contenente i parametri. * @throws Exception */ @SuppressWarnings("unchecked") public JobParamVO[] getJobParamsByJob(JobVO jobVO) throws Exception { logger.debug("[JobDAO::getJobParamsByJob] BEGIN"); JobParamVO[] result = null; try { Conjunction filters = Restrictions.conjunction(); filters.add(Restrictions.eq("jobId", jobVO.getId())); Criteria criteria = getSession().createCriteria(JobParamVO.class); criteria.add(filters); List<JobParamVO> queryResult = criteria.list(); if (queryResult != null) { result = queryResult.toArray(new JobParamVO[]{}); } else { result = new JobParamVO[0]; } } catch(Exception e) { logger.error("[JobDAO::getJobParamsByJob] ERROR", e); throw e; } finally { logger.debug("[JobDAO::getJobParamsByJob] END"); } return result; } }