BerichtDoorsturenUitvoerActionBean.java

  1. /*
  2.  * Copyright (C) 2015 B3Partners B.V.
  3.  */
  4. package nl.b3p.brmo.service.stripes;

  5. import java.io.PrintWriter;
  6. import java.io.StringWriter;
  7. import java.util.Date;
  8. import net.sourceforge.stripes.action.ActionBean;
  9. import net.sourceforge.stripes.action.ActionBeanContext;
  10. import net.sourceforge.stripes.action.After;
  11. import net.sourceforge.stripes.action.Before;
  12. import net.sourceforge.stripes.action.DefaultHandler;
  13. import net.sourceforge.stripes.action.ForwardResolution;
  14. import net.sourceforge.stripes.action.Resolution;
  15. import net.sourceforge.stripes.action.SimpleMessage;
  16. import net.sourceforge.stripes.validation.Validate;
  17. import nl.b3p.brmo.persistence.staging.AutomatischProces;
  18. import nl.b3p.brmo.persistence.staging.BerichtDoorstuurProces;
  19. import nl.b3p.brmo.service.scanner.AbstractExecutableProces;
  20. import nl.b3p.brmo.service.scanner.ProcesExecutable;
  21. import nl.b3p.brmo.service.scanner.ProgressUpdateListener;
  22. import org.stripesstuff.plugin.waitpage.WaitPage;
  23. import org.stripesstuff.stripersist.EntityTypeConverter;
  24. import org.stripesstuff.stripersist.Stripersist;

  25. /**
  26.  * @author Matthijs Laan
  27.  */
  28. public class BerichtDoorsturenUitvoerActionBean implements ActionBean, ProgressUpdateListener {

  29.   private static final String JSP = "/WEB-INF/jsp/beheer/berichtdoorsturenuitvoeren.jsp";

  30.   private ActionBeanContext context;

  31.   @Validate(converter = EntityTypeConverter.class)
  32.   private BerichtDoorstuurProces proces;

  33.   private double progress;

  34.   private long total;

  35.   private long processed;

  36.   private boolean complete;

  37.   private String status;

  38.   private String label;

  39.   private String log = "";

  40.   private Date start;

  41.   private Date update;

  42.   private String exceptionStacktrace;

  43.   @Before
  44.   public void before() {
  45.     start = new Date();
  46.   }

  47.   @After
  48.   public void completed() {
  49.     complete = true;
  50.   }

  51.   @Override
  52.   public void total(long total) {
  53.     this.total = total;
  54.   }

  55.   @Override
  56.   public void progress(long progress) {
  57.     this.processed = progress;
  58.     if (this.total != 0) {
  59.       this.progress = (100.0 / this.total) * this.processed;
  60.     }
  61.     this.update = new Date();
  62.   }

  63.   @Override
  64.   public void exception(Throwable t) {
  65.     StringWriter sw = new StringWriter();
  66.     t.printStackTrace(new PrintWriter(sw));
  67.     this.exceptionStacktrace = sw.toString();
  68.   }

  69.   @Override
  70.   public void updateStatus(String status) {
  71.     this.status = status;
  72.   }

  73.   @Override
  74.   public void addLog(String log) {
  75.     this.log += log + "\n";
  76.   }

  77.   @DefaultHandler
  78.   @WaitPage(path = JSP, delay = 1000, refresh = 1000)
  79.   public Resolution execute() {

  80.     if (proces == null) {
  81.       getContext().getMessages().add(new SimpleMessage("Proces ongeldig!"));
  82.       completed();
  83.       return new ForwardResolution(JSP);
  84.     }
  85.     // opnieuw laden van config omdat de waitpage de entity detached
  86.     proces =
  87.         (BerichtDoorstuurProces)
  88.             Stripersist.getEntityManager().find(AutomatischProces.class, proces.getId());
  89.     ProcesExecutable exeProces = AbstractExecutableProces.getProces(proces);

  90.     try {
  91.       exeProces.execute(this);
  92.       completed();
  93.     } finally {
  94.       if (Stripersist.getEntityManager().getTransaction().isActive()) {
  95.         Stripersist.getEntityManager().getTransaction().rollback();
  96.       }
  97.     }

  98.     return new ForwardResolution(JSP);
  99.   }

  100.   // <editor-fold defaultstate="collapsed" desc="getters en setters">
  101.   @Override
  102.   public ActionBeanContext getContext() {
  103.     return context;
  104.   }

  105.   @Override
  106.   public void setContext(ActionBeanContext context) {
  107.     this.context = context;
  108.   }

  109.   public String getLog() {
  110.     return log;
  111.   }

  112.   public void setLog(String log) {
  113.     this.log = log;
  114.   }

  115.   public long getTotal() {
  116.     return total;
  117.   }

  118.   public void setTotal(long total) {
  119.     this.total = total;
  120.   }

  121.   public long getProcessed() {
  122.     return processed;
  123.   }

  124.   public void setProcessed(long processed) {
  125.     this.processed = processed;
  126.   }

  127.   public boolean isComplete() {
  128.     return complete;
  129.   }

  130.   public void setComplete(boolean complete) {
  131.     this.complete = complete;
  132.   }

  133.   public Date getStart() {
  134.     return start;
  135.   }

  136.   public void setStart(Date start) {
  137.     this.start = start;
  138.   }

  139.   public Date getUpdate() {
  140.     return update;
  141.   }

  142.   public void setUpdate(Date update) {
  143.     this.update = update;
  144.   }

  145.   public double getProgress() {
  146.     return progress;
  147.   }

  148.   public void setProgress(double progress) {
  149.     this.progress = progress;
  150.   }

  151.   public String getExceptionStacktrace() {
  152.     return exceptionStacktrace;
  153.   }

  154.   public void setExceptionStacktrace(String exceptionStacktrace) {
  155.     this.exceptionStacktrace = exceptionStacktrace;
  156.   }

  157.   public BerichtDoorstuurProces getProces() {
  158.     return proces;
  159.   }

  160.   public void setProces(BerichtDoorstuurProces proces) {
  161.     this.proces = proces;
  162.   }

  163.   public String getStatus() {
  164.     return status;
  165.   }

  166.   public void setStatus(String status) {
  167.     this.status = status;
  168.   }

  169.   public String getLabel() {
  170.     return label;
  171.   }

  172.   public void setLabel(String label) {
  173.     this.label = label;
  174.   }
  175.   // </editor-fold>
  176. }