Package de.willuhn.jameica.hbci.reminder

Source Code of de.willuhn.jameica.hbci.reminder.ReminderUtil

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/reminder/ReminderUtil.java,v $
* $Revision: 1.1 $
* $Date: 2011/10/20 16:20:05 $
* $Author: willuhn $
*
* Copyright (c) by willuhn - software & services
* All rights reserved
*
**********************************************************************/

package de.willuhn.jameica.hbci.reminder;

import java.util.Date;
import java.util.List;

import de.willuhn.jameica.hbci.HBCI;
import de.willuhn.jameica.hbci.MetaKey;
import de.willuhn.jameica.hbci.rmi.HibiscusDBObject;
import de.willuhn.jameica.hbci.rmi.Terminable;
import de.willuhn.jameica.reminder.Reminder;
import de.willuhn.jameica.reminder.ReminderInterval;
import de.willuhn.jameica.reminder.ReminderStorageProvider;
import de.willuhn.jameica.services.BeanService;
import de.willuhn.jameica.system.Application;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.I18N;

/**
* Ein paar statische Hilfsfunktionen.
*/
public class ReminderUtil
{
  private final static I18N i18n = Application.getPluginLoader().getPlugin(HBCI.class).getResources().getI18N();
 
  /**
   * Uebernimmt ein Reminder-Intervall in einen Auftrag oder entfernt es wieder (wenn "interval" null ist).
   * @param order der Auftrag.
   * @param interval das Intervall
   * @param end optionales Ende-Datum.
   * @throws Exception
   */
  public static void apply(HibiscusDBObject order, ReminderInterval interval, Date end) throws Exception
  {
    if (!(order instanceof Terminable))
    {
      Logger.info("type " + order.getClass().getName() + " does not support reminders");
      throw new ApplicationException(i18n.tr("Der Auftrag unterst�tzt keine Termine"));
    }
   
    try
    {
      order.transactionBegin();

      BeanService service = Application.getBootLoader().getBootable(BeanService.class);
      ReminderStorageProvider provider = service.get(ReminderStorageProviderHibiscus.class);

      MetaKey UUID = MetaKey.REMINDER_UUID;
     
      // Reminder laden
      String uuid       = UUID.get(order);
      Reminder reminder = (uuid != null ? provider.get(uuid) : null);

      // a) ohne Intervall
      if (interval == null)
      {
        // wenn wir schon einen Reminder haben, dann loeschen wir ihn
        if (reminder != null)
        {
          provider.delete(uuid);
          UUID.set(order,null); // Referenz loeschen
        }
      }
      else // b) mit Intervall
      {
        // Neuen Reminder anlegen?
        if (reminder == null)
          reminder = new Reminder();

        // Wichtig: Das Start-Datum des Reminders ist nicht direkt der
        // Termin sondern {Termin + ersters Intervall}. Die erste
        // Ausfuehrung ist ja der Auftrag "bu" selbst. Erst die Folge-Termine
        // kommen ja via Reminder.
        // Das erste Datum ignorieren wir. Wir wollen ja erst das naechste haben.
        // Selbst bei jaehrlicher Ausfuehrung sollte die Liste jetzt genau
        // 2 Daten enthalten (erster und letzter des Jahres).
        List<Date> dates = interval.getDates(((Terminable)order).getTermin(),null,null);
        if (dates.size() < 2)
          throw new ApplicationException(i18n.tr("Kein Datum f�r die n�chste Wiederholung ermittelbar"));
        reminder.setDate(dates.get(1));
        reminder.setEnd(end);
        reminder.setData(Reminder.KEY_EXPIRED,null); // expired date resetten. Wird vom Service bei Bedarf neu gesetzt
        reminder.setQueue("hibiscus.reminder.order");
        reminder.setData("order.class",order.getClass().getName());
        reminder.setData("order.id",order.getID());
        reminder.setReminderInterval(interval);
       
        if (uuid != null) // Update
        {
          provider.update(uuid,reminder);
        }
        else // Add
        {
          uuid = provider.add(reminder);
          // UUID des Reminders speichern
          UUID.set(order,uuid);
        }
      }
     
      order.transactionCommit();
    }
    catch (Exception e)
    {
      try
      {
        order.transactionRollback();
      }
      catch (Exception e2)
      {
        Logger.error("unable to rollback transaction",e2);
      }
      throw e;
    }
  }
}



/**********************************************************************
* $Log: ReminderUtil.java,v $
* Revision 1.1  2011/10/20 16:20:05  willuhn
* @N BUGZILLA 182 - Erste Version von client-seitigen Dauerauftraegen fuer alle Auftragsarten
*
**********************************************************************/
TOP

Related Classes of de.willuhn.jameica.hbci.reminder.ReminderUtil

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.