BerichtTransformatieUitvoeren.java
- /*
- * Copyright (C) 2015 B3Partners B.V.
- */
- package nl.b3p.brmo.service.scanner;
- import static nl.b3p.brmo.persistence.staging.AfgifteNummerScannerProces.MISSINGNUMBERSFOUND;
- import static nl.b3p.brmo.persistence.staging.AutomatischProces.ProcessingStatus.ERROR;
- import static nl.b3p.brmo.persistence.staging.AutomatischProces.ProcessingStatus.PROCESSING;
- import static nl.b3p.brmo.persistence.staging.AutomatischProces.ProcessingStatus.WAITING;
- import java.util.Calendar;
- import java.util.Date;
- import javax.sql.DataSource;
- import nl.b3p.brmo.loader.BrmoFramework;
- import nl.b3p.brmo.loader.util.BrmoException;
- import nl.b3p.brmo.persistence.staging.AutomatischProces;
- import nl.b3p.brmo.persistence.staging.BerichtTransformatieProces;
- import nl.b3p.brmo.service.util.ConfigUtil;
- import org.apache.commons.lang3.exception.ExceptionUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.stripesstuff.stripersist.Stripersist;
- /**
- * Transformatie van berichten in een automatisch proces gebruikmakend van BrmoFramework.
- *
- * @see nl.b3p.brmo.loader.BrmoFramework
- * @author mprins
- */
- public class BerichtTransformatieUitvoeren extends AbstractExecutableProces {
- private static final Log log = LogFactory.getLog(BerichtTransformatieUitvoeren.class);
- private final BerichtTransformatieProces config;
- private ProgressUpdateListener l;
- private boolean transformErrorOccured = false;
- private long blockTransformIndicators;
- private long statusMissingFound;
- public BerichtTransformatieUitvoeren(BerichtTransformatieProces config) {
- this.config = config;
- }
- @Override
- public void execute() throws BrmoException {
- this.execute(
- new ProgressUpdateListener() {
- @Override
- public void total(long total) {}
- @Override
- public void progress(long progress) {}
- @Override
- public void exception(Throwable t) {
- // afvangen van de fout conditie zodat de status van het proces goed kan
- // worden gezet
- transformErrorOccured = true;
- log.error(t);
- }
- @Override
- public void updateStatus(String status) {}
- @Override
- public void addLog(String log) {}
- });
- }
- @Override
- public void execute(ProgressUpdateListener listener) {
- this.l = listener;
- l.updateStatus("Initialiseren...");
- l.addLog(String.format("Initialiseren... %tc", new Date()));
- this.config.setStatus(PROCESSING);
- this.config.setLastrun(new Date());
- Stripersist.getEntityManager().merge(config);
- Stripersist.getEntityManager().flush();
- final StringBuilder sb = new StringBuilder(AutomatischProces.LOG_NEWLINE);
- String oldLog = config.getLogfile();
- if (oldLog != null) {
- if (oldLog.length() > OLD_LOG_LENGTH) {
- sb.append(oldLog.substring(oldLog.length() - OLD_LOG_LENGTH / 10));
- } else {
- sb.append(oldLog);
- }
- }
- String msg =
- String.format(
- "Het bericht transformatie proces met ID %d is gestart op %tc.",
- config.getId(), Calendar.getInstance());
- log.info(msg);
- l.addLog(msg);
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- if (this.config.getBlockOnMissingNumbers()
- && (this.shouldBlockTransformationByChecks() && this.shouldBlockTransformationByStatus())) {
- msg = "Er zijn " + blockTransformIndicators + " indicaties voor ontbrekende afgiftenummers";
- log.warn(msg);
- l.addLog(msg);
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- msg = "Er zijn " + statusMissingFound + " laadprocessen met status STAGING_MISSING";
- log.warn(msg);
- l.addLog(msg);
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- msg = "De automatische transformatie wordt niet gestart";
- l.addLog(msg);
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- this.config.setSamenvatting(msg);
- this.config.setLogfile(sb.toString());
- this.config.setStatus(WAITING);
- } else {
- BrmoFramework brmo = null;
- try {
- DataSource dataSourceStaging = ConfigUtil.getDataSourceStaging();
- DataSource dataSourceRsgb = ConfigUtil.getDataSourceRsgb();
- DataSource dataSourceRsgbBrk = ConfigUtil.getDataSourceRsgbBrk();
- brmo = new BrmoFramework(dataSourceStaging, dataSourceRsgb, dataSourceRsgbBrk);
- brmo.setEnablePipeline(true);
- brmo.setOrderBerichten(true);
- brmo.setTransformPipelineCapacity(100);
- Thread t =
- brmo.toRsgb(
- new nl.b3p.brmo.loader.ProgressUpdateListener() {
- @Override
- public void total(long total) {
- sb.append("Totaal te transformeren: ")
- .append(total)
- .append(AutomatischProces.LOG_NEWLINE);
- l.total(total);
- }
- @Override
- public void progress(long progress) {
- l.progress(progress);
- }
- @Override
- public void exception(Throwable t) {
- sb.append("Fout tijdens transformeren: ")
- .append(t.getLocalizedMessage())
- .append(AutomatischProces.LOG_NEWLINE);
- l.exception(t);
- }
- });
- t.join();
- if (transformErrorOccured) {
- this.config.setStatus(ERROR);
- msg = "Handmatige transformatie vanuit de berichten pagina is noodzakelijk.";
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- log.warn(msg);
- msg =
- String.format(
- "Bericht transformatie proces met ID %d is niet succesvol afgerond op %tc.",
- config.getId(), Calendar.getInstance());
- log.error(msg);
- } else {
- this.config.setStatus(WAITING);
- msg =
- String.format(
- "Bericht transformatie proces met ID %d is succesvol afgerond op %tc.",
- config.getId(), Calendar.getInstance());
- log.info(msg);
- }
- sb.append(msg).append(AutomatischProces.LOG_NEWLINE);
- l.addLog(msg);
- this.config.setSamenvatting(msg);
- this.config.setLogfile(sb.toString());
- } catch (BrmoException | InterruptedException t) {
- log.error("Fout bij transformeren berichten naar RSGB", t);
- String m = "Fout bij transformeren berichten naar RSGB: " + ExceptionUtils.getMessage(t);
- if (t.getCause() != null) {
- m += ", oorzaak: " + ExceptionUtils.getRootCauseMessage(t);
- }
- this.config.setLogfile(sb.toString());
- this.config.updateSamenvattingEnLogfile(m);
- this.config.setStatus(ERROR);
- } finally {
- if (brmo != null) {
- brmo.closeBrmoFramework();
- }
- }
- }
- Stripersist.getEntityManager().merge(this.config);
- Stripersist.getEntityManager().flush();
- }
- private boolean shouldBlockTransformationByChecks() {
- final String sql =
- "select count(config_key) from automatisch_proces_config where config_key='"
- + MISSINGNUMBERSFOUND
- + "' and value = 'true' ";
- Object o = Stripersist.getEntityManager().createNativeQuery(sql).getSingleResult();
- blockTransformIndicators = ((Number) o).longValue();
- return blockTransformIndicators > 0;
- }
- private boolean shouldBlockTransformationByStatus() {
- final String sql = "select count(status) from laadproces where status = 'STAGING_MISSING'";
- Object o = Stripersist.getEntityManager().createNativeQuery(sql).getSingleResult();
- statusMissingFound = ((Number) o).longValue();
- return statusMissingFound > 0;
- }
- }