private HBCIMsgStatus[] doJobs()
{
HBCIUtils.log("processing jobs",HBCIUtils.LOG_INFO);
ArrayList<HBCIMsgStatus> msgstatus_a=new ArrayList<HBCIMsgStatus>();
HBCIPassportList msgPassports=new HBCIPassportList();
HBCIKernelImpl kernel=(HBCIKernelImpl)getParentHandler().getKernel();
HBCIPassportInternal mainPassport=(HBCIPassportInternal)getParentHandler().getPassport();
// durch die liste aller auszuf�hrenden nachrichten durchloopen
int nof_messages=msgs.size();
for (int j=0;j<nof_messages;j++) {
// tasks ist liste aller jobs, die in dieser nachricht ausgef�hrt werden sollen
ArrayList<HBCIJobImpl> tasks= msgs.get(j);
// loop wird benutzt, um zu z�hlen, wie oft bereits "nachgehakt" wurde,
// falls ein bestimmter job nicht mit einem einzigen nachrichtenaustausch
// abgearbeitet werden konnte (z.b. abholen kontoausz�ge)
int loop=0;
HBCIMsgStatus msgstatus=new HBCIMsgStatus();
// diese schleife loopt solange, bis alle jobs der aktuellen nachricht
// tats�chlich abgearbeitet wurden (also inclusive "nachhaken")
while (true) {
boolean addMsgStatus=true;
try {
HBCIUtils.log("generating custom msg #"+(j+1)+" (loop "+(loop+1)+")",
HBCIUtils.LOG_DEBUG);
int taskNum=0;
msgPassports.clear();
kernel.rawNewMsg("CustomMsg");
// durch alle jobs loopen, die eigentlich in der aktuellen
// nachricht abgearbeitet werden m�ssten
for (Iterator<HBCIJobImpl> i=tasks.iterator();i.hasNext();) {
HBCIJobImpl task=i.next();
// wenn der Task entweder noch gar nicht ausgef�hrt wurde
// oder in der letzten Antwortnachricht ein entsprechendes
// Offset angegeben wurde
if (task.needsContinue(loop)) {
task.setContinueOffset(loop);
Properties p=task.getLowlevelParams();
String header=HBCIUtilsInternal.withCounter("GV",taskNum);
String taskName=task.getName();
HBCIUtils.log("adding task "+taskName,HBCIUtils.LOG_DEBUG);
HBCIUtilsInternal.getCallback().status(mainPassport,HBCICallback.STATUS_SEND_TASK,task);
task.setIdx(taskNum);
// Daten f�r den Task festlegen
for (Enumeration e=p.keys();e.hasMoreElements();) {
String key=(String)(e.nextElement());
kernel.rawSet(header+"."+key,p.getProperty(key));
}
// additional passports f�r diesen task ermitteln
// und zu den passports f�r die aktuelle nachricht
// hinzuf�gen;
// doppelg�nger werden schon von
// HBCIPassportList.addPassport() herausgefiltert
msgPassports.addAll(task.getSignaturePassports());
taskNum++;
}
}