wip update data tables and docs

This commit is contained in:
John Woodlock
2012-09-27 16:58:41 +10:00
parent 471bfe2566
commit d5f697962c
7 changed files with 260 additions and 82 deletions
@@ -29,6 +29,7 @@ import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.exceptions.NoAuthorizationException;
import org.mifosng.platform.noncore.GenericDataService;
import org.mifosng.platform.noncore.ReadWriteNonCoreDataService;
import org.mifosng.platform.security.PlatformSecurityContext;
import org.mifosng.platform.user.domain.AppUser;
@@ -53,6 +54,9 @@ public class DataTableApiResource {
this.context = context;
}
@Autowired
private GenericDataService genericDataService;
@Autowired
private ReadWriteNonCoreDataService readWriteNonCoreDataService;
@@ -113,21 +117,23 @@ public class DataTableApiResource {
checkUserPermissionForDatatable(datatable, "READ");
/*
* Dont use this for now... but its the code for returning data as json
* objects rather than a generic resultset String resultStr =
* this.readWriteNonCoreDataService
* .retrieveDataTableJSONObject(datatable, id, sqlFields, sqlOrder);
*/
GenericResultsetData results = this.readWriteNonCoreDataService
.retrieveDataTableGenericResultSet(datatable, apptableId,
sqlFields, sqlOrder, null);
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
boolean genericResultSet = ApiParameterHelper.genericResultSet(uriInfo
.getQueryParameters());
return this.apiJsonSerializerService
.serializeGenericResultsetDataToJson(prettyPrints, results);
if (genericResultSet) {
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
.getQueryParameters());
return this.apiJsonSerializerService
.serializeGenericResultsetDataToJson(prettyPrints, results);
} else {
return this.genericDataService
.generateJsonFromGenericResultsetData(results);
}
}
@@ -60,7 +60,7 @@ public class ApiParameterHelper {
}
return parameterType;
}
public static boolean template(final MultivaluedMap<String, String> queryParams) {
boolean template = false;
if (queryParams.getFirst("template") != null) {
@@ -69,4 +69,13 @@ public class ApiParameterHelper {
}
return template;
}
public static boolean genericResultSet(final MultivaluedMap<String, String> queryParams) {
boolean genericResultSet = false;
if (queryParams.getFirst("genericResultSet") != null) {
String genericResultSetValue = queryParams.getFirst("genericResultSet");
genericResultSet = "true".equalsIgnoreCase(genericResultSetValue);
}
return genericResultSet;
}
}
@@ -12,6 +12,8 @@ public interface GenericDataService {
GenericResultsetData fillGenericResultSet(final String sql);
String generateJsonFromGenericResultsetData(GenericResultsetData grs);
String replace(String str, String pattern, String replace);
String wrapSQL(String sql);
@@ -11,6 +11,7 @@ import java.util.List;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
import org.joda.time.LocalDate;
import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.ResultsetColumnHeader;
import org.mifosng.platform.api.data.ResultsetDataRow;
@@ -22,7 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sun.rowset.CachedRowSetImpl;
//TODO - Performance Item - most items (code values etc) can be cached but not doing that yet
@Service
public class GenericDataServiceImpl implements GenericDataService {
@@ -39,6 +40,7 @@ public class GenericDataServiceImpl implements GenericDataService {
@Override
public CachedRowSet getCachedResultSet(String sql, String sqlErrorMsg) {
//TODO - Need to reimplement this away from Sun library - could be mixture of Lists and jdbcTemplate.query
long startTime = System.currentTimeMillis();
Connection db_connection = null;
@@ -157,6 +159,62 @@ public class GenericDataServiceImpl implements GenericDataService {
return "select x.* from (" + sql + ") x";
}
@Override
public String generateJsonFromGenericResultsetData(GenericResultsetData grs) {
StringBuffer writer = new StringBuffer();
writer.append("[");
List<ResultsetColumnHeader> columnHeaders = grs.getColumnHeaders();
logger.info("NO. of Columns: " + columnHeaders.size());
List<ResultsetDataRow> data = grs.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).getColumnDisplayTypeNew();
currVal = row.get(j);
if (currVal != null) {
if (currColType.equals("DECIMAL")
|| currColType.equals("INTEGER"))
writer.append(currVal);
else {
if (currColType.equals("DATE")) {
LocalDate localDate = new LocalDate(currVal);
writer.append("[" + localDate.getYear() + ", " + localDate.getMonthOfYear() + ", " + localDate.getDayOfMonth() + "]");
} 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();
}
private void dbClose(Statement db_statement, Connection db_connection) {
logger.debug("dbClose");
try {
@@ -20,9 +20,6 @@ public interface ReadWriteNonCoreDataService {
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
Long appTableId, String sqlFields, String sqlOrder, Long id);
String retrieveDataTableJSONObject(String datatable, Long appTableId,
String sqlFields, String sqlOrder);
void newDatatableEntry(String datatable, Long appTableId,
Map<String, String> queryParams);
@@ -294,22 +294,6 @@ public class ReadWriteNonCoreDataServiceImpl implements
}
@Override
public String retrieveDataTableJSONObject(String datatable,
Long appTableId, String sqlFields, String sqlOrder) {
long startTime = System.currentTimeMillis();
GenericResultsetData result = retrieveDataTableGenericResultSet(
datatable, appTableId, sqlFields, sqlOrder, null);
String jsonString = generateJsonFromGenericResultsetData(result);
long elapsed = System.currentTimeMillis() - startTime;
logger.info("FINISHING DATATABLE JSON OBJECT: " + datatable
+ " Elapsed Time: " + elapsed);
return jsonString;
}
@Override
public GenericResultsetData retrieveDataTableGenericResultSet(
String datatable, Long appTableId, String sqlFields,
@@ -595,57 +579,6 @@ public class ReadWriteNonCoreDataServiceImpl implements
}
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).getColumnDisplayTypeNew();
currVal = row.get(j);
if (currVal != null) {
if (currColType.equals("DECIMAL")
|| currColType.equals("INTEGER"))
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();
}
private String getAddSql(List<ResultsetColumnHeader> columnHeaders,
String datatable, String fkName, Long appTableId,
Map<String, String> queryParams) {