int factor = 100 / (list.size() * DDVConfig.PORTS.length);
for (Reader reader:list)
{
if (task.isInterrupted())
throw new OperationCanceledException();
monitor.setStatusText(i18n.tr("Teste {0}",reader.getName()));
// Testen, ob der Kartenleser ueberhaupt unterstuetzt wird
if (!reader.isSupported())
{
monitor.log(" " + i18n.tr("�berspringe Kartenleser, wird von Ihrem System nicht unterst�tzt"));
continue;
}
// Checken, ob der CTAPI-Treiber existiert.
String s = StringUtils.trimToNull(reader.getCTAPIDriver());
Type type = reader.getType();
if (type.isCTAPI())
{
if (s == null)
{
monitor.log(" " + i18n.tr("�berspringe Kartenleser, kein CTAPI-Treiber definiert."));
continue;
}
File f = new File(s);
if (!f.exists())
{
monitor.log(" " + i18n.tr("�berspringe Kartenleser, CTAPI-Treiber {0} existiert nicht.",f.getAbsolutePath()));
continue;
}
}
int ctNumber = reader.getCTNumber();
temp.setCTNumber(ctNumber == -1 ? 0 : ctNumber);
temp.setEntryIndex(1);
temp.setReaderPreset(reader);
temp.setSoftPin(reader.useSoftPin());
temp.setCTAPIDriver(s);
temp.setHBCIVersion(reader.getDefaultHBCIVersion());
// PC/SC-Kartenleser suchen
if (type.isPCSC())
{
try
{
List<CardTerminal> terminals = TerminalFactory.getDefault().terminals().list();
// Eigentlich koennen wir hier pauschal den ersten gefundenen nehmen
if (terminals != null && terminals.size() > 0)
{
CardTerminal terminal = terminals.get(0);
String name = terminal.getName();
temp.setPCSCName(name);
PassportHandle handle = new PassportHandleImpl(temp);
handle.open();
handle.close(); // nein, nicht im finally, denn wenn das Oeffnen
// Passport liess sich oeffnen und schliessen. Dann haben
// wir den Kartenleser gefunden.
monitor.log(" " + name + " " + i18n.tr("gefunden"));
monitor.setStatusText(i18n.tr("OK. Kartenleser \"{0}\" gefunden",name));
monitor.setStatus(ProgressMonitor.STATUS_DONE);
monitor.setPercentComplete(100);
// Wir kopieren die temporaere Config noch in eine richtige
DDVConfig config = temp.copy();
config.setName(name);
return config;
}
}
catch (ApplicationException ae)
{
monitor.log(" " + ae.getMessage());
}
catch (Exception e)
{
Logger.error("unable to create ddv config",e);
}
finally
{
temp.setPCSCName(null); // muessen wir wieder zuruecksetzen
}
// Wir haben wohl nichts via PC/SC gefunden
monitor.log(" " + i18n.tr(" nicht gefunden"));
continue;
}
// Wir probieren alle Ports durch
for (String port:DDVConfig.PORTS)
{
if (task.isInterrupted())
throw new OperationCanceledException();
monitor.addPercentComplete(factor);
monitor.log(" " + i18n.tr("Port {0}",port));
temp.setPort(port);