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,
|
void updateExtraData(String type, String set, Long id,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
|
String retrieveDataTable(String datatable);
|
||||||
|
|
||||||
Response processPentahoRequest(String reportName, String outputType,
|
Response processPentahoRequest(String reportName, String outputType,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
|
|||||||
+93
@@ -17,14 +17,23 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.StreamingOutput;
|
import javax.ws.rs.core.StreamingOutput;
|
||||||
|
import javax.ws.rs.core.Response.Status;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
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.AdditionalFieldsSetData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||||
import org.mifosng.platform.api.data.ResultsetDataRow;
|
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.AdditionalFieldsNotFoundException;
|
||||||
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
||||||
import org.mifosng.platform.exceptions.ReportNotFoundException;
|
import org.mifosng.platform.exceptions.ReportNotFoundException;
|
||||||
@@ -47,6 +56,9 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ReadExtraDataAndReportingServiceImpl implements
|
public class ReadExtraDataAndReportingServiceImpl implements
|
||||||
ReadExtraDataAndReportingService {
|
ReadExtraDataAndReportingService {
|
||||||
@@ -367,6 +379,87 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
|||||||
return additionalFieldsSets;
|
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
|
@Override
|
||||||
public GenericResultsetData retrieveExtraData(String type, String set,
|
public GenericResultsetData retrieveExtraData(String type, String set,
|
||||||
Long id) {
|
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