Program: 89467
Project: 89467
Buggy source:
@Override public void handleAction(Object context) throws ApplicationException {
  String kontoid;
  try {
    kontoid=askUserForKonto();
  }
 catch (  Exception e1) {
    e1.printStackTrace();
    Logger.error("String_Node_Str",e1);
    return;
  }
  ArrayList<FeldDefinitionen> fd=new ArrayList<FeldDefinitionen>();
  fd.add(new FeldDefinitionen("String_Node_Str",java.util.Date.class,"String_Node_Str",true));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimal.class,"String_Node_Str",true));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimalWithCurrency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",Currency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimalWithCurrency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",Currency.class,"String_Node_Str",false));
  List<GenericObjectHashMap> daten;
  try {
    CSVImportHelper csv=new CSVImportHelper("String_Node_Str" + kontoid);
    daten=csv.run(fd);
  }
 catch (  Exception e) {
    Logger.error("String_Node_Str",e);
    throw new ApplicationException(e);
  }
  if (daten == null) {
    return;
  }
  String fehlt="String_Node_Str";
  try {
    for (    GenericObjectHashMap x : daten) {
      for (      FeldDefinitionen f : fd) {
        Object value=x.getAttribute(f.getAttr());
        if (f.isRequired() && value.toString().isEmpty()) {
          fehlt+="String_Node_Str" + f.getBeschreibung();
        }
        if (value instanceof BigDecimalWithCurrency) {
          BigDecimalWithCurrency b=(BigDecimalWithCurrency)value;
          x.setAttribute(f.getAttr(),b.getZahl());
          x.setAttribute(f.getAttr() + "String_Node_Str",b.getWaehrung());
        }
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        fehlt+="String_Node_Str";
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        fehlt+="String_Node_Str";
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty()) {
        x.setAttribute("String_Node_Str",x.getAttribute("String_Node_Str"));
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty()) {
        x.setAttribute("String_Node_Str",x.getAttribute("String_Node_Str"));
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && !x.getAttribute("String_Node_Str").toString().isEmpty()) {
        BigDecimal d=((BigDecimal)x.getAttribute("String_Node_Str")).divide((BigDecimal)x.getAttribute("String_Node_Str"),5,RoundingMode.HALF_UP);
        x.setAttribute("String_Node_Str",d);
      }
      if (!x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        BigDecimal d=((BigDecimal)x.getAttribute("String_Node_Str")).multiply((BigDecimal)x.getAttribute("String_Node_Str"));
        x.setAttribute("String_Node_Str",d);
      }
      for (      FeldDefinitionen f : fd) {
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (x.getAttribute(f.getAttr()).toString().isEmpty()) {
          fehlt+="String_Node_Str" + f.getBeschreibung();
        }
      }
      if (!fehlt.isEmpty()) {
        Logger.error("String_Node_Str" + fehlt);
        throw new ApplicationException("String_Node_Str" + fehlt.substring(1));
      }
    }
    Konto konto=Utils.getKontoByID(kontoid);
    UmsatzeAusBestandsAenderung umsaetzeAusBestaenden=new UmsatzeAusBestandsAenderung(konto);
    Utils.clearBestand(konto);
    for (    GenericObjectHashMap x : daten) {
      Utils.addBestand(Utils.getORcreateWKN((String)x.getAttribute("String_Node_Str"),(String)x.getAttribute("String_Node_Str"),(String)x.getAttribute("String_Node_Str")),konto,((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),((Currency)x.getAttribute("String_Node_Str")).getCurrencyCode(),((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),((Currency)x.getAttribute("String_Node_Str")).getCurrencyCode(),(Date)x.getAttribute("String_Node_Str"),(Date)x.getAttribute("String_Node_Str"));
    }
    umsaetzeAusBestaenden.erzeugeUmsaetze();
  }
 catch (  RemoteException e) {
    throw new ApplicationException(e);
  }
  Application.getMessagingFactory().sendMessage(new StatusBarMessage(Application.getI18n().tr("String_Node_Str"),StatusBarMessage.TYPE_INFO));
}

Fixed version (ground truth):
@Override public void handleAction(Object context) throws ApplicationException {
  String kontoid;
  try {
    kontoid=askUserForKonto();
  }
 catch (  Exception e1) {
    e1.printStackTrace();
    Logger.error("String_Node_Str",e1);
    return;
  }
  ArrayList<FeldDefinitionen> fd=new ArrayList<FeldDefinitionen>();
  fd.add(new FeldDefinitionen("String_Node_Str",java.util.Date.class,"String_Node_Str",true));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",String.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimal.class,"String_Node_Str",true));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimalWithCurrency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",Currency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",BigDecimalWithCurrency.class,"String_Node_Str",false));
  fd.add(new FeldDefinitionen("String_Node_Str",Currency.class,"String_Node_Str",false));
  List<GenericObjectHashMap> daten;
  try {
    CSVImportHelper csv=new CSVImportHelper("String_Node_Str" + kontoid);
    daten=csv.run(fd);
  }
 catch (  Exception e) {
    Logger.error("String_Node_Str",e);
    throw new ApplicationException(e);
  }
  if (daten == null) {
    return;
  }
  String fehlt="String_Node_Str";
  try {
    for (    GenericObjectHashMap x : daten) {
      for (      FeldDefinitionen f : fd) {
        Object value=x.getAttribute(f.getAttr());
        if (f.isRequired() && value.toString().isEmpty()) {
          fehlt+="String_Node_Str" + f.getBeschreibung();
        }
        if (value instanceof BigDecimalWithCurrency) {
          BigDecimalWithCurrency b=(BigDecimalWithCurrency)value;
          x.setAttribute(f.getAttr(),b.getZahl());
          x.setAttribute(f.getAttr() + "String_Node_Str",b.getWaehrung());
        }
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        fehlt+="String_Node_Str";
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        fehlt+="String_Node_Str";
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty()) {
        x.setAttribute("String_Node_Str",x.getAttribute("String_Node_Str"));
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty()) {
        x.setAttribute("String_Node_Str",x.getAttribute("String_Node_Str"));
      }
      if (x.getAttribute("String_Node_Str").toString().isEmpty() && !x.getAttribute("String_Node_Str").toString().isEmpty()) {
        BigDecimal d=((BigDecimal)x.getAttribute("String_Node_Str")).divide((BigDecimal)x.getAttribute("String_Node_Str"),5,RoundingMode.HALF_UP);
        x.setAttribute("String_Node_Str",d);
      }
      if (!x.getAttribute("String_Node_Str").toString().isEmpty() && x.getAttribute("String_Node_Str").toString().isEmpty()) {
        BigDecimal d=((BigDecimal)x.getAttribute("String_Node_Str")).multiply((BigDecimal)x.getAttribute("String_Node_Str"));
        x.setAttribute("String_Node_Str",d);
      }
      for (      FeldDefinitionen f : fd) {
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (f.getAttr().equals("String_Node_Str")) {
          continue;
        }
        if (x.getAttribute(f.getAttr()).toString().isEmpty()) {
          fehlt+="String_Node_Str" + f.getBeschreibung();
        }
      }
      if (!fehlt.isEmpty()) {
        Logger.error("String_Node_Str" + fehlt);
        throw new ApplicationException("String_Node_Str" + fehlt.substring(1));
      }
    }
    Konto konto=Utils.getKontoByID(kontoid);
    UmsatzeAusBestandsAenderung umsaetzeAusBestaenden=new UmsatzeAusBestandsAenderung(konto);
    Utils.clearBestand(konto);
    for (    GenericObjectHashMap x : daten) {
      Object kursW=x.getAttribute("String_Node_Str");
      Object wertW=x.getAttribute("String_Node_Str");
      Utils.addBestand(Utils.getORcreateWKN((String)x.getAttribute("String_Node_Str"),(String)x.getAttribute("String_Node_Str"),(String)x.getAttribute("String_Node_Str")),konto,((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),handleCurrency(kursW),((BigDecimal)x.getAttribute("String_Node_Str")).doubleValue(),handleCurrency(wertW),(Date)x.getAttribute("String_Node_Str"),(Date)x.getAttribute("String_Node_Str"));
    }
    umsaetzeAusBestaenden.erzeugeUmsaetze();
  }
 catch (  RemoteException e) {
    throw new ApplicationException(e);
  }
  Application.getMessagingFactory().sendMessage(new StatusBarMessage(Application.getI18n().tr("String_Node_Str"),StatusBarMessage.TYPE_INFO));
}