--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressTask.java 2016/01/24 21:48:55 2838 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressTask.java 2016/04/26 17:37:56 3022 @@ -1,10 +1,25 @@ -package dk.daoas.adressevedligehold; +package dk.daoas.adressevedligehold.coveragefileupload; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import dk.daoas.adressevedligehold.MailSender; +import dk.daoas.adressevedligehold.ReloadTask; +import dk.daoas.adressevedligehold.afstandandenrute.AfstandAndenRuteTask; import dk.daoas.adressevedligehold.tasks.Task; +import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.TimingHelper; +/* + * + */ + public class AddressTask extends Task { + private TaskLogger logger = TaskLogger.getInstance(); + + private String distributor; + private String filename; + AddressSource source; boolean writeBack; @@ -12,17 +27,26 @@ this.source = source; this.writeBack = writeBack; + + this.distributor = source.getDistributor(); + this.filename = source.getFilename(); } + + @Override - protected void taskRun() { + protected void taskRun() throws Exception { try { TimingHelper timer = new TimingHelper(); - System.out.println("Reading data from DB"); + + logger.info("Validating Source"); + source.validate(); + + logger.info("Reading data from DB"); AddressManager addrManager = new AddressManager(); - System.out.println("Data is ready"); + logger.info("Data is ready"); EntryUgedage ugedage = new EntryUgedage(); //saml op på hvilke ugedage der er blevet behandlet @@ -31,7 +55,7 @@ AddressSourceEntry entry; while ( (entry = source.getNextEntry()) != null) { - if (super.abort) { + if (isAborted()) { break; } @@ -50,37 +74,58 @@ addrManager.dumpChanged(); } - AddressReport report = new AddressReport(addrManager, entryCount, ugedage, source, timer, writeBack); + AddressReport report = new AddressReport(addrManager, entryCount, ugedage, source, timer, writeBack, addrManager.getDuplicateCount() ); report.sendRapport(); + if (writeBack) { + manager.submitTask( new ReloadTask("Indlaesning/" + source.getDistributor()) ); + + + if (source.calculateDistances()) { + Task tsk = new AfstandAndenRuteTask(source.getDistributor(), AfstandAndenRuteTask.INCREMENTAL); + manager.submitTask( tsk ); + } + } - } catch (Exception e) { - e.printStackTrace(); - } - - - try { - System.out.println("Cleaning up resources"); - source.close(); - } catch (Exception e) { - System.out.println("Error during cleanup: " + e.getMessage() ); + + + } 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(); + source = null; //and release it for garbace collection + } catch (Exception e) { + logger.warning("Error during cleanup: ", e ); + } } + } @Override public String getDescription() { - return "AddressTask " + source.getDistributor(); + return "AddressTask " + distributor; } @Override - public short getPercentCompleted() { - return 0; + public double getPercentCompleted() { + return -1; } @Override public String getDetail() { - return source.getFilename(); + return filename; } }