removed Pentaho from validation and template

This commit is contained in:
pramod
2016-02-01 16:19:46 +05:30
parent 5903a851f4
commit c9afea91fe
7 changed files with 41 additions and 21 deletions
@@ -54,8 +54,8 @@ import org.springframework.stereotype.Component;
@Scope("singleton") @Scope("singleton")
public class ReportsApiResource { public class ReportsApiResource {
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "reportName", "reportType", private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "reportName", "reportType", "reportSubType",
"reportSubType", "reportCategory", "description", "reportSql", "coreReport", "useReport", "reportParameters")); "reportCategory", "description", "reportSql", "coreReport", "useReport", "reportParameters"));
private final String resourceNameForPermissions = "REPORT"; private final String resourceNameForPermissions = "REPORT";
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
@@ -102,7 +102,7 @@ public class ReportsApiResource {
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (settings.isTemplate()) { if (settings.isTemplate()) {
result.appendedTemplate(this.readReportingService.getAllowedParameters()); result.appendedTemplate(this.readReportingService.getAllowedParameters(), this.readReportingService.getAllowedReportTypes());
} }
return this.toApiJsonSerializer.serialize(settings, result, this.RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, result, this.RESPONSE_DATA_PARAMETERS);
} }
@@ -116,7 +116,7 @@ public class ReportsApiResource {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions);
final ReportData result = new ReportData(); final ReportData result = new ReportData();
result.appendedTemplate(this.readReportingService.getAllowedParameters()); result.appendedTemplate(this.readReportingService.getAllowedParameters(), this.readReportingService.getAllowedReportTypes());
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, result, this.RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, result, this.RESPONSE_DATA_PARAMETERS);
@@ -86,12 +86,10 @@ final public class ReportData {
this.allowedParameters = null; this.allowedParameters = null;
} }
public void appendedTemplate(final Collection<ReportParameterData> allowedParameters) { public void appendedTemplate(final Collection<ReportParameterData> allowedParameters, final Collection<String> allowedReportTypes) {
final List<String> reportTypes = new ArrayList<>(); final List<String> reportTypes = new ArrayList<>();
reportTypes.add("Table"); reportTypes.addAll(allowedReportTypes);
reportTypes.add("Pentaho");
reportTypes.add("Chart");
this.allowedReportTypes = reportTypes; this.allowedReportTypes = reportTypes;
final List<String> reportSubTypes = new ArrayList<>(); final List<String> reportSubTypes = new ArrayList<>();
@@ -19,6 +19,7 @@
package org.apache.fineract.infrastructure.dataqueries.domain; package org.apache.fineract.infrastructure.dataqueries.domain;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -77,7 +78,7 @@ public final class Report extends AbstractPersistable<Long> {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval = true) @OneToMany(cascade = CascadeType.ALL, mappedBy = "report", orphanRemoval = true)
private final Set<ReportParameterUsage> reportParameterUsages = new HashSet<>(); private final Set<ReportParameterUsage> reportParameterUsages = new HashSet<>();
public static Report fromJson(final JsonCommand command) { public static Report fromJson(final JsonCommand command, final Collection<String> reportTypes) {
String reportName = null; String reportName = null;
String reportType = null; String reportType = null;
@@ -109,7 +110,7 @@ public final class Report extends AbstractPersistable<Long> {
reportSql = command.stringValueOfParameterNamed("reportSql"); reportSql = command.stringValueOfParameterNamed("reportSql");
} }
return new Report(reportName, reportType, reportSubType, reportCategory, description, useReport, reportSql); return new Report(reportName, reportType, reportSubType, reportCategory, description, useReport, reportSql, reportTypes);
} }
protected Report() { protected Report() {
@@ -117,7 +118,7 @@ public final class Report extends AbstractPersistable<Long> {
} }
public Report(final String reportName, final String reportType, final String reportSubType, final String reportCategory, public Report(final String reportName, final String reportType, final String reportSubType, final String reportCategory,
final String description, final boolean useReport, final String reportSql) { final String description, final boolean useReport, final String reportSql, final Collection<String> reportTypes) {
this.reportName = reportName; this.reportName = reportName;
this.reportType = reportType; this.reportType = reportType;
this.reportSubType = reportSubType; this.reportSubType = reportSubType;
@@ -126,10 +127,10 @@ public final class Report extends AbstractPersistable<Long> {
this.coreReport = false; this.coreReport = false;
this.useReport = useReport; this.useReport = useReport;
this.reportSql = reportSql; this.reportSql = reportSql;
validate(); validate(reportTypes);
} }
public Map<String, Object> update(final JsonCommand command) { public Map<String, Object> update(final JsonCommand command, final Collection<String> reportTypes) {
final Map<String, Object> actualChanges = new LinkedHashMap<>(8); final Map<String, Object> actualChanges = new LinkedHashMap<>(8);
@@ -184,7 +185,7 @@ public final class Report extends AbstractPersistable<Long> {
} }
} }
validate(); validate(reportTypes);
if (!actualChanges.isEmpty()) { if (!actualChanges.isEmpty()) {
if (isCoreReport()) { if (isCoreReport()) {
@@ -214,15 +215,14 @@ public final class Report extends AbstractPersistable<Long> {
return reportParameterUsage; return reportParameterUsage;
} }
private void validate() { private void validate(final Collection<String> reportTypes) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("report"); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("report");
baseDataValidator.reset().parameter("reportName").value(this.reportName).notBlank().notExceedingLengthOf(100); baseDataValidator.reset().parameter("reportName").value(this.reportName).notBlank().notExceedingLengthOf(100);
baseDataValidator.reset().parameter("reportType").value(this.reportType).notBlank() baseDataValidator.reset().parameter("reportType").value(this.reportType).notBlank().isOneOfTheseValues(reportTypes.toArray());
.isOneOfTheseValues(new Object[] { "Table", "Pentaho", "Chart" });
baseDataValidator.reset().parameter("reportSubType").value(this.reportSubType).notExceedingLengthOf(20); baseDataValidator.reset().parameter("reportSubType").value(this.reportSubType).notExceedingLengthOf(20);
@@ -42,4 +42,6 @@ public interface ReadReportingService {
Collection<ReportParameterData> getAllowedParameters(); Collection<ReportParameterData> getAllowedParameters();
ReportData retrieveReport(final Long id); ReportData retrieveReport(final Long id);
Collection<String> getAllowedReportTypes();
} }
@@ -45,6 +45,7 @@ import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeader
import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData; import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData;
import org.apache.fineract.infrastructure.dataqueries.exception.ReportNotFoundException; import org.apache.fineract.infrastructure.dataqueries.exception.ReportNotFoundException;
import org.apache.fineract.infrastructure.documentmanagement.contentrepository.FileSystemContentRepository; import org.apache.fineract.infrastructure.documentmanagement.contentrepository.FileSystemContentRepository;
import org.apache.fineract.infrastructure.report.provider.ReportingProcessServiceProvider;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -69,15 +70,17 @@ public class ReadReportingServiceImpl implements ReadReportingService {
private final DataSource dataSource; private final DataSource dataSource;
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final GenericDataService genericDataService; private final GenericDataService genericDataService;
private final ReportingProcessServiceProvider reportingProcessServiceProvider;
@Autowired @Autowired
public ReadReportingServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource, public ReadReportingServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource,
final GenericDataService genericDataService) { final GenericDataService genericDataService, final ReportingProcessServiceProvider reportingProcessServiceProvider) {
this.context = context; this.context = context;
this.dataSource = dataSource; this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(this.dataSource); this.jdbcTemplate = new JdbcTemplate(this.dataSource);
this.genericDataService = genericDataService; this.genericDataService = genericDataService;
this.reportingProcessServiceProvider = reportingProcessServiceProvider;
} }
@Override @Override
@@ -389,6 +392,15 @@ public class ReadReportingServiceImpl implements ReadReportingService {
return parameters; return parameters;
} }
@Override
public Collection<String> getAllowedReportTypes() {
final List<String> reportTypes = new ArrayList<>();
reportTypes.add("Table");
reportTypes.add("Chart");
reportTypes.addAll(this.reportingProcessServiceProvider.findAllReportingTypes());
return reportTypes;
}
private static final class ReportParameterJoinMapper implements RowMapper<ReportParameterJoinData> { private static final class ReportParameterJoinMapper implements RowMapper<ReportParameterJoinData> {
public String schema(final Long reportId) { public String schema(final Long reportId) {
@@ -61,18 +61,20 @@ public class ReportWritePlatformServiceImpl implements ReportWritePlatformServic
private final ReportParameterUsageRepository reportParameterUsageRepository; private final ReportParameterUsageRepository reportParameterUsageRepository;
private final ReportParameterRepository reportParameterRepository; private final ReportParameterRepository reportParameterRepository;
private final PermissionRepository permissionRepository; private final PermissionRepository permissionRepository;
private final ReadReportingService readReportingService;
@Autowired @Autowired
public ReportWritePlatformServiceImpl(final PlatformSecurityContext context, public ReportWritePlatformServiceImpl(final PlatformSecurityContext context,
final ReportCommandFromApiJsonDeserializer fromApiJsonDeserializer, final ReportRepository reportRepository, final ReportCommandFromApiJsonDeserializer fromApiJsonDeserializer, final ReportRepository reportRepository,
final ReportParameterRepository reportParameterRepository, final ReportParameterUsageRepository reportParameterUsageRepository, final ReportParameterRepository reportParameterRepository, final ReportParameterUsageRepository reportParameterUsageRepository,
final PermissionRepository permissionRepository) { final PermissionRepository permissionRepository, final ReadReportingService readReportingService) {
this.context = context; this.context = context;
this.fromApiJsonDeserializer = fromApiJsonDeserializer; this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.reportRepository = reportRepository; this.reportRepository = reportRepository;
this.reportParameterRepository = reportParameterRepository; this.reportParameterRepository = reportParameterRepository;
this.reportParameterUsageRepository = reportParameterUsageRepository; this.reportParameterUsageRepository = reportParameterUsageRepository;
this.permissionRepository = permissionRepository; this.permissionRepository = permissionRepository;
this.readReportingService = readReportingService;
} }
@Transactional @Transactional
@@ -84,7 +86,7 @@ public class ReportWritePlatformServiceImpl implements ReportWritePlatformServic
this.fromApiJsonDeserializer.validate(command.json()); this.fromApiJsonDeserializer.validate(command.json());
final Report report = Report.fromJson(command); final Report report = Report.fromJson(command, this.readReportingService.getAllowedReportTypes());
final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(report, command); final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(report, command);
report.update(reportParameterUsages); report.update(reportParameterUsages);
@@ -115,7 +117,7 @@ public class ReportWritePlatformServiceImpl implements ReportWritePlatformServic
final Report report = this.reportRepository.findOne(reportId); final Report report = this.reportRepository.findOne(reportId);
if (report == null) { throw new ReportNotFoundException(reportId); } if (report == null) { throw new ReportNotFoundException(reportId); }
final Map<String, Object> changes = report.update(command); final Map<String, Object> changes = report.update(command, this.readReportingService.getAllowedReportTypes());
if (changes.containsKey("reportParameters")) { if (changes.containsKey("reportParameters")) {
final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(report, command); final Set<ReportParameterUsage> reportParameterUsages = assembleSetOfReportParameterUsages(report, command);
@@ -18,6 +18,7 @@
*/ */
package org.apache.fineract.infrastructure.report.provider; package org.apache.fineract.infrastructure.report.provider;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -58,6 +59,11 @@ public class ReportingProcessServiceProvider implements ApplicationContextAware
this.initializeRegistry(); this.initializeRegistry();
} }
public Collection<String> findAllReportingTypes() {
return this.reportingProcessServices.keySet();
}
private void initializeRegistry() { private void initializeRegistry() {
if (this.reportingProcessServices == null) { if (this.reportingProcessServices == null) {
this.reportingProcessServices = new HashMap<>(); this.reportingProcessServices = new HashMap<>();