refactoring additional fields for data scope
This commit is contained in:
+92
-68
@@ -94,9 +94,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
Long id) {
|
Long id) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
GenericResultsetData result = fillExtraDataGenericResultSet(type, set,
|
GenericResultsetData result = fillExtraDataGenericResultSet(type, set,
|
||||||
id);
|
id);
|
||||||
long elapsed = System.currentTimeMillis() - startTime;
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
|
||||||
logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed);
|
logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -104,17 +106,31 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
private GenericResultsetData fillExtraDataGenericResultSet(
|
private GenericResultsetData fillExtraDataGenericResultSet(
|
||||||
final String type, final String set, final Long id) {
|
final String type, final String set, final Long id) {
|
||||||
|
|
||||||
String sql = "select f.`name`, f.data_type, f.data_length, f.display_type, f.allowed_list_id from stretchydata_datasettype t join stretchydata_dataset d on d.datasettype_id = t.id join stretchydata_dataset_fields f on f.dataset_id = d.id where d.`name` = '"
|
CachedRowSet columnDefinitions = getAdditionalFieldsMetaData(type, set);
|
||||||
+ set + "' and t.`name` = '" + type + "' order by f.id";
|
|
||||||
|
|
||||||
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
||||||
+ set + " Id: " + id;
|
+ set + " Id: " + id;
|
||||||
|
|
||||||
CachedRowSet rsmd = genericDataService.getCachedResultSet(sql,
|
|
||||||
sqlErrorMsg);
|
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
||||||
rsmd, sqlErrorMsg, type, set);
|
columnDefinitions, sqlErrorMsg);
|
||||||
|
|
||||||
|
String selectFieldList = getSelectFieldListFromColumnHeaders(columnHeaders);
|
||||||
|
|
||||||
|
String unScopedSQL = "select " + selectFieldList + " from `" + type
|
||||||
|
+ "` t ${dataScopeCriteria} left join `"
|
||||||
|
+ getFullDatasetName(type, set) + "` s on s.id = t.id "
|
||||||
|
+ " where t.id = " + id;
|
||||||
|
String sql = dataScopedSQL(unScopedSQL, type);
|
||||||
|
logger.info("addition fields sql: " + sql);
|
||||||
|
|
||||||
|
List<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
|
||||||
|
columnHeaders, sql, sqlErrorMsg);
|
||||||
|
|
||||||
|
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getSelectFieldListFromColumnHeaders(
|
||||||
|
List<ResultsetColumnHeader> columnHeaders) {
|
||||||
|
|
||||||
Boolean firstColumn = true;
|
Boolean firstColumn = true;
|
||||||
String selectFieldList = "";
|
String selectFieldList = "";
|
||||||
@@ -130,105 +146,113 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
selectFieldList += selectFieldSeparator + "s.`"
|
selectFieldList += selectFieldSeparator + "s.`"
|
||||||
+ columnHeader.getColumnName() + "`";
|
+ columnHeader.getColumnName() + "`";
|
||||||
}
|
}
|
||||||
|
return selectFieldList;
|
||||||
|
}
|
||||||
|
|
||||||
String unScopedSQL = "select " + selectFieldList + " from `" + type
|
private CachedRowSet getAdditionalFieldsMetaData(String type, String set) {
|
||||||
+ "` t ${dataScopeCriteria} left join `"
|
String sql = "select f.`name`, f.data_type, f.data_length, f.display_type, f.allowed_list_id "
|
||||||
+ getFullDatasetName(type, set) + "` s on s.id = t.id "
|
+ " from stretchydata_datasettype t "
|
||||||
+ " where t.id = " + id;
|
+ " join stretchydata_dataset d on d.datasettype_id = t.id "
|
||||||
sql = dataScopedSQL(unScopedSQL, type);
|
+ " join stretchydata_dataset_fields f on f.dataset_id = d.id "
|
||||||
logger.info("addition fields sql: " + sql);
|
+ " where d.`name` = '"
|
||||||
// maybe can reduce parameters a bit (type and id only needed
|
+ set
|
||||||
// because of exception)
|
+ "' and t.`name` = '"
|
||||||
List<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
|
+ type
|
||||||
columnHeaders, sql, sqlErrorMsg, type, id);
|
+ "' order by f.id";
|
||||||
|
|
||||||
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
||||||
|
+ set + " - SQL: " + sql;
|
||||||
|
|
||||||
|
CachedRowSet columnDefinitions = genericDataService.getCachedResultSet(
|
||||||
|
sql, sqlErrorMsg);
|
||||||
|
if (columnDefinitions.size() > 0)
|
||||||
|
return columnDefinitions;
|
||||||
|
|
||||||
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
|
"Additional Fields Meta Data Not Found - " + sqlErrorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
||||||
CachedRowSet rsmd, String sqlErrorMsg, String type, String set) {
|
CachedRowSet columnDefinitions, String sqlErrorMsg) {
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = null;
|
List<ResultsetColumnHeader> columnHeaders = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (rsmd.next()) {
|
|
||||||
|
|
||||||
columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||||
Integer allowedListId;
|
Integer allowedListId;
|
||||||
do {
|
while (columnDefinitions.next()) {
|
||||||
ResultsetColumnHeader rsch = new ResultsetColumnHeader();
|
ResultsetColumnHeader rsch = new ResultsetColumnHeader();
|
||||||
rsch.setColumnName(rsmd.getString("name"));
|
rsch.setColumnName(columnDefinitions.getString("name"));
|
||||||
|
|
||||||
rsch.setColumnType(rsmd.getString("data_type"));
|
rsch.setColumnType(columnDefinitions.getString("data_type"));
|
||||||
if (rsmd.getInt("data_length") > 0)
|
if (columnDefinitions.getInt("data_length") > 0)
|
||||||
rsch.setColumnLength(rsmd.getInt("data_length"));
|
rsch.setColumnLength(columnDefinitions
|
||||||
|
.getInt("data_length"));
|
||||||
|
|
||||||
rsch.setColumnDisplayType(rsmd.getString("display_type"));
|
rsch.setColumnDisplayType(columnDefinitions
|
||||||
allowedListId = rsmd.getInt("allowed_list_id");
|
.getString("display_type"));
|
||||||
|
allowedListId = columnDefinitions.getInt("allowed_list_id");
|
||||||
|
|
||||||
if (allowedListId > 0) {
|
if (allowedListId > 0) {
|
||||||
|
|
||||||
// logger.info("allowedListId != null: Column: " +
|
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
|
||||||
// rsch.getColumnName());
|
+ allowedListId + " order by id";
|
||||||
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
|
CachedRowSet rsValues = genericDataService
|
||||||
+ allowedListId + " order by id";
|
.getCachedResultSet(sql, "SQL: " + sql);
|
||||||
CachedRowSet rsValues = genericDataService
|
while (rsValues.next()) {
|
||||||
.getCachedResultSet(sql, sqlErrorMsg);
|
rsch.getColumnValues().add(rsValues.getString("name"));
|
||||||
while (rsValues.next()) {
|
|
||||||
rsch.getColumnValues().add(
|
|
||||||
rsValues.getString("name"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
columnHeaders.add(rsch);
|
}
|
||||||
} while (rsmd.next());
|
columnHeaders.add(rsch);
|
||||||
return columnHeaders;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
;
|
||||||
|
return columnHeaders;
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
e.getMessage(), sqlErrorMsg);
|
e.getMessage(), sqlErrorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new AdditionalFieldsNotFoundException(type, set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ResultsetDataRow> getResultsetDataRows(
|
private List<ResultsetDataRow> getResultsetDataRows(
|
||||||
List<ResultsetColumnHeader> columnHeaders, String sql,
|
List<ResultsetColumnHeader> columnHeaders, String sql,
|
||||||
String sqlErrorMsg, String type, Long id) {
|
String sqlErrorMsg) {
|
||||||
|
|
||||||
List<ResultsetDataRow> resultsetDataRows = null;
|
List<ResultsetDataRow> resultsetDataRows = null;
|
||||||
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
|
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
|
||||||
sqlErrorMsg);
|
sqlErrorMsg);
|
||||||
|
|
||||||
try {
|
if (rs.size() != 1)
|
||||||
if (rs.next()) {
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
String columnName = null;
|
"Expected One Entry to be Returned But " + rs.size()
|
||||||
String columnValue = null;
|
+ " were Found - " + sqlErrorMsg);
|
||||||
resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
|
||||||
ResultsetDataRow resultsetDataRow;
|
|
||||||
do {
|
|
||||||
resultsetDataRow = new ResultsetDataRow();
|
|
||||||
List<String> columnValues = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (int i = 0; i < columnHeaders.size(); i++) {
|
String columnName = null;
|
||||||
columnName = columnHeaders.get(i).getColumnName();
|
String columnValue = null;
|
||||||
columnValue = rs.getString(columnName);
|
resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
||||||
columnValues.add(columnValue);
|
ResultsetDataRow resultsetDataRow;
|
||||||
}
|
|
||||||
resultsetDataRow.setRow(columnValues);
|
try {
|
||||||
resultsetDataRows.add(resultsetDataRow);
|
while (rs.next()) {
|
||||||
} while (rs.next());
|
resultsetDataRow = new ResultsetDataRow();
|
||||||
return resultsetDataRows;
|
List<String> columnValues = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (int i = 0; i < columnHeaders.size(); i++) {
|
||||||
|
columnName = columnHeaders.get(i).getColumnName();
|
||||||
|
columnValue = rs.getString(columnName);
|
||||||
|
columnValues.add(columnValue);
|
||||||
|
}
|
||||||
|
resultsetDataRow.setRow(columnValues);
|
||||||
|
resultsetDataRows.add(resultsetDataRow);
|
||||||
}
|
}
|
||||||
|
return resultsetDataRows;
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
e.getMessage(), sqlErrorMsg);
|
e.getMessage(), sqlErrorMsg);
|
||||||
}
|
}
|
||||||
// could also be not found because of data scope so need to split this
|
|
||||||
// up
|
|
||||||
throw new AdditionalFieldsNotFoundException(type, id);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user