WIP error handling in reports and additionalfields api

This commit is contained in:
John Woodlock
2012-05-17 17:19:55 +10:00
parent 49b90212ac
commit b71778a678
@@ -332,9 +332,9 @@ public class ReadExtraDataAndReportingServiceImpl implements
public AdditionalFieldsSets retrieveExtraDatasetNames(String type) { public AdditionalFieldsSets retrieveExtraDatasetNames(String type) {
List<AdditionalFieldsSet> additionalFieldsSets = new ArrayList<AdditionalFieldsSet>(); List<AdditionalFieldsSet> additionalFieldsSets = new ArrayList<AdditionalFieldsSet>();
Connection db_connection;
try { try {
db_connection = dataSource.getConnection(); Connection db_connection = dataSource.getConnection();
Statement db_statement = db_connection.createStatement(); Statement db_statement = db_connection.createStatement();
String whereClause; String whereClause;
@@ -359,9 +359,9 @@ public class ReadExtraDataAndReportingServiceImpl implements
db_connection.close(); db_connection.close();
db_connection = null; db_connection = null;
} catch (SQLException e) { } catch (SQLException e) {
logger.info(": Failed in retrieveExtraDatasetNames"); throw new PlatformDataIntegrityException("error.msg.sql.error",
throw new WebApplicationException(Response "JPWWRONGMSG - " + e.getMessage(),
.status(Status.BAD_REQUEST).entity(e.getMessage()).build()); "Additional Fields Type: " + type);
} }
return new AdditionalFieldsSets(additionalFieldsSets); return new AdditionalFieldsSets(additionalFieldsSets);
@@ -387,42 +387,34 @@ public class ReadExtraDataAndReportingServiceImpl implements
} }
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
logger.info("STARTING SET: " + set + " ID: " + id); GenericResultset result = fillExtraDataGenericResultSet(type, set, id);
try {
GenericResultset result = fillExtraDataGenericResultSet(type, set,
id);
long elapsed = System.currentTimeMillis() - startTime; long elapsed = System.currentTimeMillis() - startTime;
logger.info("FINISHING SET: " + set + " Elapsed Time: " logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed);
+ elapsed);
return result; return result;
} catch (SQLException e) {
logger.info("Error - SQL: " + e.toString());
throw new InvalidSqlException(e, e.toString());
}
} }
private GenericResultset fillExtraDataGenericResultSet(String type, private GenericResultset fillExtraDataGenericResultSet(String type,
String set, Long id) throws SQLException { String set, Long id) {
GenericResultset result = new GenericResultset(); GenericResultset result = new GenericResultset();
String fullDatasetName = getFullDatasetName(type, set); try {
Connection db_connection = dataSource.getConnection(); Connection db_connection = dataSource.getConnection();
Statement db_statement1 = db_connection.createStatement(); Statement db_statement1 = db_connection.createStatement();
Statement db_statement2 = db_connection.createStatement();
Statement db_statement3 = db_connection.createStatement();
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` = '" 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` = '"
+ set + "' and t.`name` = '" + type + "' order by f.id"; + set + "' and t.`name` = '" + type + "' order by f.id";
ResultSet rsmd = db_statement1.executeQuery(sql); ResultSet rsmd = db_statement1.executeQuery(sql);
if (rsmd.next()) {
String fullDatasetName = getFullDatasetName(type, set);
Statement db_statement2 = db_connection.createStatement();
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>(); List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
Boolean firstColumn = true; Boolean firstColumn = true;
Integer allowedListId; Integer allowedListId;
String selectFieldList = ""; String selectFieldList = "";
String selectFieldSeparator = ""; String selectFieldSeparator = "";
while (rsmd.next()) { do {
ResultsetColumnHeader rsch = new ResultsetColumnHeader(); ResultsetColumnHeader rsch = new ResultsetColumnHeader();
rsch.setColumnName(rsmd.getString("name")); rsch.setColumnName(rsmd.getString("name"));
@@ -432,7 +424,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
} else { } else {
selectFieldSeparator = ", "; selectFieldSeparator = ", ";
} }
selectFieldList += selectFieldSeparator + "`" selectFieldList += selectFieldSeparator + "s.`"
+ rsch.getColumnName() + "`"; + rsch.getColumnName() + "`";
rsch.setColumnType(rsmd.getString("data_type")); rsch.setColumnType(rsmd.getString("data_type"));
@@ -444,22 +436,28 @@ public class ReadExtraDataAndReportingServiceImpl implements
+ allowedListId + " order by id"; + allowedListId + " order by id";
ResultSet rsValues = db_statement2.executeQuery(sql); ResultSet rsValues = db_statement2.executeQuery(sql);
while (rsValues.next()) { while (rsValues.next()) {
rsch.getColumnValues().add(rsValues.getString("name")); rsch.getColumnValues().add(
rsValues.getString("name"));
} }
} }
columnHeaders.add(rsch); columnHeaders.add(rsch);
} } while (rsmd.next());
result.setColumnHeaders(columnHeaders); result.setColumnHeaders(columnHeaders);
db_statement2.close();
db_statement2 = null;
sql = "select " + selectFieldList + " from `" + fullDatasetName sql = "select " + selectFieldList + " from `" + type + "` t left join `" + fullDatasetName + "` s on s.id = t.id "
+ "` where id = " + id; + " where t.id = " + id;
Statement db_statement3 = db_connection.createStatement();
ResultSet rs = db_statement3.executeQuery(sql); ResultSet rs = db_statement3.executeQuery(sql);
if (rs.next()) {
String columnName = null; String columnName = null;
String columnValue = null; String columnValue = null;
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>(); List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
ResultsetDataRow resultsetDataRow; ResultsetDataRow resultsetDataRow;
while (rs.next()) { do {
resultsetDataRow = new ResultsetDataRow(); resultsetDataRow = new ResultsetDataRow();
List<String> columnValues = new ArrayList<String>(); List<String> columnValues = new ArrayList<String>();
@@ -470,18 +468,32 @@ public class ReadExtraDataAndReportingServiceImpl implements
} }
resultsetDataRow.setRow(columnValues); resultsetDataRow.setRow(columnValues);
resultsetDataRows.add(resultsetDataRow); resultsetDataRows.add(resultsetDataRow);
} } while (rs.next());
result.setData(resultsetDataRows); result.setData(resultsetDataRows);
} else {
db_statement1.close(); throw new PlatformResourceNotFoundException(
db_statement1 = null; "error.msg.type.value.not.found",
db_statement2.close(); "Additional Fields Type: " + type + " Id Not Found for " + id);
db_statement2 = null; }
db_statement3.close(); db_statement3.close();
db_statement3 = null; db_statement3 = null;
} else {
throw new PlatformResourceNotFoundException(
"error.msg.set.not.found",
"Additional Fields Set Not Found", "Type: " + type
+ " Set: " + set);
}
db_statement1.close();
db_statement1 = null;
db_connection.close(); db_connection.close();
db_connection = null; db_connection = null;
} catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error",
"JPWWRONGMSG - " + e.getMessage(),
"Additional Fields Type: " + type + " Set: " + set
+ " Id: " + id);
}
return result; return result;
} }