package dk.daoas.adressevedligehold; import org.apache.commons.lang3.exception.ExceptionUtils; import dk.daoas.adressevedligehold.tasks.Task; import dk.daoas.adressevedligehold.util.TimingHelper; /* * TODO: trigger indlæsning * */ public class AddressTask extends Task { AddressSource source; boolean writeBack; public AddressTask(AddressSource source, boolean writeBack) { this.source = source; this.writeBack = writeBack; } @Override protected void taskRun() throws Exception { try { TimingHelper timer = new TimingHelper(); System.out.println("Validating Source"); source.validate(); System.out.println("Reading data from DB"); AddressManager addrManager = new AddressManager(); System.out.println("Data is ready"); EntryUgedage ugedage = new EntryUgedage(); //saml op på hvilke ugedage der er blevet behandlet int entryCount = 0; AddressSourceEntry entry; while ( (entry = source.getNextEntry()) != null) { if (super.abort) { break; } addrManager.visit(entry); ugedage.merge(entry.ugedage); entryCount++; } addrManager.closeUnvisitedAddresses( source.getDistributor(), ugedage ); if (writeBack) { addrManager.writeBackChanges(); } else { addrManager.dumpChanged(); } AddressReport report = new AddressReport(addrManager, entryCount, ugedage, source, timer, writeBack); report.sendRapport(); } catch(Exception e) { String subject = "Error loading data for " + source.getDistributor(); String body = "File: " + source.getFilename(); body += "

"; body += "Exception:
"; body += ExceptionUtils.getStackTrace(e); AddressReport.sendMail(subject, body); throw e; //rethrow exception } finally { try { System.out.println("Cleaning up resources"); source.close(); } catch (Exception e) { System.out.println("Error during cleanup: " + e.getMessage() ); } } } @Override public String getDescription() { return "AddressTask " + source.getDistributor(); } @Override public double getPercentCompleted() { return -1; } @Override public String getDetail() { return source.getFilename(); } }