--- 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/fileupload/AddressTask.java 2016/04/20 14:15:02 3013
@@ -1,10 +1,25 @@
-package dk.daoas.adressevedligehold;
+package dk.daoas.adressevedligehold.fileupload;
+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;
}
}