[Demonstration 1]

[Buggy Method]
public void reCreateDB(boolean useDataBak) throws IOException, Exception {
    File dataDir = new File(Settings.getInstance().getDataDir());
    if (dataDir.exists()) {
        // delete data folder
        java.nio.file.Files.walkFileTree(dataDir.toPath(), new SimpleFileVisitorForRecursiveFolderDeletion());
        File dataBak = getDataBakDir(dataDir);
        if (useDataBak && dataBak.exists() && Settings.getInstance().isCheckpointingEnabled()) {
            FileUtils.copyDirectory(dataBak, dataDir);
            System.out.println(Lang.getInstance().translate("restoring backup database"));
            try {
                DBSet.reCreateDatabase();
            } catch (IOError e) {
                e.printStackTrace();
                //backupdb is buggy too starting from scratch
                if (dataDir.exists()) {
                    java.nio.file.Files.walkFileTree(dataDir.toPath(), new SimpleFileVisitorForRecursiveFolderDeletion());
                }
                if (dataBak.exists()) {
                    java.nio.file.Files.walkFileTree(dataDir.toPath(), new SimpleFileVisitorForRecursiveFolderDeletion());
                }
                DBSet.reCreateDatabase();
            }
        } else {
            DBSet.reCreateDatabase();
        }
    }
    if (DBSet.getInstance().getBlockMap().isProcessing()) {
        throw new Exception(Lang.getInstance().translate("The application was not closed correctly! Delete the folder ") + dataDir.getAbsolutePath() + Lang.getInstance().translate(" and start the application again."));
    }
}

[Buggy Hunk]
java.nio.file.Files.walkFileTree(dataDir.toPath(),

[Patch]
java.nio.file.Files.walkFileTree(dataBak.toPath(),

[Demonstration 2]

[Buggy Method]
@Override
public List<Transaction> getTransactionsByStatusId(Integer batchId, List<Integer> statusIds, Integer howMany) throws Exception {
    List<Transaction> transactions = setTransactionInInfoByStatusId(batchId, statusIds, howMany);
    String sendingOrgName = "";
    String sendingSiteName = "";
    Integer parentOrgId = 0;
    for (Transaction transaction : transactions) {
        if (transaction.getSourceSubOrgId() > 0) {
            parentOrgId = organizationmanager.getOrganizationById(transaction.getSourceSubOrgId()).getParentId();
            sendingOrgName = organizationmanager.getOrganizationById(parentOrgId).getOrgName();
            sendingSiteName = organizationmanager.getOrganizationById(transaction.getSourceSubOrgId()).getOrgName();
        } else {
            sendingOrgName = organizationmanager.getOrganizationById(transaction.getSourceSubOrgId()).getOrgName();
        }
        transaction.setSrcOrgName(sendingOrgName);
        transaction.setSrcSiteName(sendingSiteName);
        transaction.setParentOrgId(parentOrgId);
        Transaction transactionOut = setTransactionTargetInfoByStatusId(transaction);
        if (transactionOut != null) {
            transaction.setTargetOrgName(organizationmanager.getOrganizationById(transactionOut.gettargetOrgId()).getOrgName());
            transaction.setTargetConfigId1(transactionOut.getTargetConfigId1());
            transaction.setTargetConfigName(transactionOut.getTargetConfigName());
            transaction.settransactionTargetId(transactionOut.gettransactionTargetId());
            transaction.settargetOrgId(transactionOut.gettargetOrgId());
        }
    }
    return transactions;
}

[Buggy Hunk]
sendingOrgName =  organizationmanager.getOrganizationById(transaction.getSourceSubOrgId()).getOrgName();

[Patch]
sendingOrgName =  organizationmanager.getOrganizationById(transaction.getOrgId()).getOrgName();

[Demonstration 3]

[Buggy Method]
@Override
public void onChanged(Change<? extends ProductTransaction> c) {
    while (c.next()) {
        if (c.wasAdded() || c.wasRemoved()) {
            showPaymentDetails(transaction, customer);
        }
    }
}

[Buggy Hunk]
showPaymentDetails(transaction, customer);

[Patch]
showPaymentDetails(productTransactionObservableList, customer);