diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/ReportParameterEnum.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/ReportParameterEnum.java index 3ca1491..dfc51b6 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/ReportParameterEnum.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/enumerated/ReportParameterEnum.java @@ -3,7 +3,7 @@ package br.com.centralit.esi.api.enumerated; public enum ReportParameterEnum { DATAOBJECT("ESI.ENUMERADO.DATASOURCE_OBJETO_DADOS"), FLOW("ESI.ENUMERADO.DATASOURCE_FLUXO_ESI"), - VARIABLE("ESI.ENUMERADO.DATASOURCE_VARIAVEL"), + EXPRESSION("ESI.ENUMERADO.DATASOURCE_EXPRESSAO"), IMAGE("ESI.ENUMERADO.DATASOURCE_IMAGEM"); private String id; diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/model/ReportExpression.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/model/ReportExpression.java index afb0182..14fb4e8 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/model/ReportExpression.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/model/ReportExpression.java @@ -11,6 +11,7 @@ import javax.persistence.Lob; import org.hibernate.annotations.Type; import br.com.centralit.esi.api.design.model.ScriptCode; +import br.com.centralit.esi.api.design.model.Variable; import br.com.centralit.esi.api.enumerated.ExpressionTypeEnum; import br.com.centralit.framework.json.Views; @@ -24,17 +25,21 @@ public class ReportExpression implements Serializable { */ private static final long serialVersionUID = 1795388490044351994L; - @JsonView({Views.GenericView.class }) + @JsonView({ Views.EsiResourceEditView.class, Views.EsiPackageExportView.class}) private ExpressionTypeEnum expressionType; + + @Embedded + @JsonView({ Views.EsiResourceEditView.class, Views.EsiPackageExportView.class}) + private Variable variable; - @JsonView({ Views.GenericView.class}) + @JsonView({ Views.EsiResourceEditView.class, Views.EsiPackageExportView.class}) @Lob @Basic(fetch = FetchType.LAZY) @Type(type="org.hibernate.type.StringClobType") private String constantValue; @Embedded - @JsonView({ Views.GenericView.class}) + @JsonView({ Views.EsiResourceEditView.class, Views.EsiPackageExportView.class}) private ScriptCode scriptCode; /** @@ -86,4 +91,12 @@ public class ReportExpression implements Serializable { return serialVersionUID; } + public Variable getVariable() { + return variable; + } + + public void setVariable(Variable variable) { + this.variable = variable; + } + } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/ReportManager.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/ReportManager.java index 63cc658..32a53b4 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/ReportManager.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/ReportManager.java @@ -7,6 +7,6 @@ import br.com.centralit.esi.api.resource.model.ReportVersion; public interface ReportManager extends Serializable { - public byte[] execute(ReportVersion reportVersion, HashMap parameters); + public byte[] execute(ReportVersion reportVersion, HashMap inputMap); } diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/JasperReportManagerImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/JasperReportManagerImpl.java index cbda755..8934e69 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/JasperReportManagerImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/JasperReportManagerImpl.java @@ -10,13 +10,19 @@ import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.data.JRBeanArrayDataSource; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import org.springframework.stereotype.Component; +import br.com.centralit.esi.api.enumerated.ExpressionTypeEnum; +import br.com.centralit.esi.api.execution.component.ExecuteScript; import br.com.centralit.esi.api.resource.model.ReportDataSource; +import br.com.centralit.esi.api.resource.model.ReportExpression; import br.com.centralit.esi.api.resource.model.ReportVersion; import br.com.centralit.esi.api.resource.service.JasperReportManager; +import br.com.centralit.esi.api.runtime.RuntimeEnvironment; +import br.com.centralit.esi.api.runtime.RuntimeEnvironmentImpl; import br.com.centralit.esi.api.runtime.RuntimeEnvironmentOutput; import br.com.centralit.esi.api.util.ConvertUtilsESI; import br.com.centralit.esi.exception.EsiExecutionException; @@ -30,7 +36,7 @@ public class JasperReportManagerImpl extends ReportManagerImpl implements Jasper private static final long serialVersionUID = 1L; @Override - public byte[] execute(ReportVersion report, HashMap parameters) { + public byte[] execute(ReportVersion report, HashMap inputMap) { JasperPrint print = null; byte[] buffer = null; @@ -39,7 +45,7 @@ public class JasperReportManagerImpl extends ReportManagerImpl implements Jasper Connection connection = dataSourceService.connect(report.getDataSource().getConnection()); try { - print = JasperFillManager.fillReport(report.getFileName(), this.buildParams(report, parameters), connection); + print = JasperFillManager.fillReport(report.getFileName(), this.buildParams(report, inputMap), connection); } catch (JRException e) { e.printStackTrace(); try { @@ -53,7 +59,7 @@ public class JasperReportManagerImpl extends ReportManagerImpl implements Jasper default: try { - print = JasperFillManager.fillReport(report.getFileName(), this.buildParams(report, parameters), this.buildDataSource(report.getDataSource(), parameters)); + print = JasperFillManager.fillReport(report.getFileName(), this.buildParams(report, inputMap), this.buildDataSource(report.getDataSource(), inputMap)); } catch (JRException e) { throw new EsiExecutionException(e); } @@ -74,27 +80,35 @@ public class JasperReportManagerImpl extends ReportManagerImpl implements Jasper } @Override - protected JRDataSource buildDataSource(ReportDataSource reportDataSource, HashMap parameters) { + protected JRDataSource buildDataSource(ReportDataSource reportDataSource, HashMap inputMap) { JRDataSource dataSource = null; - List> result = null; switch (reportDataSource.getType()) { case DATAOBJECT: String SQLName = reportDataSource.getCustomSQL() != null ? reportDataSource.getCustomSQL().getName() : null; - result = dataManager.executeQuery(reportDataSource.getDataObject(), SQLName, parameters); - dataSource = new JRBeanCollectionDataSource(result); + List> resultSet = dataManager.executeQuery(reportDataSource.getDataObject(), SQLName, inputMap); + dataSource = new JRBeanCollectionDataSource(resultSet); break; case FLOW: - RuntimeEnvironmentOutput output = runtimeManager.execute(reportDataSource.getFlow().getName(), parameters); + RuntimeEnvironmentOutput output = runtimeManager.execute(reportDataSource.getFlow().getName(), inputMap); if (output.getOutputVariables() != null) { - result = new ArrayList>(); - result.add(ConvertUtilsESI.environmentVariablesToMap(output.getOutputVariables())); - dataSource = new JRBeanCollectionDataSource(result); + List> variablesMap = new ArrayList>(); + variablesMap.add(ConvertUtilsESI.environmentVariablesToMap(output.getOutputVariables())); + dataSource = new JRBeanCollectionDataSource(variablesMap); } break; case EXPRESSION: + ReportExpression expression = reportDataSource.getExpression(); + if (expression.getExpressionType().equals(ExpressionTypeEnum.CONSTANT) && expression.getConstantValue() != null) { + Object object = ConvertUtilsESI.convertVariable(expression.getVariable().getVariableType(), false, expression.getVariable().getClassName(), expression.getConstantValue()); + dataSource = new JRBeanArrayDataSource(new Object[]{object}); + }else if (expression.getExpressionType().equals(ExpressionTypeEnum.SCRIPT) && expression.getScriptCode() != null) { + RuntimeEnvironment runtimeEnvironment = new RuntimeEnvironmentImpl(null, inputMap); + Object object = ExecuteScript.execute(runtimeEnvironment, expression.getVariable().getName(), expression.getScriptCode()); + dataSource = new JRBeanArrayDataSource(new Object[]{object}); + } break; default: diff --git a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/ReportManagerImpl.java b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/ReportManagerImpl.java index 4326ca5..5c49007 100644 --- a/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/ReportManagerImpl.java +++ b/cit-esi-api/src/main/java/br/com/centralit/esi/api/resource/service/impl/ReportManagerImpl.java @@ -1,6 +1,7 @@ package br.com.centralit.esi.api.resource.service.impl; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; @@ -8,10 +9,18 @@ import org.springframework.stereotype.Component; import br.com.centralit.esi.api.data.service.DataSourceService; import br.com.centralit.esi.api.data.service.impl.DataManager; +import br.com.centralit.esi.api.enumerated.ExpressionTypeEnum; +import br.com.centralit.esi.api.execution.component.ExecuteScript; import br.com.centralit.esi.api.resource.model.ReportDataSource; +import br.com.centralit.esi.api.resource.model.ReportExpression; +import br.com.centralit.esi.api.resource.model.ReportParameter; import br.com.centralit.esi.api.resource.model.ReportVersion; import br.com.centralit.esi.api.resource.service.ReportManager; +import br.com.centralit.esi.api.runtime.RuntimeEnvironment; +import br.com.centralit.esi.api.runtime.RuntimeEnvironmentImpl; +import br.com.centralit.esi.api.runtime.RuntimeEnvironmentOutput; import br.com.centralit.esi.api.runtime.service.RuntimeManager; +import br.com.centralit.esi.api.util.ConvertUtilsESI; @Component("reportManager") public abstract class ReportManagerImpl implements ReportManager { @@ -30,11 +39,68 @@ public abstract class ReportManagerImpl implements ReportManager { @Autowired protected RuntimeManager runtimeManager; - protected abstract Object buildDataSource(ReportDataSource reportDataSource, HashMap parameters); + protected abstract Object buildDataSource(ReportDataSource reportDataSource, HashMap inputMap); - protected Map buildParams(ReportVersion report, HashMap parameters) { - // TODO Auto-generated method stub - return null; + protected Map buildParams(ReportVersion report, HashMap inputMap) { + HashMap outputMap = new HashMap(); + + if (report.getParameters() != null) { + for (ReportParameter parameter : report.getParameters()) { + this.buildParam(parameter, inputMap, outputMap); + } + } + + return outputMap; + } + + protected void buildParam(ReportParameter parameter, HashMap inputMap, HashMap outputMap) { + switch (parameter.getType()) { + case DATAOBJECT: + String SQLName = parameter.getCustomSQL() != null ? parameter.getCustomSQL().getName() : null; + List> resultSet = dataManager.executeQuery(parameter.getDataObject(), SQLName, inputMap); + if (resultSet != null) { + for (HashMap map : resultSet) { + Object value = map.get(parameter.getOutputAttributeName()); + if (value != null) { + outputMap.put(parameter.getOutputAttributeName(), value); + break; + } + } + } + break; + + case FLOW: + RuntimeEnvironmentOutput output = runtimeManager.execute(parameter.getFlow().getName(), inputMap); + if (output.getOutputVariables() != null) { + Object value = output.getValue(parameter.getOutputAttributeName()); + if (value != null) { + outputMap.put(parameter.getOutputAttributeName(), value); + } + } + break; + + case EXPRESSION: + ReportExpression expression = parameter.getExpression(); + if (expression.getExpressionType().equals(ExpressionTypeEnum.CONSTANT) && expression.getConstantValue() != null) { + Object value = ConvertUtilsESI.convertVariable(expression.getVariable().getVariableType(), false, expression.getVariable().getClassName(), expression.getConstantValue()); + if (value != null) { + outputMap.put(expression.getVariable().getName(), value); + } + }else if (expression.getExpressionType().equals(ExpressionTypeEnum.SCRIPT) && expression.getScriptCode() != null) { + RuntimeEnvironment runtimeEnvironment = new RuntimeEnvironmentImpl(null, inputMap); + Object value = ExecuteScript.execute(runtimeEnvironment, expression.getVariable().getName(), expression.getScriptCode()); + if (value != null) { + outputMap.put(expression.getVariable().getName(), value); + } + } + break; + + case IMAGE: + break; + + default: + break; + } } } \ No newline at end of file -- libgit2 0.21.2