// 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();
try
{
order.transactionBegin();
((Terminable)order).setTermin(termin); // Ziel-Datum uebernehmen
order.store(); // speichern, noetig, weil wir die ID brauchen
// Meta-Daten speichern
MetaKey.REMINDER_CREATOR.set(order,hostname);
MetaKey.REMINDER_TEMPLATE.set(order,id);
order.transactionCommit();
Application.getMessagingFactory().sendSyncMessage(new ImportMessage(order)); //synchron senden, weil wir schon im Messaging-Thread sind
Logger.info("order " + type.getSimpleName() + ":" + id + " cloned by " + hostname + ", id: " + order.getID() + ", date: " + termin);
}
catch (Exception e)
{
try
{
order.transactionRollback();
}
catch (Exception e2)
{
Logger.error("unable to rollback transaction",e2);
}