use of com.haulmont.yarg.exception.ReportingInterruptedException in project jmix by jmix-framework.
the class ReportRunnerImpl method createReportDocumentInternal.
protected ReportOutputDocument createReportDocumentInternal(ReportRunContext context) {
Report report = context.getReport();
ReportTemplate template = context.getReportTemplate();
ReportOutputType outputType = context.getOutputType();
Map<String, Object> params = context.getParams();
String outputNamePattern = context.getOutputNamePattern();
StopWatch stopWatch = null;
MDC.put("user", SecurityContextHolder.getContext().getAuthentication().getName());
// executions.startExecution(report.getId().toString(), "Reporting");
try {
// TODO Slf4JStopWatch
// stopWatch = new Slf4JStopWatch("Reporting#" + report.getName());
Map<String, Object> resultParams = new HashMap<>(params);
params.entrySet().stream().filter(param -> param.getValue() instanceof ParameterPrototype).forEach(param -> {
ParameterPrototype prototype = (ParameterPrototype) param.getValue();
List data = prototypesLoader.loadData(prototype);
resultParams.put(param.getKey(), data);
});
if (template.isCustom()) {
CustomFormatter customFormatter = applicationContext.getBean(CustomFormatter.class, report, template);
template.setCustomReport(customFormatter);
}
com.haulmont.yarg.structure.ReportOutputType resultOutputType = (outputType != null) ? outputType.getOutputType() : template.getOutputType();
return reportingAPI.runReport(new RunParams(report).template(template).params(resultParams).output(resultOutputType).outputNamePattern(outputNamePattern));
} catch (NoFreePortsException nfe) {
throw new NoOpenOfficeFreePortsException(nfe.getMessage());
} catch (OpenOfficeException ooe) {
throw new FailedToConnectToOpenOfficeException(ooe.getMessage());
} catch (com.haulmont.yarg.exception.UnsupportedFormatException fe) {
throw new UnsupportedFormatException(fe.getMessage());
} catch (com.haulmont.yarg.exception.ValidationException ve) {
throw new ValidationException(ve.getMessage());
} catch (ReportingInterruptedException ie) {
throw new ReportCanceledException(String.format("Report is canceled. %s", ie.getMessage()));
} catch (com.haulmont.yarg.exception.ReportingException re) {
// todo https://github.com/Haulmont/jmix-reports/issues/22
// Throwable rootCause = ExceptionUtils.getRootCause(re);
// if (rootCause instanceof ResourceCanceledException) {
// throw new ReportCanceledException(String.format("Report is canceled. %s", rootCause.getMessage()));
// }
// noinspection unchecked
List<Throwable> list = ExceptionUtils.getThrowableList(re);
StringBuilder sb = new StringBuilder();
for (Iterator<Throwable> it = list.iterator(); it.hasNext(); ) {
// noinspection ThrowableResultOfMethodCallIgnored
sb.append(it.next().getMessage());
if (it.hasNext())
sb.append("\n");
}
throw new ReportingException(sb.toString());
} finally {
// todo https://github.com/Haulmont/jmix-reports/issues/22
// executions.endExecution();
MDC.remove("user");
MDC.remove("webContextName");
if (stopWatch != null) {
stopWatch.stop();
}
}
}
use of com.haulmont.yarg.exception.ReportingInterruptedException in project jmix by jmix-framework.
the class JmixOfficeIntegration method runTaskWithTimeout.
@Override
public void runTaskWithTimeout(final OfficeTask officeTask, int timeoutInSeconds) throws NoFreePortsException {
final SecurityContext securityContext = SecurityContextHolder.getContext();
final OfficeConnection connection = acquireConnection();
Future future = null;
try {
Callable<Void> task = () -> {
SecurityContextHolder.setContext(securityContext);
connection.open();
officeTask.processTaskInOpenOffice(connection.getOOResourceProvider());
SecurityContextHolder.clearContext();
return null;
};
future = executor.submit(task);
future.get(timeoutInSeconds, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
throw new ReportingInterruptedException("LibreOffice task interrupted");
} catch (ExecutionException ex) {
connection.close();
if (ex.getCause() instanceof BootstrapException) {
throw new OpenOfficeException("Failed to connect to LibreOffice. Please check LibreOffice path " + openOfficePath, ex);
}
if (ex.getCause() instanceof OpenOfficeException) {
throw (OpenOfficeException) ex.getCause();
}
throw new RuntimeException(ex.getCause());
} catch (OpenOfficeException ex) {
connection.close();
throw ex;
} catch (TimeoutException tex) {
try {
if (Thread.interrupted()) {
throw new ReportingInterruptedException("LibreOffice task interrupted");
}
} finally {
connection.close();
}
if (tex.getCause() instanceof BootstrapException) {
throw new OpenOfficeException("Failed to connect to LibreOffice. Please check LibreOffice path " + openOfficePath, tex);
}
throw new OpenOfficeException(tex);
} catch (Throwable ex) {
connection.close();
if (ex.getCause() instanceof BootstrapException) {
throw new OpenOfficeException("Failed to connect to LibreOffice. Please check LibreOffice path " + openOfficePath, ex);
}
throw new OpenOfficeException(ex);
} finally {
if (future != null) {
future.cancel(true);
}
releaseConnection(connection);
}
}
Aggregations