ReminderMessage msg = (ReminderMessage) message;
Map<String,Serializable> data = (Map<String,Serializable>) msg.getData();
Date termin = msg.getDate();
MultipleClassLoader loader = Application.getPluginLoader().getManifest(HBCI.class).getClassLoader();
DBService service = Settings.getDBService();
// 1. der zu duplizierende Auftrag
Class type = loader.load((String) data.get("order.class"));
String id = (String) data.get("order.id");
Logger.debug("checking, if order " + type.getSimpleName() + ":" + id + " has to be cloned for " + termin);
// 2. Checken, ob der Auftrag bereits erzeugt wurde. Das kann z.Bsp. der
// Fall sein, wenn mehrere Hibiscus-Instanzen die gleiche DB verwenden.
// Dann erfolgt das Duplizieren durch den ersten Client, der den Termin
// ausfuehrt. Wir suchen also nach einem Auftrag, der auf dem zu duplizierenden
// Auftrag basiert und den gesuchten Termin besitzt
DBIterator list = service.createList(type);
list.addFilter("termin = ?",termin);
while (list.hasNext())
{
HibiscusDBObject t = (HibiscusDBObject) list.next();
// Wenn der Auftrag in den Meta-Daten die ID des gesuchten Auftrages hat,
// dann ist er bereits erzeugt worden.
String from = MetaKey.REMINDER_TEMPLATE.get(t);
if (from != null && from.equals(id))
{
Logger.debug("already cloned by " + MetaKey.REMINDER_CREATOR.get(t));
return;
}
}
// 3. Auftrag laden
Duplicatable template = (Duplicatable) service.createObject(type,id);
// 4. Auftrag clonen und speichern
HibiscusDBObject order = (HibiscusDBObject) template.duplicate();
String hostname = Application.getCallback().getHostname();