Package org.opencustomer.db.listener

Source Code of org.opencustomer.db.listener.ReminderMailListener

/*******************************************************************************
* ***** BEGIN LICENSE BLOCK Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is the OpenCustomer CRM.
*
* The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
* Software-Ingenieurb�ro). Portions created by the Initial Developer are
* Copyright (C) 2005 the Initial Developer. All Rights Reserved.
*
* Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
*                 Felix Breske <felix.breske@bader-jene.de>
*
* ***** END LICENSE BLOCK *****
*/

package org.opencustomer.db.listener;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;

import javax.mail.internet.AddressException;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.event.DeleteEvent;
import org.hibernate.event.DeleteEventListener;
import org.hibernate.event.SaveOrUpdateEvent;
import org.hibernate.event.SaveOrUpdateEventListener;
import org.opencustomer.connector.mail.exception.NoValidSenderException;
import org.opencustomer.connector.mail.messages.JobReminderMail;
import org.opencustomer.connector.scheduling.SchedulingManager;
import org.opencustomer.connector.scheduling.jobs.MailJob;
import org.opencustomer.db.EventUtility;
import org.opencustomer.db.vo.calendar.CalendarVO;
import org.opencustomer.db.vo.calendar.EventCalendarVO;
import org.opencustomer.db.vo.calendar.EventVO;
import org.opencustomer.db.vo.crm.JobVO;
import org.opencustomer.webapp.Settings;
import org.opencustomer.webapp.module.calendar.util.EventBean;

import com.jtheory.jdring.AlarmEntry;
import com.jtheory.jdring.PastDateException;

/**
* This class listens to saved or delted EventVO or JobVO. If such an entity is saved, a ReminderMail and a ReminderMailJob
* is created, and added to the SchedulingManager.
* @author fbreske
* @see org.opencustomer.connector.mail.messages.EventReminderMail
* @see org.opencustomer.connector.mail.messages.JobReminderMail
* @see org.opencustomer.connector.scheduling.jobs.MailJob
*
*/
public class ReminderMailListener implements SaveOrUpdateEventListener, DeleteEventListener
{
    private static final long serialVersionUID = 5606056583886236327L;
   
    private static Logger log = Logger.getLogger(ReminderMailListener.class);

