WIP - list extradata sets

This commit is contained in:
John Woodlock
2012-05-09 19:19:27 +10:00
parent 29a004f746
commit 226f46663f
3 changed files with 291 additions and 8 deletions
@@ -1287,20 +1287,22 @@ public class ReadPlatformServiceImpl implements ReadPlatformService {
}
@Override
public ExtraDatasets retrieveExtraDatasetNames(String datasetType) {
if (datasetType == null) {
logger.info("Extra Data Dataset Type Not Found");
return null;
}
public ExtraDatasets retrieveExtraDatasetNames(String type) {
List<String> names = new ArrayList<String>();
Connection db_connection;
try {
db_connection = dataSource.getConnection();
Statement db_statement = db_connection.createStatement();
String sql = "select d.`name` as datasetName from stretchydata_dataset d join stretchydata_datasettype t on t.id = d.datasettype_id where t.`name` = '"
+ datasetType + "' order by d.`name`";
String whereClause;
if (type == null) {
whereClause = "";
} else {
whereClause = "where t.`name` = '" + type + "'";
}
String sql = "select d.`name` as datasetName from stretchydata_dataset d join stretchydata_datasettype t on t.id = d.datasettype_id "
+ whereClause + " order by d.`name`";
//logger.info("extra tables sql: " + sql);
ResultSet rs = db_statement.executeQuery(sql);
@@ -0,0 +1,126 @@
package org.mifosng.platform.api;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.mifosng.data.EntityIdentifier;
import org.mifosng.data.ErrorResponse;
import org.mifosng.data.ErrorResponseList;
import org.mifosng.data.ExtraDatasets;
import org.mifosng.data.reports.GenericResultset;
import org.mifosng.platform.InvalidSqlException;
import org.mifosng.platform.ReadPlatformService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Path("/v1/extradata")
@Component
@Scope("singleton")
public class ExtraDataApiResource {
private final static Logger logger = LoggerFactory
.getLogger(ExtraDataApiResource.class);
@Autowired
private ReadPlatformService readPlatformService;
// @GET
// @Path("{dataSetPrefix}")
// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
// public Response extraDataNames(@PathParam("dataSetPrefix") final String dataSetPrefix) {
//
// List<String> result = this.readPlatformService.retrieveExtraDataTableNames(dataSetPrefix);
//
// return Response.ok().entity(result).build();
// }
@GET
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON})
public Response datasets(@Context UriInfo uriInfo) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String type = queryParams.getFirst("type");
ExtraDatasets result = this.readPlatformService.retrieveExtraDatasetNames(type);
return Response.ok().entity(result).build();
}
/*
@GET
@Path("{datasetType}/{datasetName}/{datasetPKValue}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response extraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) {
try {
GenericResultset result = this.readPlatformService.retrieveExtraData(datasetType, datasetName, datasetPKValue);
return Response.ok().entity(result).build();
} catch (InvalidSqlException e) {
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql());
allErrors.add(err);
throw new WebApplicationException(Response
.status(Status.BAD_REQUEST)
.entity(new ErrorResponseList(allErrors)).build());
}
}
@POST
@Path("{datasetType}/{datasetName}/{datasetPKValue}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response saveExtraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) {
try {
MultivaluedMap<String, String> incomingParams = uriInfo.getQueryParameters();
Map<String, String> queryParams = new HashMap<String, String>();
Set<String> keys = incomingParams.keySet();
for (String key : keys) {
String pValue = incomingParams.get(key).get(0);
queryParams.put(key, pValue);
logger.info(key + " - " + pValue);
}
this.readPlatformService.tempSaveExtraData(datasetType, datasetName, datasetPKValue, queryParams);
EntityIdentifier entityIdentifier = new EntityIdentifier(Long.valueOf(datasetPKValue));
return Response.ok().entity(entityIdentifier).build();
} catch (InvalidSqlException e) {
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql());
allErrors.add(err);
throw new WebApplicationException(Response
.status(Status.BAD_REQUEST)
.entity(new ErrorResponseList(allErrors)).build());
}
}*/
}
@@ -0,0 +1,155 @@
package org.mifosng.platform.api;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.OPTIONS;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import org.mifosng.data.ErrorResponse;
import org.mifosng.data.ErrorResponseList;
import org.mifosng.data.reports.GenericResultset;
import org.mifosng.platform.ReadPlatformService;
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
import org.mifosng.platform.exceptions.ClientNotAuthenticatedException;
import org.mifosng.platform.exceptions.NewDataValidationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Component;
@Path("/v1/flexiblereporting")
@Component
@Scope("singleton")
public class FlexibleReportingApiResource {
private final static Logger logger = LoggerFactory.getLogger(FlexibleReportingApiResource.class);
@Autowired
private ReadPlatformService readPlatformService;
private String _corsHeaders;
private Response makeCORS(ResponseBuilder req, String returnMethod) {
ResponseBuilder rb = req
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
if (!"".equals(returnMethod)) {
rb.header("Access-Control-Allow-Headers", returnMethod);
}
return rb.build();
}
private Response makeCORS(ResponseBuilder req) {
return makeCORS(req, _corsHeaders);
}
// This OPTIONS request/response is necessary
// if you consumes other format than text/plain or
// if you use other HTTP verbs than GET and POST
@OPTIONS
@Path("/flexireport")
public Response corsMyResource(@HeaderParam("Access-Control-Request-Headers") String requestH) {
_corsHeaders = requestH;
return makeCORS(Response.ok(), requestH);
}
@GET
@Path("flexireport")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response retrieveReport(@Context UriInfo uriInfo, @Context HttpServletResponse httpServletResponse) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String rptDB = queryParams.getFirst("MRP_rptDB");
String name = queryParams.getFirst("MRP_Name");
String type = queryParams.getFirst("MRP_Type");
Map<String, String> extractedQueryParams = new HashMap<String, String>();
Set<String> keys = queryParams.keySet();
String pKey;
String pValue;
for (String k : keys) {
if (k.startsWith("MRP_"))
{
pKey = "${" + k.substring(4) + "}";
pValue = queryParams.get(k).get(0);
extractedQueryParams.put(pKey, pValue);
}
}
logger.info("BEGINNING REQUEST FOR: " + name);
GenericResultset result = this.readPlatformService.retrieveGenericResultset(rptDB, name, type, extractedQueryParams);
// JSONWithPadding paddedResult = new JSONWithPadding(result,
// callbackName);
return makeCORS(Response.ok().entity(result));
}
@GET
@Path("/exportcsv/{reportDb}/{reportName}/{reportType}/office/{officeId}/currency/{currencyId}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response exportCsvReport(
@PathParam("reportDb") String rptDB,
@PathParam("reportName") String name,
@PathParam("reportType") String type,
@PathParam("officeId") Long officeId, @PathParam("currencyId") Long currencyId) throws IOException {
try {
Map<String, String> extractedQueryParams = new HashMap<String, String>();
if (officeId != null && officeId > 0) {
extractedQueryParams.put("${officeId}", officeId.toString());
}
if (currencyId != null) {
extractedQueryParams.put("${currencyId}", currencyId.toString());
}
GenericResultset result = this.readPlatformService.retrieveGenericResultset(rptDB, name, type, extractedQueryParams);
return Response.ok().entity(result).build();
} catch (ClientNotAuthenticatedException e) {
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
} catch (AccessDeniedException e) {
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
} catch (ApplicationDomainRuleException e) {
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
} catch (NewDataValidationException e) {
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
}
}
@GET
@Path("forceauth")
public Response hackToForceAuthentication() {
return Response.ok().build();
}
}