wIP data tables
This commit is contained in:
@@ -95,7 +95,7 @@ public class DataTableApiResource {
|
|||||||
|
|
||||||
GenericResultsetData results = this.readWriteNonCoreDataService
|
GenericResultsetData results = this.readWriteNonCoreDataService
|
||||||
.retrieveDataTableGenericResultSet(datatable, appTableId,
|
.retrieveDataTableGenericResultSet(datatable, appTableId,
|
||||||
sqlFields, sqlOrder);
|
sqlFields, sqlOrder, null);
|
||||||
|
|
||||||
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
||||||
.getQueryParameters());
|
.getQueryParameters());
|
||||||
@@ -135,7 +135,7 @@ public class DataTableApiResource {
|
|||||||
@PathParam("datatable") final String datatable,
|
@PathParam("datatable") final String datatable,
|
||||||
@PathParam("appTableId") final Long appTableId,
|
@PathParam("appTableId") final Long appTableId,
|
||||||
final String jsonRequestBody) {
|
final String jsonRequestBody) {
|
||||||
|
/* for updating one to one relationships (where foreign key is the primary key)*/
|
||||||
checkUserPermissionForDatatable(datatable, "UPDATE");
|
checkUserPermissionForDatatable(datatable, "UPDATE");
|
||||||
Map<String, String> queryParams = getQueryParamsFromJsonRequestBody(jsonRequestBody);
|
Map<String, String> queryParams = getQueryParamsFromJsonRequestBody(jsonRequestBody);
|
||||||
|
|
||||||
@@ -148,6 +148,29 @@ public class DataTableApiResource {
|
|||||||
return Response.ok().entity(entityIdentifier).build();
|
return Response.ok().entity(entityIdentifier).build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("{datatable}/{appTableId}/{datatableId}")
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
|
public Response updateDatatableEntryOnetoOne(
|
||||||
|
@PathParam("datatable") final String datatable,
|
||||||
|
@PathParam("appTableId") final Long appTableId,
|
||||||
|
@PathParam("datatableId") final Long datatableId,
|
||||||
|
final String jsonRequestBody) {
|
||||||
|
/* for updating one to many relationships (where foreign key isn't the primary key)*/
|
||||||
|
checkUserPermissionForDatatable(datatable, "UPDATE");
|
||||||
|
Map<String, String> queryParams = getQueryParamsFromJsonRequestBody(jsonRequestBody);
|
||||||
|
|
||||||
|
this.readWriteNonCoreDataService.updateDatatableEntryOnetoMany(datatable,
|
||||||
|
appTableId, datatableId, queryParams);
|
||||||
|
|
||||||
|
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
||||||
|
Long.valueOf(appTableId));
|
||||||
|
|
||||||
|
return Response.ok().entity(entityIdentifier).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@DELETE
|
@DELETE
|
||||||
@Path("{datatable}/{appTableId}")
|
@Path("{datatable}/{appTableId}")
|
||||||
|
|||||||
+5
-2
@@ -20,17 +20,20 @@ public interface ReadWriteNonCoreDataService {
|
|||||||
List<DatatableData> retrieveDatatableNames(String appTable);
|
List<DatatableData> retrieveDatatableNames(String appTable);
|
||||||
|
|
||||||
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
||||||
Long appTableId, String sqlFields, String sqlOrder);
|
Long appTableId, String sqlFields, String sqlOrder, Long id);
|
||||||
|
|
||||||
String retrieveDataTableJSONObject(String datatable, Long appTableId,
|
String retrieveDataTableJSONObject(String datatable, Long appTableId,
|
||||||
String sqlFields, String sqlOrder);
|
String sqlFields, String sqlOrder);
|
||||||
|
|
||||||
void newDatatableEntry(String datatable, Long appTableId,
|
void newDatatableEntry(String datatable, Long appTableId,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
void updateDatatableEntryOnetoOne(String datatable, Long appTableId,
|
void updateDatatableEntryOnetoOne(String datatable, Long appTableId,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
|
void updateDatatableEntryOnetoMany(String datatable, Long appTableId,
|
||||||
|
Long datatableId, Map<String, String> queryParams);
|
||||||
|
|
||||||
void deleteDatatableEntries(String datatable, Long appTableId);
|
void deleteDatatableEntries(String datatable, Long appTableId);
|
||||||
|
|
||||||
void deleteDatatableEntry(String datatable, Long appTableId,
|
void deleteDatatableEntry(String datatable, Long appTableId,
|
||||||
|
|||||||
+60
-23
@@ -510,13 +510,43 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
GenericResultsetData grs = retrieveDataTableGenericResultSet(datatable,
|
GenericResultsetData grs = retrieveDataTableGenericResultSet(datatable,
|
||||||
appTableId, null, null);
|
appTableId, null, null, null);
|
||||||
|
|
||||||
if (grs.getData().size() == 0)
|
if (grs.getData().size() == 0)
|
||||||
throw new DataTableNotFoundException(datatable, appTableId);
|
throw new DataTableNotFoundException(datatable, appTableId);
|
||||||
|
|
||||||
String sql = getUpdateSql(grs, datatable,
|
String fkName = getFKField(getApplicationTableName(datatable));
|
||||||
getFKField(getApplicationTableName(datatable)), appTableId,
|
String sql = getUpdateSql(grs, datatable, fkName, appTableId,
|
||||||
|
queryParams);
|
||||||
|
|
||||||
|
if (sql != null)
|
||||||
|
genericDataService.updateSQL(sql, "SQL: " + sql);
|
||||||
|
else
|
||||||
|
logger.info("No Changes");
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
logger.info("FINISHING updateDatatableEntryOnetoOne: Elapsed Time: "
|
||||||
|
+ elapsed
|
||||||
|
+ " - datatable: "
|
||||||
|
+ datatable
|
||||||
|
+ fkName
|
||||||
|
+ ": "
|
||||||
|
+ appTableId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDatatableEntryOnetoMany(String datatable,
|
||||||
|
Long appTableId, Long datatableId, Map<String, String> queryParams) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
GenericResultsetData grs = retrieveDataTableGenericResultSet(datatable,
|
||||||
|
appTableId, null, null, datatableId);
|
||||||
|
|
||||||
|
if (grs.getData().size() == 0)
|
||||||
|
throw new DataTableNotFoundException(datatable, appTableId);
|
||||||
|
|
||||||
|
String sql = getUpdateSql(grs, datatable, "id", datatableId,
|
||||||
queryParams);
|
queryParams);
|
||||||
|
|
||||||
if (sql != null)
|
if (sql != null)
|
||||||
@@ -530,8 +560,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
+ " - datatable: "
|
+ " - datatable: "
|
||||||
+ datatable
|
+ datatable
|
||||||
+ " id: "
|
+ " id: "
|
||||||
+ appTableId);
|
+ datatableId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -631,7 +660,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
||||||
datatable, appTableId, sqlFields, sqlOrder);
|
datatable, appTableId, sqlFields, sqlOrder, null);
|
||||||
|
|
||||||
String jsonString = generateJsonFromGenericResultsetData(result);
|
String jsonString = generateJsonFromGenericResultsetData(result);
|
||||||
|
|
||||||
@@ -643,7 +672,8 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GenericResultsetData retrieveDataTableGenericResultSet(
|
public GenericResultsetData retrieveDataTableGenericResultSet(
|
||||||
String datatable, Long appTableId, String sqlFields, String sqlOrder) {
|
String datatable, Long appTableId, String sqlFields,
|
||||||
|
String sqlOrder, Long id) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
@@ -658,17 +688,23 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
else
|
else
|
||||||
sql = sql + " * ";
|
sql = sql + " * ";
|
||||||
|
|
||||||
sql = sql + " from " + datatable + " where " + getFKField(appTable)
|
// id only used for reading a specific entry in a one to many datatable
|
||||||
+ " = " + appTableId;
|
// (when updating)
|
||||||
|
if (id == null) {
|
||||||
|
sql = sql + " from " + datatable + " where " + getFKField(appTable)
|
||||||
|
+ " = " + appTableId;
|
||||||
|
} else {
|
||||||
|
sql = sql + " from " + datatable + " where id = " + id;
|
||||||
|
}
|
||||||
|
|
||||||
if (sqlOrder != null)
|
if (sqlOrder != null)
|
||||||
sql = sql + " order by " + sqlOrder;
|
sql = sql + " order by " + sqlOrder;
|
||||||
logger.info(sql);
|
|
||||||
|
|
||||||
List<ResultsetDataRow> result = fillDatatableResultSetDataRows(sql);
|
List<ResultsetDataRow> result = fillDatatableResultSetDataRows(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 + " SQL: " + sql);
|
||||||
|
|
||||||
return new GenericResultsetData(columnHeaders, result);
|
return new GenericResultsetData(columnHeaders, result);
|
||||||
|
|
||||||
@@ -914,11 +950,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getAddSql(List<ResultsetColumnHeader> columnHeaders,
|
private String getAddSql(List<ResultsetColumnHeader> columnHeaders,
|
||||||
String datatable, String FKField, Long appTableId,
|
String datatable, String fkName, Long appTableId,
|
||||||
Map<String, String> queryParams) {
|
Map<String, String> queryParams) {
|
||||||
|
|
||||||
Map<String, String> affectedColumns = getAffectedColumns(columnHeaders,
|
Map<String, String> affectedColumns = getAffectedColumns(columnHeaders,
|
||||||
queryParams);
|
queryParams, fkName);
|
||||||
|
|
||||||
String pValueWrite = "";
|
String pValueWrite = "";
|
||||||
String addSql = "";
|
String addSql = "";
|
||||||
@@ -943,7 +979,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
selectColumns += "," + pValueWrite + " as " + columnName;
|
selectColumns += "," + pValueWrite + " as " + columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
addSql = "insert into `" + datatable + "` (`" + FKField + "` "
|
addSql = "insert into `" + datatable + "` (`" + fkName + "` "
|
||||||
+ insertColumns + ")" + " select " + appTableId + " as id"
|
+ insertColumns + ")" + " select " + appTableId + " as id"
|
||||||
+ selectColumns;
|
+ selectColumns;
|
||||||
|
|
||||||
@@ -951,10 +987,10 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getUpdateSql(GenericResultsetData grs, String datatable,
|
private String getUpdateSql(GenericResultsetData grs, String datatable,
|
||||||
String fkField, Long appTableId, Map<String, String> queryParams) {
|
String keyFieldName, Long keyFieldValue, Map<String, String> queryParams) {
|
||||||
|
|
||||||
Map<String, String> affectedAndChangedColumns = getAffectedAndChangedColumns(
|
Map<String, String> affectedAndChangedColumns = getAffectedAndChangedColumns(
|
||||||
grs, queryParams);
|
grs, queryParams, keyFieldName);
|
||||||
|
|
||||||
// just updating fields that have changed since pre-update read - though
|
// just updating fields that have changed since pre-update read - though
|
||||||
// its possible these values are different from the page the user was
|
// its possible these values are different from the page the user was
|
||||||
@@ -991,16 +1027,16 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
sql += "`" + key + "` = " + pValueWrite;
|
sql += "`" + key + "` = " + pValueWrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
sql += " where " + fkField + " = " + appTableId;
|
sql += " where " + keyFieldName + " = " + keyFieldValue;
|
||||||
|
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> getAffectedAndChangedColumns(
|
private Map<String, String> getAffectedAndChangedColumns(
|
||||||
GenericResultsetData grs, Map<String, String> queryParams) {
|
GenericResultsetData grs, Map<String, String> queryParams, String fkName) {
|
||||||
|
|
||||||
Map<String, String> affectedColumns = getAffectedColumns(
|
Map<String, String> affectedColumns = getAffectedColumns(
|
||||||
grs.getColumnHeaders(), queryParams);
|
grs.getColumnHeaders(), queryParams, fkName);
|
||||||
Map<String, String> affectedAndChangedColumns = new HashMap<String, String>();
|
Map<String, String> affectedAndChangedColumns = new HashMap<String, String>();
|
||||||
String columnValue;
|
String columnValue;
|
||||||
|
|
||||||
@@ -1043,7 +1079,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
private Map<String, String> getAffectedColumns(
|
private Map<String, String> getAffectedColumns(
|
||||||
List<ResultsetColumnHeader> columnHeaders,
|
List<ResultsetColumnHeader> columnHeaders,
|
||||||
Map<String, String> queryParams) {
|
Map<String, String> queryParams, String keyFieldName) {
|
||||||
|
|
||||||
String underscore = "_";
|
String underscore = "_";
|
||||||
String space = " ";
|
String space = " ";
|
||||||
@@ -1055,10 +1091,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
Map<String, String> affectedColumns = new HashMap<String, String>();
|
Map<String, String> affectedColumns = new HashMap<String, String>();
|
||||||
Set<String> keys = queryParams.keySet();
|
Set<String> keys = queryParams.keySet();
|
||||||
for (String key : keys) {
|
for (String key : keys) {
|
||||||
// ignores any id field and matches incoming fields with and without
|
// ignores id and foreign key fields
|
||||||
// underscores (spaces and underscores considered the same)
|
if (!((key.equalsIgnoreCase("id")) || (key.equalsIgnoreCase(keyFieldName)))) {
|
||||||
if (!(key.equalsIgnoreCase("id"))) {
|
|
||||||
notFound = true;
|
notFound = true;
|
||||||
|
// ignores any id field and matches incoming fields with and without
|
||||||
|
// underscores (spaces and underscores considered the same)
|
||||||
queryParamColumnUnderscored = genericDataService.replace(key,
|
queryParamColumnUnderscored = genericDataService.replace(key,
|
||||||
space, underscore);
|
space, underscore);
|
||||||
for (ResultsetColumnHeader columnHeader : columnHeaders) {
|
for (ResultsetColumnHeader columnHeader : columnHeaders) {
|
||||||
|
|||||||
Reference in New Issue
Block a user