
fr.ird.observe.dto.report.ReportRequestExecutor Maven / Gradle / Ivy
package fr.ird.observe.dto.report;
/*-
* #%L
* ObServe Toolkit :: Dto
* %%
* Copyright (C) 2017 - 2021 Ultreia.io
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* .
* #L%
*/
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* To execute a request.
*
* Created on 21/09/2021.
*
* @author Tony Chemit - [email protected]
* @since 5.0.44
*/
public interface ReportRequestExecutor {
Logger log = LogManager.getLogger(ReportRequestExecutor.class);
Report populateVariables(Report report, Set tripIds);
DataMatrix executeReport(Report report, Set tripId);
List executeRequest(String request, Map params);
void populateVariable(ReportVariable variable, Map vars);
default DataMatrix executeReportRequest(ReportRequest request, Report report, Set dataId, ReportVariable> repeatValues) {
Map params = ReportRequest.extractParams(report, dataId);
if (repeatValues == null) {
return executeReportRequest(request, params);
}
DataMatrix result = new DataMatrix();
for (Object repeatValue : repeatValues.getValues()) {
params.put(request.getRepeat().getVariableName(), repeatValue);
DataMatrix tmp = executeReportRequest(request, params);
switch (request.getRepeat().getLayout()) {
case row:
// on ajoute le résultat a droite de celui deja present
tmp.setX(result.getX() + result.getWidth());
tmp.setY(result.getY());
break;
case column:
// on ajoute le résultat en dessous de celui deja present
tmp.setX(result.getX());
tmp.setY(result.getY() + result.getHeight());
break;
}
result = DataMatrix.merge(result, tmp);
}
result.setX(request.getX());
result.setY(request.getY());
log.debug(String.format("Result location : %s", result.getLocation()));
log.debug(String.format("Result data :\n%s", result.getClipboardContent(true, true, false, '\t')));
return result;
}
default DataMatrix executeReportRequest(ReportRequest reportRequest, Map params) {
// création des paramètres : couples (key, value)
log.debug(String.format("Request : %s", reportRequest.getRequest()));
log.debug(String.format("Available params : %s", params.keySet()));
log.debug(String.format("Params to use : %s", params));
// lancement de la requête
List> list = executeRequest(reportRequest.getRequest(), params);
log.debug(String.format("Result size : %d", list.size()));
// determination des dimensions du résultat
DataMatrixDimension dimension = computeDimension(reportRequest, list);
log.debug(String.format("Result dimension : %s", dimension));
// construction du résultat
DataMatrix result = computeResult(reportRequest, dimension, list);
log.debug(String.format("Result location : %s", result.getLocation()));
log.debug(String.format("Result data :\n%s", result.getClipboardContent(true, true, false, '\t')));
return result;
}
@SuppressWarnings("unchecked")
default void doPopulateRepeatVariables(Report report, Set tripId) {
Map vars = ReportRequest.extractParams(report, tripId);
for (@SuppressWarnings("rawtypes") ReportVariable variable : report.getRepeatVariables()) {
String hql = variable.getRequest();
List