wip data table api
This commit is contained in:
+2
@@ -25,6 +25,8 @@ public interface ReadExtraDataAndReportingService {
|
||||
void updateExtraData(String type, String set, Long id,
|
||||
Map<String, String> queryParams);
|
||||
|
||||
String retrieveDataTable(String datatable);
|
||||
|
||||
Response processPentahoRequest(String reportName, String outputType,
|
||||
Map<String, String> queryParams);
|
||||
|
||||
|
||||
+93
@@ -17,14 +17,23 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.codehaus.jettison.json.JSONArray;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||
import org.mifosng.platform.api.data.ResultsetDataRow;
|
||||
import org.mifosng.platform.api.infrastructure.JodaDateTimeAdapter;
|
||||
import org.mifosng.platform.api.infrastructure.JodaLocalDateAdapter;
|
||||
import org.mifosng.platform.exceptions.AdditionalFieldsNotFoundException;
|
||||
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
||||
import org.mifosng.platform.exceptions.ReportNotFoundException;
|
||||
@@ -47,6 +56,9 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
@Service
|
||||
public class ReadExtraDataAndReportingServiceImpl implements
|
||||
ReadExtraDataAndReportingService {
|
||||
@@ -367,6 +379,87 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
return additionalFieldsSets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String retrieveDataTable(String datatable) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
String sql = "select * from " + datatable;
|
||||
|
||||
GenericResultsetData result = fillReportingGenericResultSet(sql);
|
||||
|
||||
String jsonString = generateJsonFromGenericResultsetData(result);
|
||||
|
||||
logger.info("JSON is: " + jsonString);
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
logger.info("FINISHING DATATABLE: " + datatable + " Elapsed Time: "
|
||||
+ elapsed);
|
||||
return jsonString;
|
||||
}
|
||||
|
||||
private static String generateJsonFromGenericResultsetData(
|
||||
GenericResultsetData result) {
|
||||
|
||||
StringBuffer writer = new StringBuffer();
|
||||
|
||||
writer.append("[");
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = result.getColumnHeaders();
|
||||
logger.info("NO. of Columns: " + columnHeaders.size());
|
||||
|
||||
List<ResultsetDataRow> data = result.getData();
|
||||
List<String> row;
|
||||
Integer rSize;
|
||||
String currColType;
|
||||
String currVal;
|
||||
logger.info("NO. of Rows: " + data.size());
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
writer.append("\n{");
|
||||
|
||||
row = data.get(i).getRow();
|
||||
rSize = row.size();
|
||||
for (int j = 0; j < rSize; j++) {
|
||||
|
||||
writer.append('\"' + columnHeaders.get(j).getColumnName() + '\"'
|
||||
+ ": ");
|
||||
currColType = columnHeaders.get(j).getColumnType();
|
||||
currVal = row.get(j);
|
||||
if (currVal != null) {
|
||||
if (currColType.equals("DECIMAL")
|
||||
|| currColType.equals("DOUBLE")
|
||||
|| currColType.equals("BIGINT")
|
||||
|| currColType.equals("SMALLINT")
|
||||
|| currColType.equals("INT"))
|
||||
writer.append(currVal);
|
||||
else
|
||||
writer.append('\"' + currVal + '\"');
|
||||
} else
|
||||
writer.append("null");
|
||||
|
||||
if (j < (rSize - 1))
|
||||
writer.append(",\n");
|
||||
}
|
||||
|
||||
if (i < (data.size() - 1)) writer.append("},");
|
||||
else writer.append("}");
|
||||
}
|
||||
|
||||
writer.append("\n]");
|
||||
return writer.toString();
|
||||
|
||||
/*
|
||||
JSONObject js = null;
|
||||
try {
|
||||
js = new JSONObject(writer.toString());
|
||||
} catch (JSONException e) {
|
||||
throw new WebApplicationException(Response
|
||||
.status(Status.BAD_REQUEST).entity("JSON body is wrong")
|
||||
.build());
|
||||
}
|
||||
|
||||
return js.toString();*/
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenericResultsetData retrieveExtraData(String type, String set,
|
||||
Long id) {
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package org.mifosng.platform.api;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
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.QueryParam;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
import org.codehaus.jettison.json.JSONArray;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.mifosng.platform.InvalidSqlException;
|
||||
import org.mifosng.platform.ReadExtraDataAndReportingService;
|
||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||
import org.mifosng.platform.api.data.ApiParameterError;
|
||||
import org.mifosng.platform.api.data.EntityIdentifier;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
import org.mifosng.platform.api.infrastructure.ApiDataConversionService;
|
||||
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
|
||||
import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
|
||||
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("/datatables")
|
||||
@Component
|
||||
@Scope("singleton")
|
||||
public class DataTableApiResource {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(DataTableApiResource.class);
|
||||
|
||||
@Autowired
|
||||
private ReadExtraDataAndReportingService readExtraDataAndReportingService;
|
||||
|
||||
@Autowired
|
||||
private ApiDataConversionService apiDataConversionService;
|
||||
|
||||
|
||||
@GET
|
||||
@Path("{datatable}")
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public String extraData(@PathParam("datatable") final String datatable,
|
||||
@Context final UriInfo uriInfo) {
|
||||
|
||||
try {
|
||||
//GenericResultsetData result = this.readExtraDataAndReportingService.retrieveDataTable(datatable);
|
||||
return this.readExtraDataAndReportingService.retrieveDataTable(datatable);
|
||||
|
||||
//boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
|
||||
//return this.apiDataConversionService.convertGenericResultsetDataToJson(prettyPrint, result);
|
||||
} catch (InvalidSqlException e) {
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
ApiParameterError error = ApiParameterError.parameterError(
|
||||
"extradata.invalid.sql", "The sql is invalid.", "sql",
|
||||
e.getSql());
|
||||
dataValidationErrors.add(error);
|
||||
throw new PlatformApiDataValidationException(
|
||||
"validation.msg.validation.errors.exist",
|
||||
"Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user