    /**
     * Listen to the saved or updated entities. Adds or changes a MailJob.
     */
    public void onSaveOrUpdate(SaveOrUpdateEvent saveOrUpdateEvent) throws HibernateException
    {
        if(!Settings.getInstance().isMailReminderEnabled())
        {
            if(log.isDebugEnabled())
                log.debug("reminder mail disabled");
            return;
        }
       
        if(saveOrUpdateEvent.getEntity() instanceof EventVO)
        {
            EventVO event = (EventVO) saveOrUpdateEvent.getEntity();
            CalendarVO mainCalendar = null;
            for(EventCalendarVO vo : event.getEventCalendars()) {
                if(EventCalendarVO.ParticipiantType.HOST.equals(vo.getParticipiantType())) {
                    mainCalendar = vo.getCalendar();
                }
            }
           
           
            Calendar startDate = GregorianCalendar.getInstance();
            Calendar endDate = GregorianCalendar.getInstance();
            endDate.set(startDate.get(Calendar.YEAR),startDate.get(Calendar.MONTH),startDate.get(Calendar.DATE)+2,0,0);
           
            if(event.getReminderDate() != null && event.getReminderDate().after(startDate.getTime()) && event.getReminderDate().before(endDate.getTime()))
            {
                if(log.isDebugEnabled())
                    log.debug("reloading actual Jobs");
                SchedulingManager.getInstance().loadReminderJobsfromDB(startDate.getTime(), endDate.getTime());
            }
            else if(event.getReminderDate() != null && event.getRecurrenceType() != EventVO.RecurrenceType.NONE)
            {
                List<EventBean> events = EventUtility.calculateRecurrences(mainCalendar, endDate.getTime(), event, true);
                for(EventBean eventBean : events)
                {
                    if(eventBean.getReminderDate().after(startDate.getTime()) && eventBean.getReminderDate().before(endDate.getTime()))
                    {
                        if(log.isDebugEnabled())
                            log.debug("reloading actual Jobs");
                        SchedulingManager.getInstance().loadReminderJobsfromDB(startDate.getTime(), endDate.getTime());
                    }
                }
            }
            else
            {
                if(log.isInfoEnabled())
                    log.info("event ignored: " + event);
            }
        }
        else  if(saveOrUpdateEvent.getEntity() instanceof JobVO)
        {
            JobVO job = (JobVO)saveOrUpdateEvent.getEntity();
            SchedulingManager manager = SchedulingManager.getInstance();
            JobReminderMail reminderMail;
            try
            {
                reminderMail = new JobReminderMail();
                reminderMail.setUser(job.getAssignedUser());
            }
            catch (NoValidSenderException e1)
            {
                log.warn("no person for user: " + job.getAssignedUser());
                return;
            }
            catch (AddressException e1)
            {
                log.warn("cannot create reminder mail, incorrect sender address");
                return;
            }
           
            reminderMail.setJob(job);
            MailJob mailJob = new MailJob(reminderMail);
           
            for(Object obj :  manager.getAlarmManager().getAllAlarms())
            {
                AlarmEntry alarmEntry = (AlarmEntry) obj;
                String name;
                if(alarmEntry.getName().equals("JOB" + job.getId())){
                    if(log.isDebugEnabled())
                        log.debug("removing mail job for [job]: " + job);
                    manager.getAlarmManager().removeAlarm(alarmEntry);
                }
            }
            try
            {
                if(log.isInfoEnabled())
                    log.info("adding mailJob for [job]: " + job);
                String name;
                Calendar reminderDate = GregorianCalendar.getInstance();
                reminderDate.setTime(job.getDueDate());
                reminderDate.add(Calendar.MINUTE, -1 * Settings.getInstance().getAlarmBeforeJob());
                AlarmEntry alarmEntry = new AlarmEntry("JOB" + job.getId(),reminderDate.getTime(),mailJob);
                alarmEntry.setRingInNewThead();
                manager.getAlarmManager().addAlarm(alarmEntry);
            }
            catch (PastDateException e)
            {
                log.info("ignoring old job alarm: " + job);
            }
        }
    }

    /**
     * Deletes a MailJob if the entity is delted.
     */
    public void onDelete(DeleteEvent event) throws HibernateException {
        onDelete(event, null);
    }
   
    public void onDelete(DeleteEvent event, Set transientEntities) throws HibernateException {
        if(!Settings.getInstance().isMailReminderEnabled())
        {
            if(log.isDebugEnabled())
                log.debug("reminder mail disabled");
            return;
        }
        if(event.getObject() instanceof EventVO)
        {
            EventVO eventVO = (EventVO) event.getObject();
            SchedulingManager manager = SchedulingManager.getInstance();
           
            for(Object obj :  manager.getAlarmManager().getAllAlarms())
            {
                AlarmEntry alarmEntry = (AlarmEntry) obj;
                if(alarmEntry.getName().contains("EVENT"+eventVO.getId())){
                    if(log.isDebugEnabled())
                        log.debug("removing mail job for: " + eventVO);
                    manager.getAlarmManager().removeAlarm(alarmEntry);
                }
            }
        }
        else if(event.getObject() instanceof JobVO)
        {
            JobVO job = (JobVO) event.getObject();
            SchedulingManager manager = SchedulingManager.getInstance();
           
            for(Object obj :  manager.getAlarmManager().getAllAlarms())
            {
                AlarmEntry alarmEntry = (AlarmEntry) obj;
                if(alarmEntry.getName().contains("JOB" + job.getId())){
                    if(log.isDebugEnabled())
                        log.debug("removing mail job for: " + job);
                    manager.getAlarmManager().removeAlarm(alarmEntry);
                }
            }
        }
    }
}
TOP

Related Classes of org.opencustomer.db.listener.ReminderMailListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.