@Override
public List<Map<String, Object>> loadData(ReportQuery reportQuery, BandData parentBand, Map<String, Object> params) {
String storeName = StoreUtils.getStoreName(reportQuery);
String query = reportQuery.getScript();
if (StringUtils.isBlank(query)) {
return Collections.emptyList();
}
try (Transaction tx = persistence.createTransaction(storeName)) {
if (Boolean.TRUE.equals(reportQuery.getProcessTemplate())) {
query = processQueryTemplate(query, parentBand, params);
}
List<OutputValue> outputParameters = parseQueryOutputParametersNames(query);
query = query.replaceAll("(?i)" + ALIAS_PATTERN + ",", ",");
query = query.replaceAll("(?i)" + ALIAS_PATTERN, " ");
Query select = insertParameters(trimQuery(query), storeName, parentBand, params);
List queryResult = select.getResultList();
tx.commit();
if (queryResult.size() > 0 && queryResult.get(0) instanceof Entity) {
List<Map<String, Object>> wrappedResults = new ArrayList<>();
for (Object theResult : queryResult) {
wrappedResults.add(new EntityMap((Entity) theResult));
}
return wrappedResults;
} else {
return fillOutputData(queryResult, outputParameters);
}
} catch (Throwable e) {
throw new DataLoadingException(String.format("An error occurred while loading data for data set [%s]", reportQuery.getName()), e);
}
}