if (format == null)
throw new ApplicationException(i18n.tr("Kein Datei-Format ausgew�hlt"));
final ClassLoader loader = Application.getPluginLoader().getManifest(HBCI.class).getClassLoader();
Reader reader = null;
try
{
reader = new XmlReader(is, new ObjectFactory() {
public GenericObject create(String type, String id, Map values) throws Exception
{
AbstractDBObject object = (AbstractDBObject) Settings.getDBService().createObject(loader.loadClass(type),null);
Iterator i = values.keySet().iterator();
while (i.hasNext())
{
String name = (String) i.next();
object.setAttribute(name,values.get(name));
}
return object;
}
});
if (monitor != null)
monitor.setStatusText(i18n.tr("Lese Datei ein"));
Konto konto = null;
try
{
// Wir fragen das Konto grundsaetzlich manuell ab. Siehe BUGZILLA 700
KontoAuswahlDialog d = new KontoAuswahlDialog(KontoAuswahlDialog.POSITION_CENTER);
konto = (Konto) d.open();
}
catch (OperationCanceledException oce)
{
Logger.info("import cancelled");
return;
}
if (konto == null)
throw new ApplicationException(i18n.tr("Kein Konto ausgew�hlt"));
int created = 0;
int error = 0;
SepaSammelTransfer currentTransfer = null;
DBObject object = null;
while ((object = (DBObject) reader.read()) != null)
{
if (monitor != null)
{
monitor.log(i18n.tr("Datensatz {0}", "" + (created+1)));
if (created > 0 && created % 10 == 0) // nur geschaetzt
monitor.addPercentComplete(1);
}
try
{
// Ist noetig, damit die Buchungen die neue ID des Transfers kriegen
if (object instanceof SepaSammelTransfer)
{
currentTransfer = (SepaSammelTransfer) object;
currentTransfer.setKonto(konto);
}
else
{
((SepaSammelTransferBuchung)object).setSammelTransfer(currentTransfer);
}
object.store();
created++;
try
{
Application.getMessagingFactory().sendMessage(new ImportMessage(object));
}
catch (Exception ex)
{
Logger.error("error while sending import message",ex);
}
}
catch (ApplicationException ae)
{
monitor.log(" " + ae.getMessage());
error++;
}
catch (Exception e)
{
Logger.error("unable to import line",e);
monitor.log(" " + i18n.tr("Fehler beim Import des Datensatzes: {0}",e.getMessage()));
error++;
}
}
monitor.setStatusText(i18n.tr("{0} Datens�tze erfolgreich importiert, {1} fehlerhafte �bersprungen", new String[]{""+created,""+error}));
monitor.setPercentComplete(100);
}
catch (OperationCanceledException oce)
{
Logger.warn("operation cancelled");
throw new ApplicationException(i18n.tr("Import abgebrochen"));
}
catch (Exception e)
{
Logger.error("error while reading file",e);
throw new ApplicationException(i18n.tr("Fehler beim Import der XML-Datei"));
}
finally
{
if (reader != null)
{
try
{
reader.close();
}
catch (IOException e)
{
Logger.error("error while closing inputstream",e);
}