package dk.daoas.adressevedligehold.fileupload;
import org.apache.commons.lang3.exception.ExceptionUtils;
import dk.daoas.adressevedligehold.MailSender;
import dk.daoas.adressevedligehold.ReloadHelper;
import dk.daoas.adressevedligehold.tasks.Task;
import dk.daoas.adressevedligehold.tasks.TaskLogger;
import dk.daoas.adressevedligehold.util.TimingHelper;
/*
* TODO: trigger afstand-anden-rute beregning
*
*/
public class AddressTask extends Task {
private TaskLogger logger = TaskLogger.getInstance();
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();
logger.info("Validating Source");
source.validate();
logger.info("Reading data from DB");
AddressManager addrManager = new AddressManager();
logger.info("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, addrManager.getDuplicateCount() );
report.sendRapport();
if (writeBack) {
ReloadHelper.triggerReload( "Indlaesning/" + source.getDistributor() );
}
} catch(Exception e) {
String subject = "Error loading data for " + source.getDistributor();
String body = "File: " + source.getFilename();
body += "
";
body += "Exception:
";
body += ExceptionUtils.getStackTrace(e);
MailSender.sendMail(subject, body);
throw e; //rethrow exception
} finally {
try {
logger.info("Cleaning up resources");
source.close();
} catch (Exception e) {
logger.warning("Error during cleanup: ", e );
}
}
}
@Override
public String getDescription() {
return "AddressTask " + source.getDistributor();
}
@Override
public double getPercentCompleted() {
return -1;
}
@Override
public String getDetail() {
return source.getFilename();
}
}