refactoring additional fields for data scope

This commit is contained in:
John Woodlock
2012-08-30 13:15:50 +10:00
parent 6ae1e98eb1
commit 2cda93f754
@@ -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,85 +146,96 @@ 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: " +
// rsch.getColumnName());
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = " String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
+ allowedListId + " order by id"; + allowedListId + " order by id";
CachedRowSet rsValues = genericDataService CachedRowSet rsValues = genericDataService
.getCachedResultSet(sql, sqlErrorMsg); .getCachedResultSet(sql, "SQL: " + sql);
while (rsValues.next()) { while (rsValues.next()) {
rsch.getColumnValues().add( rsch.getColumnValues().add(rsValues.getString("name"));
rsValues.getString("name"));
} }
} }
columnHeaders.add(rsch); columnHeaders.add(rsch);
} while (rsmd.next());
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",
"Expected One Entry to be Returned But " + rs.size()
+ " were Found - " + sqlErrorMsg);
String columnName = null; String columnName = null;
String columnValue = null; String columnValue = null;
resultsetDataRows = new ArrayList<ResultsetDataRow>(); resultsetDataRows = new ArrayList<ResultsetDataRow>();
ResultsetDataRow resultsetDataRow; ResultsetDataRow resultsetDataRow;
do {
try {
while (rs.next()) {
resultsetDataRow = new ResultsetDataRow(); resultsetDataRow = new ResultsetDataRow();
List<String> columnValues = new ArrayList<String>(); List<String> columnValues = new ArrayList<String>();
@@ -219,16 +246,13 @@ public class ReadWriteNonCoreDataServiceImpl implements
} }
resultsetDataRow.setRow(columnValues); resultsetDataRow.setRow(columnValues);
resultsetDataRows.add(resultsetDataRow); resultsetDataRows.add(resultsetDataRow);
} while (rs.next());
return resultsetDataRows;
} }
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);
} }