WIP data tables
This commit is contained in:
+21
-3
@@ -7,8 +7,10 @@ public class ResultsetColumnHeader {
|
|||||||
|
|
||||||
private String columnName;
|
private String columnName;
|
||||||
private String columnType;
|
private String columnType;
|
||||||
private Integer columnLength;
|
private Long columnLength;
|
||||||
private String columnDisplayType;
|
private String columnDisplayType;
|
||||||
|
private boolean isColumnNullable;
|
||||||
|
private boolean isColumnPrimaryKey;
|
||||||
private List<String> columnValues = new ArrayList<String>();
|
private List<String> columnValues = new ArrayList<String>();
|
||||||
private List<ResultsetColumnValue> columnValuesNew = new ArrayList<ResultsetColumnValue>();
|
private List<ResultsetColumnValue> columnValuesNew = new ArrayList<ResultsetColumnValue>();
|
||||||
|
|
||||||
@@ -40,11 +42,11 @@ public class ResultsetColumnHeader {
|
|||||||
this.columnType = columnType;
|
this.columnType = columnType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getColumnLength() {
|
public Long getColumnLength() {
|
||||||
return columnLength;
|
return columnLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColumnLength(Integer columnLength) {
|
public void setColumnLength(Long columnLength) {
|
||||||
this.columnLength = columnLength;
|
this.columnLength = columnLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,4 +66,20 @@ public class ResultsetColumnHeader {
|
|||||||
this.columnValuesNew = columnValuesNew;
|
this.columnValuesNew = columnValuesNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isColumnNullable() {
|
||||||
|
return isColumnNullable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumnNullable(boolean isColumnNullable) {
|
||||||
|
this.isColumnNullable = isColumnNullable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isColumnPrimaryKey() {
|
||||||
|
return isColumnPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumnPrimaryKey(boolean isColumnPrimaryKey) {
|
||||||
|
this.isColumnPrimaryKey = isColumnPrimaryKey;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-8
@@ -2,27 +2,28 @@ package org.mifosng.platform.api.data;
|
|||||||
|
|
||||||
public class ResultsetColumnValue {
|
public class ResultsetColumnValue {
|
||||||
|
|
||||||
private Long id;
|
private int id;
|
||||||
private String Value;
|
private String value;
|
||||||
|
|
||||||
public ResultsetColumnValue() {
|
|
||||||
|
|
||||||
|
public ResultsetColumnValue(int id, String value) {
|
||||||
|
this.id = id;
|
||||||
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setId(Long id) {
|
public void setId(int id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
return Value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setValue(String value) {
|
public void setValue(String value) {
|
||||||
Value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+123
-4
@@ -13,6 +13,7 @@ import org.apache.commons.lang.StringUtils;
|
|||||||
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.ResultsetColumnValue;
|
||||||
import org.mifosng.platform.api.data.ResultsetDataRow;
|
import org.mifosng.platform.api.data.ResultsetDataRow;
|
||||||
import org.mifosng.platform.exceptions.AdditionalFieldsNotFoundException;
|
import org.mifosng.platform.exceptions.AdditionalFieldsNotFoundException;
|
||||||
import org.mifosng.platform.exceptions.DataTableNotFoundException;
|
import org.mifosng.platform.exceptions.DataTableNotFoundException;
|
||||||
@@ -183,7 +184,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
rsch.setColumnType(columnDefinitions.getString("data_type"));
|
rsch.setColumnType(columnDefinitions.getString("data_type"));
|
||||||
if (columnDefinitions.getInt("data_length") > 0)
|
if (columnDefinitions.getInt("data_length") > 0)
|
||||||
rsch.setColumnLength(columnDefinitions
|
rsch.setColumnLength(columnDefinitions
|
||||||
.getInt("data_length"));
|
.getLong("data_length"));
|
||||||
|
|
||||||
rsch.setColumnDisplayType(columnDefinitions
|
rsch.setColumnDisplayType(columnDefinitions
|
||||||
.getString("display_type"));
|
.getString("display_type"));
|
||||||
@@ -501,6 +502,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
checkMainResourceExistsWithinScope(applicationTableName, id);
|
checkMainResourceExistsWithinScope(applicationTableName, id);
|
||||||
|
|
||||||
|
CachedRowSet columnDefinitions = getDatatableMetaData(datatable);
|
||||||
|
|
||||||
|
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(
|
||||||
|
columnDefinitions);
|
||||||
|
|
||||||
String fkField = applicationTableName.substring(2) + "_id";
|
String fkField = applicationTableName.substring(2) + "_id";
|
||||||
|
|
||||||
String sql = "select ";
|
String sql = "select ";
|
||||||
@@ -516,14 +522,37 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
if (sqlOrder != null)
|
if (sqlOrder != null)
|
||||||
sql = sql + " order by " + sqlOrder;
|
sql = sql + " order by " + sqlOrder;
|
||||||
logger.info(sql);
|
logger.info(sql);
|
||||||
GenericResultsetData result = genericDataService
|
|
||||||
.fillGenericResultSet(sql);
|
|
||||||
|
//GenericResultsetData result = genericDataService
|
||||||
|
// .fillGenericResultSet(sql);
|
||||||
|
|
||||||
long elapsed = System.currentTimeMillis() - startTime;
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
logger.info("FINISHING DATATABLE: " + datatable + " Elapsed Time: "
|
logger.info("FINISHING DATATABLE: " + datatable + " Elapsed Time: "
|
||||||
+ elapsed);
|
+ elapsed);
|
||||||
|
|
||||||
return result;
|
return new GenericResultsetData(columnHeaders, new ArrayList<ResultsetDataRow>());
|
||||||
|
|
||||||
|
/*
|
||||||
|
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
||||||
|
columnDefinitions, sqlErrorMsg);
|
||||||
|
|
||||||
|
String selectFieldList = getSelectFieldListFromColumnHeaders(columnHeaders);
|
||||||
|
|
||||||
|
String sql = "select " + selectFieldList + " from `" + type
|
||||||
|
+ "` t left join `" + getFullDatasetName(type, set)
|
||||||
|
+ "` s on s.id = t.id where t.id = " + id;
|
||||||
|
logger.info("addition fields sql: " + sql);
|
||||||
|
|
||||||
|
List<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
|
||||||
|
columnHeaders, sql, sqlErrorMsg);
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed);
|
||||||
|
|
||||||
|
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getApplicationTableName(String datatable) {
|
private String getApplicationTableName(String datatable) {
|
||||||
@@ -545,6 +574,96 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private CachedRowSet getDatatableMetaData(String datatable) {
|
||||||
|
|
||||||
|
String sql = "select COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, COLUMN_KEY"
|
||||||
|
+ " from INFORMATION_SCHEMA.COLUMNS "
|
||||||
|
+ " where TABLE_SCHEMA = schema() and TABLE_NAME = '"
|
||||||
|
+ datatable + "'order by ORDINAL_POSITION";
|
||||||
|
|
||||||
|
CachedRowSet columnDefinitions = genericDataService.getCachedResultSet(
|
||||||
|
sql, "SQL: " + sql);
|
||||||
|
|
||||||
|
if (columnDefinitions.size() > 0)
|
||||||
|
return columnDefinitions;
|
||||||
|
|
||||||
|
throw new DataTableNotFoundException(datatable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ResultsetColumnHeader> getDatatableResultsetColumnHeaders(
|
||||||
|
CachedRowSet columnDefinitions) {
|
||||||
|
|
||||||
|
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
while (columnDefinitions.next()) {
|
||||||
|
ResultsetColumnHeader rsch = new ResultsetColumnHeader();
|
||||||
|
|
||||||
|
rsch.setColumnName(columnDefinitions.getString("COLUMN_NAME"));
|
||||||
|
|
||||||
|
String isNullable = columnDefinitions.getString("IS_NULLABLE");
|
||||||
|
if (isNullable.equalsIgnoreCase("YES")) rsch.setColumnNullable(true);
|
||||||
|
else rsch.setColumnNullable(false);
|
||||||
|
|
||||||
|
String isPrimaryKey = columnDefinitions.getString("COLUMN_KEY");
|
||||||
|
if (isPrimaryKey.equalsIgnoreCase("PRI")) rsch.setColumnPrimaryKey(true);
|
||||||
|
else rsch.setColumnPrimaryKey(false);
|
||||||
|
|
||||||
|
Long columnLength = columnDefinitions.getLong("CHARACTER_MAXIMUM_LENGTH");
|
||||||
|
if (columnLength > 0 ) rsch.setColumnLength(columnDefinitions.getLong("CHARACTER_MAXIMUM_LENGTH"));
|
||||||
|
|
||||||
|
rsch.setColumnType(columnDefinitions.getString("DATA_TYPE"));
|
||||||
|
|
||||||
|
rsch.setColumnDisplayType(null);
|
||||||
|
|
||||||
|
/* look for codes */
|
||||||
|
if (rsch.getColumnType().equalsIgnoreCase("varchar"))
|
||||||
|
addCodesValueIfNecessary(rsch, "_cv");
|
||||||
|
|
||||||
|
if (rsch.getColumnType().equalsIgnoreCase("int"))
|
||||||
|
addCodesValueIfNecessary(rsch, "_cd");
|
||||||
|
|
||||||
|
columnHeaders.add(rsch);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
return columnHeaders;
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
|
e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void addCodesValueIfNecessary(ResultsetColumnHeader rsch, String code_suffix) {
|
||||||
|
int codePosition = rsch.getColumnName().indexOf(code_suffix);
|
||||||
|
if (codePosition > 0){
|
||||||
|
String codeName = rsch.getColumnName().substring(0, codePosition);
|
||||||
|
|
||||||
|
String sql = "select v.id, v.code_value from m_code m "
|
||||||
|
+ " join m_code_value v on v.code_id = m.id "
|
||||||
|
+ " where m.code_name = '" + codeName + "' order by v.order_position, v.id";
|
||||||
|
|
||||||
|
CachedRowSet rsValues = genericDataService
|
||||||
|
.getCachedResultSet(sql, "SQL: " + sql);
|
||||||
|
|
||||||
|
try {
|
||||||
|
while (rsValues.next()) {
|
||||||
|
rsch.getColumnValuesNew().add( new ResultsetColumnValue(rsValues.getInt("id"), rsValues.getString("code_value")));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
|
e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static String generateJsonFromGenericResultsetData(
|
private static String generateJsonFromGenericResultsetData(
|
||||||
GenericResultsetData result) {
|
GenericResultsetData result) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user