WIP data tables
This commit is contained in:
+21
-3
@@ -7,8 +7,10 @@ public class ResultsetColumnHeader {
|
||||
|
||||
private String columnName;
|
||||
private String columnType;
|
||||
private Integer columnLength;
|
||||
private Long columnLength;
|
||||
private String columnDisplayType;
|
||||
private boolean isColumnNullable;
|
||||
private boolean isColumnPrimaryKey;
|
||||
private List<String> columnValues = new ArrayList<String>();
|
||||
private List<ResultsetColumnValue> columnValuesNew = new ArrayList<ResultsetColumnValue>();
|
||||
|
||||
@@ -40,11 +42,11 @@ public class ResultsetColumnHeader {
|
||||
this.columnType = columnType;
|
||||
}
|
||||
|
||||
public Integer getColumnLength() {
|
||||
public Long getColumnLength() {
|
||||
return columnLength;
|
||||
}
|
||||
|
||||
public void setColumnLength(Integer columnLength) {
|
||||
public void setColumnLength(Long columnLength) {
|
||||
this.columnLength = columnLength;
|
||||
}
|
||||
|
||||
@@ -64,4 +66,20 @@ public class ResultsetColumnHeader {
|
||||
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 {
|
||||
|
||||
private Long id;
|
||||
private String Value;
|
||||
|
||||
public ResultsetColumnValue() {
|
||||
private int id;
|
||||
private String value;
|
||||
|
||||
public ResultsetColumnValue(int id, String value) {
|
||||
this.id = id;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return Value;
|
||||
return 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.GenericResultsetData;
|
||||
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.exceptions.AdditionalFieldsNotFoundException;
|
||||
import org.mifosng.platform.exceptions.DataTableNotFoundException;
|
||||
@@ -183,7 +184,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
rsch.setColumnType(columnDefinitions.getString("data_type"));
|
||||
if (columnDefinitions.getInt("data_length") > 0)
|
||||
rsch.setColumnLength(columnDefinitions
|
||||
.getInt("data_length"));
|
||||
.getLong("data_length"));
|
||||
|
||||
rsch.setColumnDisplayType(columnDefinitions
|
||||
.getString("display_type"));
|
||||
@@ -501,6 +502,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
|
||||
checkMainResourceExistsWithinScope(applicationTableName, id);
|
||||
|
||||
CachedRowSet columnDefinitions = getDatatableMetaData(datatable);
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(
|
||||
columnDefinitions);
|
||||
|
||||
String fkField = applicationTableName.substring(2) + "_id";
|
||||
|
||||
String sql = "select ";
|
||||
@@ -516,14 +522,37 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
if (sqlOrder != null)
|
||||
sql = sql + " order by " + sqlOrder;
|
||||
logger.info(sql);
|
||||
GenericResultsetData result = genericDataService
|
||||
.fillGenericResultSet(sql);
|
||||
|
||||
|
||||
//GenericResultsetData result = genericDataService
|
||||
// .fillGenericResultSet(sql);
|
||||
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
logger.info("FINISHING DATATABLE: " + datatable + " Elapsed Time: "
|
||||
+ 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) {
|
||||
@@ -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(
|
||||
GenericResultsetData result) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user