Package de.willuhn.jameica.hbci.reminder

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

/**********************************************************************
* $Source: /cvsroot/hibiscus/hibiscus/src/de/willuhn/jameica/hbci/reminder/ReminderStorageProviderHibiscus.java,v $
* $Revision: 1.2 $
* $Date: 2011/12/27 22:54:55 $
* $Author: willuhn $
*
* Copyright (c) by willuhn - software & services
* All rights reserved
*
**********************************************************************/

package de.willuhn.jameica.hbci.reminder;

import java.rmi.RemoteException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import de.willuhn.annotation.Lifecycle;
import de.willuhn.annotation.Lifecycle.Type;
import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.datasource.rmi.DBService;
import de.willuhn.datasource.rmi.ObjectNotFoundException;
import de.willuhn.datasource.rmi.ResultSetExtractor;
import de.willuhn.jameica.hbci.Settings;
import de.willuhn.jameica.hbci.rmi.DBReminder;
import de.willuhn.jameica.reminder.AbstractReminderStorageProvider;
import de.willuhn.jameica.reminder.Reminder;
import de.willuhn.jameica.system.JameicaException;

/**
* Implementierung eines Storage-Providers fuer Hibiscus.
* Ist noetig, damit die Reminder ebenfalls in der Datenbank landen. Denn
* wenn sich mehrere Hibiscus-Installationen eine gemeinsame SQL-Datenbank teilen,
* muessen die Reminder auf allen Arbeitsplaetzen zur Verfuegung stehen. Beim
* Default-Storage-Provider von Jameica waere das nicht der Fall, da der
* die Daten in einer lokalen Wallet-Datei speichert. In dem Fall waeren
* die Erinnerungen nur auf dem Arbeitsplatz verfuegbar, auf dem der
* Reminder angelegt wurde.
*
* Wir verwenden einen Context-Lifecycle, damit wir in Hibiscus die
* gleiche Instanz verwenden, die auch der Reminder-Service von Jameica nutzt.
* Ist zwar nicht notwendig, aber sauberer.
*/
@Lifecycle(Type.CONTEXT)
public class ReminderStorageProviderHibiscus extends AbstractReminderStorageProvider
{
  /**
   * @see de.willuhn.jameica.reminder.ReminderStorageProvider#get(java.lang.String)
   */
  public Reminder get(String uuid) throws Exception
  {
    DBReminder r = this.getDBReminder(uuid);
    return r != null ? r.getReminder() : null;
  }

  /**
   * @see de.willuhn.jameica.reminder.ReminderStorageProvider#add(de.willuhn.jameica.reminder.Reminder)
   */
  public String add(Reminder reminder) throws Exception
  {
    if (reminder == null)
      throw new JameicaException("no reminder given");
   
    String uuid = this.createUUID();
   
    DBReminder r = (DBReminder) Settings.getDBService().createObject(DBReminder.class,null);
    r.setUUID(uuid);
    r.setReminder(reminder);
    r.store();
   
    return uuid;
  }


  /**
   * @see de.willuhn.jameica.reminder.ReminderStorageProvider#update(java.lang.String, de.willuhn.jameica.reminder.Reminder)
   */
  public void update(String uuid, Reminder reminder) throws Exception
  {
    if (StringUtils.trimToNull(uuid) == null)
      throw new JameicaException("no uuid given");
   
    if (reminder == null)
      throw new JameicaException("no reminder given");
   
    // Checken, ob wir den schon haben
    DBReminder r = this.getDBReminder(uuid);
    if (r == null)
      throw new ObjectNotFoundException("no reminder found for uuid: " + uuid);
   
    // Daten uebernehmen und speichern
    r.setReminder(reminder);
    r.store();
  }

  /**
   * @see de.willuhn.jameica.reminder.ReminderStorageProvider#delete(java.lang.String)
   */
  public Reminder delete(String uuid) throws Exception
  {
    if (StringUtils.trimToNull(uuid) == null)
      throw new JameicaException("no uuid given");
   
    DBReminder r = this.getDBReminder(uuid);
    if (r == null)
      return null; // den gibts gar nicht
   
    Reminder reminder = r.getReminder();
    r.delete();
   
    // den geloeschten Reminder noch zurueckliefern
    return reminder;
  }

  /**
   * @see de.willuhn.jameica.reminder.ReminderStorageProvider#getUUIDs()
   */
  public String[] getUUIDs() throws Exception
  {
    return (String[]) Settings.getDBService().execute("select uuid from reminder",null,new ResultSetExtractor() {
      public Object extract(ResultSet rs) throws RemoteException, SQLException
      {
        List<String> list = new ArrayList<String>();
        while (rs.next())
        {
          list.add(rs.getString(1));
        }
       
        return list.toArray(new String[list.size()]);
      }
    });
  }

 
  /**
   * Laedt den zugehoerigen Datensatz aus der DB.
   * @param uuid die UUID.
   * @return der Reminder aus der Datenbank oder NULL, wenn er nicht existiert.
   * @throws Exception
   */
  private DBReminder getDBReminder(String uuid) throws Exception
  {
    if (StringUtils.trimToNull(uuid) == null)
      throw new JameicaException("no uuid given");
   
    DBService service = Settings.getDBService();
    DBIterator i = service.createList(DBReminder.class);
    i.addFilter("uuid = ?",uuid);
    if (i.hasNext())
      return (DBReminder) i.next();
   
    return null;
  }
}



/**********************************************************************
* $Log: ReminderStorageProviderHibiscus.java,v $
* Revision 1.2  2011/12/27 22:54:55  willuhn
* @N Reminder loeschen, wenn zugehoeriger Auftrag geloescht wurde
*
* 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.ReminderStorageProviderHibiscus

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.