WIP mifosx-195 read report api (has conflict

This commit is contained in:
John Woodlock
2013-04-16 03:22:37 +01:00
parent c4ba4c54ca
commit 97d7104c93
3 changed files with 59 additions and 23 deletions
@@ -99,6 +99,25 @@ public class ReportsApiResource {
RESPONSE_DATA_PARAMETERS); RESPONSE_DATA_PARAMETERS);
} }
@GET
@Path("wip/{id}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String retrieveReport(@PathParam("id") final Long id,
@Context final UriInfo uriInfo) {
context.authenticatedUser().validateHasReadPermission(
resourceNameForPermissions);
final ReportData result = this.readExtraDataAndReportingService
.retrieveReport(id);
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper
.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, result,
RESPONSE_DATA_PARAMETERS);
}
@POST @POST
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
@@ -114,10 +133,11 @@ public class ReportsApiResource {
} }
@PUT @PUT
@Path("{id}") @Path("{id}")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String updateReport(@PathParam("id") final Long id, final String apiRequestBodyAsJson) { public String updateReport(@PathParam("id") final Long id,
final String apiRequestBodyAsJson) {
final CommandWrapper commandRequest = new CommandWrapperBuilder() final CommandWrapper commandRequest = new CommandWrapperBuilder()
.updateReport(id).withJson(apiRequestBodyAsJson).build(); .updateReport(id).withJson(apiRequestBodyAsJson).build();
@@ -127,9 +147,9 @@ public class ReportsApiResource {
return this.toApiJsonSerializer.serialize(result); return this.toApiJsonSerializer.serialize(result);
} }
@DELETE @DELETE
@Path("{id}") @Path("{id}")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String deleteReport(@PathParam("id") final Long id) { public String deleteReport(@PathParam("id") final Long id) {
@@ -148,7 +168,7 @@ public class ReportsApiResource {
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON, "application/x-msdownload", @Produces({ MediaType.APPLICATION_JSON, "application/x-msdownload",
"application/vnd.ms-excel", "application/pdf", "text/html" }) "application/vnd.ms-excel", "application/pdf", "text/html" })
public Response retrieveReport( public Response runReport(
@PathParam("reportName") final String reportName, @PathParam("reportName") final String reportName,
@Context final UriInfo uriInfo) { @Context final UriInfo uriInfo) {
@@ -31,4 +31,6 @@ public interface ReadReportingService {
String getReportType(String reportName); String getReportType(String reportName);
Collection<ReportData> retrieveReportList(); Collection<ReportData> retrieveReportList();
ReportData retrieveReport(final Long id);
} }
@@ -508,12 +508,26 @@ public class ReadReportingServiceImpl implements ReadReportingService {
} }
} }
@Override
public ReportData retrieveReport(Long id) {
Collection<ReportData> reports = retrieveReports(id);
for (ReportData report : reports) {
return report;
}
return null;
}
@Override @Override
public Collection<ReportData> retrieveReportList() { public Collection<ReportData> retrieveReportList() {
return retrieveReports(null);
}
private Collection<ReportData> retrieveReports(final Long id) {
ReportParameterJoinMapper rm = new ReportParameterJoinMapper(); ReportParameterJoinMapper rm = new ReportParameterJoinMapper();
String sql = rm.schema(false, context.authenticatedUser().getId()); String sql = rm.schema(context.authenticatedUser().getId(), id);
Collection<ReportParameterJoinData> rpJoins = this.jdbcTemplate.query( Collection<ReportParameterJoinData> rpJoins = this.jdbcTemplate.query(
sql, rm, new Object[] {}); sql, rm, new Object[] {});
@@ -546,16 +560,13 @@ public class ReadReportingServiceImpl implements ReadReportingService {
} else { } else {
if (firstReport) { if (firstReport) {
firstReport = false; firstReport = false;
} } else {
else
{
// write report entry // write report entry
reportList reportList.add(new ReportData(reportId, reportName,
.add(new ReportData(reportId, reportName, reportType, reportSubType, reportCategory,
reportType, reportSubType, reportCategory, description, description, reportSql, coreReport, useReport,
reportSql, coreReport, useReport, reportParameters));
reportParameters));
} }
prevReportId = rpJoin.getReportId(); prevReportId = rpJoin.getReportId();
@@ -585,8 +596,8 @@ public class ReadReportingServiceImpl implements ReadReportingService {
} }
// write last report // write last report
reportList.add(new ReportData(reportId, reportName, reportType, reportList.add(new ReportData(reportId, reportName, reportType,
reportSubType, reportCategory, description, reportSql, coreReport, reportSubType, reportCategory, description, reportSql,
useReport, reportParameters)); coreReport, useReport, reportParameters));
return reportList; return reportList;
} }
@@ -594,13 +605,13 @@ public class ReadReportingServiceImpl implements ReadReportingService {
private static final class ReportParameterJoinMapper implements private static final class ReportParameterJoinMapper implements
RowMapper<ReportParameterJoinData> { RowMapper<ReportParameterJoinData> {
public String schema(boolean includeSql, Long userId) { public String schema(Long userId, Long reportId) {
String sql = "select r.id as reportId, r.report_name as reportName, r.report_type as reportType, " String sql = "select r.id as reportId, r.report_name as reportName, r.report_type as reportType, "
+ " r.report_subtype as reportSubType, r.report_category as reportCategory, r.description, r.core_report as coreReport, r.use_report as useReport, " + " r.report_subtype as reportSubType, r.report_category as reportCategory, r.description, r.core_report as coreReport, r.use_report as useReport, "
+ " rp.parameter_id as reportParameterId, rp.report_parameter_name as reportParameterName, p.parameter_name as parameterName"; + " rp.parameter_id as reportParameterId, rp.report_parameter_name as reportParameterName, p.parameter_name as parameterName";
if (includeSql) if (reportId != null)
sql += ", r.report_sql as reportSql "; sql += ", r.report_sql as reportSql ";
sql += " from stretchy_report r" sql += " from stretchy_report r"
@@ -614,8 +625,11 @@ public class ReadReportingServiceImpl implements ReadReportingService {
+ " left join m_permission p on p.id = rp.permission_id" + " left join m_permission p on p.id = rp.permission_id"
+ " where ur.appuser_id = " + " where ur.appuser_id = "
+ userId + userId
+ " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', r.report_name))) " + " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('READ_', r.report_name))) ";
+ " order by r.id, rp.parameter_id"; if (reportId != null)
sql += " and r.id = " + reportId;
else
sql += " order by r.id, rp.parameter_id";
return sql; return sql;
} }
@@ -649,8 +663,8 @@ public class ReadReportingServiceImpl implements ReadReportingService {
final String parameterName = rs.getString("parameterName"); final String parameterName = rs.getString("parameterName");
return new ReportParameterJoinData(reportId, reportName, return new ReportParameterJoinData(reportId, reportName,
reportType, reportSubType, reportCategory, description, reportSql, reportType, reportSubType, reportCategory, description,
coreReport, useReport, reportParameterId, reportSql, coreReport, useReport, reportParameterId,
reportParameterName, parameterName); reportParameterName, parameterName);
} }