package fr.openwide.core.jpa.more.business.task.model; import java.io.Serializable; import java.util.List; import org.bindgen.Bindable; import com.google.common.base.Throwables; import fr.openwide.core.commons.util.report.BatchReportItem; import fr.openwide.core.jpa.more.business.task.util.TaskResult; @Bindable public class TaskExecutionResult implements Serializable { private static final long serialVersionUID = 3669496606035758060L; /** * Indique que la tâche s'est déroulée jusqu'au bout, sans rapport d'exécution. */ public static final TaskExecutionResult completed() { return completed((BatchReportBean) null); } /** * Indique que la tâche s'est déroulée jusqu'au bout. * @param report peut contenir des alertes ou erreurs */ public static final TaskExecutionResult completed(BatchReportBean report) { return new TaskExecutionResult(report, null); } /** * Indique que la tâche a rencontrée une erreur et ne s'est pas déroulée jusqu'au bout. * La transaction subira un rollback. * @param throwable l'exception, dont la stacktrace est stockée */ public static final TaskExecutionResult failed(Throwable throwable) { return failed(null, throwable); } /** * Indique que la tâche a rencontrée une erreur et ne s'est pas déroulée jusqu'au bout. * Le rapport peut donner des informations sur l'execution de la tâche avant l'erreur rencontrée. * La transaction subira un rollback. * @param report peut contenir des alertes ou erreurs * @param throwable l'exception, dont la stacktrace est stockée */ public static final TaskExecutionResult failed(BatchReportBean report, Throwable throwable) { TaskExecutionResult executionResult = new TaskExecutionResult(report, throwable); executionResult.setResult(TaskResult.FATAL); return executionResult; } /** * Pas de result tant que la tâche n'a pas été exécutée. * Calculé automatiquement en fonction du rapport, faire attention si on le définit à la main. */ private TaskResult result; private BatchReportBean report; private Throwable throwable; protected TaskExecutionResult() { } private TaskExecutionResult(BatchReportBean report, Throwable throwable) { this.report = report; this.throwable = throwable; computeResult(); } private void computeResult() { setResult(TaskResult.SUCCESS); if (report != null) { for (List<BatchReportItem> contextItems : report.getItems().values()) { for (BatchReportItem item : contextItems) { switch (item.getSeverity()) { case TRACE: case DEBUG: case INFO: break; case WARN: setResult(TaskResult.WARN); break; case ERROR: setResult(TaskResult.ERROR); return; } } } } } public TaskResult getResult() { return result; } public void setResult(TaskResult result) { if (this.result == null) { this.result = result; } else if (result != null && result.ordinal() > this.result.ordinal()) { this.result = result; } } public BatchReportBean getReport() { return report; } public void setReport(BatchReportBean report) { this.report = report; computeResult(); } public Throwable getThrowable() { return throwable; } public void setThrowable(Throwable throwable) { this.throwable = throwable; } public String getStackTrace() { if (throwable == null) { return null; } return Throwables.getStackTraceAsString(throwable); } }