Java tutorial
/* * Copyright 2010, 2011 Renaud Brub * * This file is part of PIGE. * * PIGE 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 3 of the License, or * (at your option) any later version. * * PIGE 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 PIGE. If not, see <http://www.gnu.org/licenses/>. */ package ca.qc.cegepoutaouais.tge.pige.server; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Maintenance; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.ServerConfigs; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.TimerTask; import org.apache.log4j.Logger; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; /** * * @author Renaud Brub */ public class MaintenanceRecallServiceTask extends TimerTask { private static final Logger logger = LogHelper.getLogger(MaintenanceRecallServiceTask.class); private final Properties configs = Configurations.getProperties(); @Override public void run() { Boolean enabled = Boolean.parseBoolean( configs.getProperty(ServerConfigs.MAINTENANCE_RECALL_SERVICE_ENABLED, Boolean.FALSE.toString())); if (!enabled) { logger.info("Le service de rappel des maintenances est " + "dsactiv. Pour le ractiver, changez la valeur de la " + "ligne 'server.maintenance_recall_service.enabled' 'true' dans " + "le fichier de configurations et redmarrez le serveur ou " + "bien ractiver-le partir du menu 'Gestion' dans PIGE. " + "(ne ncessite pas de redmarrage)."); return; } logger.info("Dmarrage du service de rappel des maintenances..."); Transaction tx = null; List<Maintenance> maintenances = null; Session session = null; StringBuilder recallMsg = new StringBuilder(); recallMsg.append("<b>Rappel des maintenances:</b><br/>"); recallMsg.append("<ul>"); Boolean recallToSend = Boolean.FALSE; try { session = PigeHibernateUtil.openSession(); tx = session.beginTransaction(); maintenances = session.createCriteria(Maintenance.class) .add(Restrictions.eq(Maintenance.USE_RECALL_REF, Boolean.TRUE)) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); if (maintenances == null || maintenances.size() == 0) { logger.info("Aucun rappel traiter. Termin."); return; } logger.debug("Nombre de rappel effectuer: " + maintenances.size()); // Construire une date et heure prdfinie afin de servir de // comparaison pour les chances. final Date today = ServerUtil.getTodayDate(); Date startDate = null; Date endDate = null; Date lastRecallDate = null; Integer days = 0; final Long conv = 1000L * 60L * 60L * 24L; for (Maintenance m : maintenances) { logger.debug("Traitement de la maintenance: " + m.toString()); startDate = m.getStartDate(); endDate = m.getEndDate(); logger.debug("Vrification des dates de dmarrage et de fin de rappel..."); if (startDate != null) { startDate = ServerUtil.getZeroDate(startDate); if (today.getTime() < startDate.getTime()) { logger.debug("La date de dpart n'est pas encore atteinte: " + startDate.toString()); continue; } } if (endDate != null) { endDate = ServerUtil.getZeroDate(endDate); if (today.getTime() > endDate.getTime()) { logger.debug("La date de fin est dpasse: " + endDate.toString()); continue; } } logger.debug("Vrification de la frquence du rappel..."); lastRecallDate = m.getLastRecallDate(); if (lastRecallDate == null) { lastRecallDate = today; } logger.debug("Calcule du nombre de jour pass..."); float ms = today.getTime() - lastRecallDate.getTime(); days = new Float(ms / (float) conv).intValue(); logger.debug("ms = " + ms + ", days = " + days); Integer freq = (m.getFrequency() == null ? 0 : m.getFrequency()); if (days >= freq) { logger.debug("Ajout du rappel de maintenance la liste..."); m.setLastRecallDate(today); session.update(m); addTooRecallList(m, recallMsg); recallToSend = Boolean.TRUE; } } // Confirmer les changements la base de donnes. tx.commit(); } catch (Exception hex) { logger.error(hex); if (tx != null) { tx.rollback(); } } finally { if (session != null) { session.close(); } } if (recallToSend) { logger.debug("Envoi du courriel contenant les rappels..."); EmailService email = new EmailService(); email.setRecipient(configs.getProperty("server.maintenance_recall_service.email")); email.setSubjet(configs.getProperty("msg.user.email.maintenance_recall_title")); email.setBody(recallMsg.toString(), Boolean.TRUE); email.sendAsync(); } logger.info("Rappels des maintenances effectus!"); } private void addTooRecallList(Maintenance m, StringBuilder builder) { builder.append("<li>ID: ").append(m.getId()).append(", Nom: ").append(m.getName()).append(", Description: ") .append(m.getDescription()).append("</li>"); } }