WIP data tables
This commit is contained in:
@@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.DELETE;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
@@ -73,11 +74,11 @@ public class DataTableApiResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("{datatable}/{id}")
|
@Path("{datatable}/{appTableId}")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public String getDatatable(@PathParam("datatable") final String datatable,
|
public String getDatatable(@PathParam("datatable") final String datatable,
|
||||||
@PathParam("id") final Long id,
|
@PathParam("appTableId") final Long appTableId,
|
||||||
@QueryParam("sqlFields") final String sqlFields,
|
@QueryParam("sqlFields") final String sqlFields,
|
||||||
@QueryParam("sqlOrder") final String sqlOrder,
|
@QueryParam("sqlOrder") final String sqlOrder,
|
||||||
@Context final UriInfo uriInfo) {
|
@Context final UriInfo uriInfo) {
|
||||||
@@ -92,8 +93,8 @@ public class DataTableApiResource {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
GenericResultsetData results = this.readWriteNonCoreDataService
|
GenericResultsetData results = this.readWriteNonCoreDataService
|
||||||
.retrieveDataTableGenericResultSet(datatable, id, sqlFields,
|
.retrieveDataTableGenericResultSet(datatable, appTableId,
|
||||||
sqlOrder);
|
sqlFields, sqlOrder);
|
||||||
|
|
||||||
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
||||||
.getQueryParameters());
|
.getQueryParameters());
|
||||||
@@ -103,21 +104,63 @@ public class DataTableApiResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("{datatable}/{id}")
|
@Path("{datatable}/{appTableId}")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
public Response newDatatableEntry(
|
public Response newDatatableEntry(
|
||||||
@PathParam("datatable") final String datatable,
|
@PathParam("datatable") final String datatable,
|
||||||
@PathParam("id") final Long id, final String jsonRequestBody) {
|
@PathParam("appTableId") final Long appTableId,
|
||||||
|
final String jsonRequestBody) {
|
||||||
|
|
||||||
checkUserPermissionForDatatable(datatable, "CREATE");
|
checkUserPermissionForDatatable(datatable, "CREATE");
|
||||||
Map<String, String> queryParams = getQueryParamsFromJsonRequestBody(jsonRequestBody);
|
Map<String, String> queryParams = getQueryParamsFromJsonRequestBody(jsonRequestBody);
|
||||||
|
|
||||||
this.readWriteNonCoreDataService.newDatatableEntry(datatable, id,
|
this.readWriteNonCoreDataService.newDatatableEntry(datatable,
|
||||||
queryParams);
|
appTableId, queryParams);
|
||||||
|
|
||||||
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
||||||
Long.valueOf(id));
|
Long.valueOf(appTableId));
|
||||||
|
|
||||||
|
return Response.ok().entity(entityIdentifier).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("{datatable}/{appTableId}")
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
|
public Response deleteDatatableEntries(
|
||||||
|
@PathParam("datatable") final String datatable,
|
||||||
|
@PathParam("appTableId") final Long appTableId) {
|
||||||
|
|
||||||
|
checkUserPermissionForDatatable(datatable, "DELETE");
|
||||||
|
|
||||||
|
this.readWriteNonCoreDataService.deleteDatatableEntries(datatable,
|
||||||
|
appTableId);
|
||||||
|
|
||||||
|
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
||||||
|
Long.valueOf(appTableId));
|
||||||
|
|
||||||
|
return Response.ok().entity(entityIdentifier).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("{datatable}/{appTableId}/{datatableId}")
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
|
public Response deleteDatatableEntries(
|
||||||
|
@PathParam("datatable") final String datatable,
|
||||||
|
@PathParam("appTableId") final Long appTableId,
|
||||||
|
@PathParam("datatableId") final Long datatableId) {
|
||||||
|
|
||||||
|
checkUserPermissionForDatatable(datatable, "DELETE");
|
||||||
|
|
||||||
|
this.readWriteNonCoreDataService.deleteDatatableEntry(datatable,
|
||||||
|
appTableId, datatableId);
|
||||||
|
|
||||||
|
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
||||||
|
Long.valueOf(appTableId));
|
||||||
|
|
||||||
return Response.ok().entity(entityIdentifier).build();
|
return Response.ok().entity(entityIdentifier).build();
|
||||||
|
|
||||||
|
|||||||
+9
-3
@@ -16,15 +16,21 @@ public interface ReadWriteNonCoreDataService {
|
|||||||
void updateExtraData(String type, String set, Long id,
|
void updateExtraData(String type, String set, Long id,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
|
/* remove the additional fields functionality above when datatables complete */
|
||||||
List<DatatableData> retrieveDatatableNames(String appTable);
|
List<DatatableData> retrieveDatatableNames(String appTable);
|
||||||
|
|
||||||
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
||||||
Long id, String sqlFields, String sqlOrder);
|
Long appTableId, String sqlFields, String sqlOrder);
|
||||||
|
|
||||||
String retrieveDataTableJSONObject(String datatable, Long id,
|
String retrieveDataTableJSONObject(String datatable, Long appTableId,
|
||||||
String sqlFields, String sqlOrder);
|
String sqlFields, String sqlOrder);
|
||||||
|
|
||||||
void newDatatableEntry(String datatable, Long id,
|
void newDatatableEntry(String datatable, Long appTableId,
|
||||||
Map<String, String> queryParams);
|
Map<String, String> queryParams);
|
||||||
|
|
||||||
|
void deleteDatatableEntries(String datatable, Long appTableId);
|
||||||
|
|
||||||
|
void deleteDatatableEntry(String datatable, Long appTableId,
|
||||||
|
Long datatableId);
|
||||||
|
|
||||||
}
|
}
|
||||||
+88
-32
@@ -427,10 +427,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
+ " not found");
|
+ " not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMainResourceExistsWithinScope(String tableName, Long id) {
|
private void checkMainResourceExistsWithinScope(String tableName,
|
||||||
|
Long appTableId) {
|
||||||
|
|
||||||
String unscopedSql = "select t.id from " + tableName
|
String unscopedSql = "select t.id from " + tableName
|
||||||
+ " t ${dataScopeCriteria} where t.id = " + id;
|
+ " t ${dataScopeCriteria} where t.id = " + appTableId;
|
||||||
|
|
||||||
String sql = dataScopedSQL(unscopedSql, tableName);
|
String sql = dataScopedSQL(unscopedSql, tableName);
|
||||||
|
|
||||||
@@ -438,10 +439,10 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
+ sql);
|
+ sql);
|
||||||
|
|
||||||
if (rs.size() == 0)
|
if (rs.size() == 0)
|
||||||
throw new DataTableNotFoundException(tableName, id);
|
throw new DataTableNotFoundException(tableName, appTableId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String dataScopedSQL(String unscopedSQL, String type) {
|
private String dataScopedSQL(String unscopedSQL, String appTable) {
|
||||||
String dataScopeCriteria = null;
|
String dataScopeCriteria = null;
|
||||||
/*
|
/*
|
||||||
* unfortunately have to, one way or another, be able to restrict data
|
* unfortunately have to, one way or another, be able to restrict data
|
||||||
@@ -452,11 +453,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
AppUser currentUser = context.authenticatedUser();
|
AppUser currentUser = context.authenticatedUser();
|
||||||
if (type.equalsIgnoreCase("m_client")) {
|
if (appTable.equalsIgnoreCase("m_client")) {
|
||||||
dataScopeCriteria = " join m_office o on o.id = t.office_id and o.hierarchy like '"
|
dataScopeCriteria = " join m_office o on o.id = t.office_id and o.hierarchy like '"
|
||||||
+ currentUser.getOffice().getHierarchy() + "%'";
|
+ currentUser.getOffice().getHierarchy() + "%'";
|
||||||
}
|
}
|
||||||
if (type.equalsIgnoreCase("m_loan")) {
|
if (appTable.equalsIgnoreCase("m_loan")) {
|
||||||
dataScopeCriteria = " join m_client c on c.id = t.client_id "
|
dataScopeCriteria = " join m_client c on c.id = t.client_id "
|
||||||
+ " join m_office o on o.id = c.office_id and o.hierarchy like '"
|
+ " join m_office o on o.id = c.office_id and o.hierarchy like '"
|
||||||
+ currentUser.getOffice().getHierarchy() + "%'";
|
+ currentUser.getOffice().getHierarchy() + "%'";
|
||||||
@@ -464,7 +465,8 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
if (dataScopeCriteria == null) {
|
if (dataScopeCriteria == null) {
|
||||||
throw new PlatformDataIntegrityException(
|
throw new PlatformDataIntegrityException(
|
||||||
"error.msg.invalid.dataScopeCriteria", "Type: " + type
|
"error.msg.invalid.dataScopeCriteria",
|
||||||
|
"Application Table: " + appTable
|
||||||
+ " not catered for in data Scoping");
|
+ " not catered for in data Scoping");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,25 +481,62 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
// only exclusively datatable functions below here
|
// only exclusively datatable functions below here
|
||||||
@Override
|
@Override
|
||||||
public void newDatatableEntry(String datatable, Long id,
|
public void newDatatableEntry(String datatable, Long appTableId,
|
||||||
Map<String, String> queryParams) {
|
Map<String, String> queryParams) {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
String applicationTableName = getApplicationTableName(datatable);
|
String appTable = getWithinScopeApplicationTableName(datatable,
|
||||||
|
appTableId);
|
||||||
checkMainResourceExistsWithinScope(applicationTableName, id);
|
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(datatable);
|
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(datatable);
|
||||||
|
|
||||||
String sql = getAddSql(columnHeaders, datatable,
|
String sql = getAddSql(columnHeaders, datatable, getFKField(appTable),
|
||||||
getFKField(applicationTableName), id, queryParams);
|
appTableId, queryParams);
|
||||||
|
|
||||||
String sqlErrorMsg = "SQL: " + sql;
|
genericDataService.updateSQL(sql, "SQL: " + sql);
|
||||||
genericDataService.updateSQL(sql, sqlErrorMsg);
|
|
||||||
|
|
||||||
long elapsed = System.currentTimeMillis() - startTime;
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
logger.info("FINISHING newDatatableEntry: Elapsed Time: "
|
logger.info("FINISHING newDatatableEntry: Elapsed Time: "
|
||||||
+ elapsed + " - datatable: " + datatable + " id: " + id);
|
+ elapsed + " - datatable: " + datatable + " id: "
|
||||||
|
+ appTableId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDatatableEntries(String datatable, Long appTableId) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
String appTable = getWithinScopeApplicationTableName(datatable,
|
||||||
|
appTableId);
|
||||||
|
|
||||||
|
String sql = getDeleteEntriesSql(datatable, getFKField(appTable),
|
||||||
|
appTableId);
|
||||||
|
|
||||||
|
genericDataService.updateSQL(sql, "SQL: " + sql);
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
logger.info("FINISHING deleteDatatableEntries: Elapsed Time: "
|
||||||
|
+ elapsed + " - datatable: " + datatable
|
||||||
|
+ " App Table Id: " + appTableId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteDatatableEntry(String datatable, Long appTableId,
|
||||||
|
Long datatableId) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
getWithinScopeApplicationTableName(datatable, appTableId);
|
||||||
|
|
||||||
|
String sql = getDeleteEntrySql(datatable, datatableId);
|
||||||
|
|
||||||
|
genericDataService.updateSQL(sql, "SQL: " + sql);
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
logger.info("FINISHING deleteDatatableEntry: Elapsed Time: "
|
||||||
|
+ elapsed + " - datatable: " + datatable
|
||||||
|
+ " App Table Id: " + appTableId + " Data Table Id: "
|
||||||
|
+ datatableId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -555,12 +594,12 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String retrieveDataTableJSONObject(String datatable, Long id,
|
public String retrieveDataTableJSONObject(String datatable,
|
||||||
String sqlFields, String sqlOrder) {
|
Long appTableId, String sqlFields, String sqlOrder) {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
||||||
datatable, id, sqlFields, sqlOrder);
|
datatable, appTableId, sqlFields, sqlOrder);
|
||||||
|
|
||||||
String jsonString = generateJsonFromGenericResultsetData(result);
|
String jsonString = generateJsonFromGenericResultsetData(result);
|
||||||
|
|
||||||
@@ -572,13 +611,12 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GenericResultsetData retrieveDataTableGenericResultSet(
|
public GenericResultsetData retrieveDataTableGenericResultSet(
|
||||||
String datatable, Long id, String sqlFields, String sqlOrder) {
|
String datatable, Long appTableId, String sqlFields, String sqlOrder) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
String applicationTableName = getApplicationTableName(datatable);
|
String appTable = getWithinScopeApplicationTableName(datatable,
|
||||||
|
appTableId);
|
||||||
checkMainResourceExistsWithinScope(applicationTableName, id);
|
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(datatable);
|
List<ResultsetColumnHeader> columnHeaders = getDatatableResultsetColumnHeaders(datatable);
|
||||||
|
|
||||||
@@ -588,8 +626,8 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
else
|
else
|
||||||
sql = sql + " * ";
|
sql = sql + " * ";
|
||||||
|
|
||||||
sql = sql + " from " + datatable + " where "
|
sql = sql + " from " + datatable + " where " + getFKField(appTable)
|
||||||
+ getFKField(applicationTableName) + " = " + id;
|
+ " = " + appTableId;
|
||||||
if (sqlOrder != null)
|
if (sqlOrder != null)
|
||||||
sql = sql + " order by " + sqlOrder;
|
sql = sql + " order by " + sqlOrder;
|
||||||
logger.info(sql);
|
logger.info(sql);
|
||||||
@@ -640,7 +678,8 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getApplicationTableName(String datatable) {
|
private String getWithinScopeApplicationTableName(String datatable,
|
||||||
|
Long appTableId) {
|
||||||
String sql = "SELECT application_table_name FROM x_registered_table where registered_table_name = '"
|
String sql = "SELECT application_table_name FROM x_registered_table where registered_table_name = '"
|
||||||
+ datatable + "'";
|
+ datatable + "'";
|
||||||
|
|
||||||
@@ -652,7 +691,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
rs.next();
|
rs.next();
|
||||||
return rs.getString("application_table_name");
|
String appTable = rs.getString("application_table_name");
|
||||||
|
|
||||||
|
checkMainResourceExistsWithinScope(appTable, appTableId);
|
||||||
|
|
||||||
|
return appTable;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
e.getMessage());
|
e.getMessage());
|
||||||
@@ -818,14 +861,14 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getAddSql(List<ResultsetColumnHeader> columnHeaders,
|
private String getAddSql(List<ResultsetColumnHeader> columnHeaders,
|
||||||
String datatable, String FKField, Long id,
|
String datatable, String FKField, Long appTableId,
|
||||||
Map<String, String> queryParams) {
|
Map<String, String> queryParams) {
|
||||||
|
|
||||||
Map<String, String> affectedColumns = getAffectedColumns(columnHeaders,
|
Map<String, String> affectedColumns = getAffectedColumns(columnHeaders,
|
||||||
queryParams);
|
queryParams);
|
||||||
|
|
||||||
String pValueWrite = "";
|
String pValueWrite = "";
|
||||||
String saveSql = "";
|
String addSql = "";
|
||||||
String singleQuote = "'";
|
String singleQuote = "'";
|
||||||
|
|
||||||
String insertColumns = "";
|
String insertColumns = "";
|
||||||
@@ -847,11 +890,11 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
selectColumns += "," + pValueWrite + " as " + columnName;
|
selectColumns += "," + pValueWrite + " as " + columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
saveSql = "insert into `" + datatable + "` (`" + FKField + "` "
|
addSql = "insert into `" + datatable + "` (`" + FKField + "` "
|
||||||
+ insertColumns + ")" + " select " + id + " as id"
|
+ insertColumns + ")" + " select " + appTableId + " as id"
|
||||||
+ selectColumns;
|
+ selectColumns;
|
||||||
|
|
||||||
return saveSql;
|
return addSql;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, String> getAffectedColumns(
|
private Map<String, String> getAffectedColumns(
|
||||||
@@ -899,4 +942,17 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
return affectedColumns;
|
return affectedColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getDeleteEntriesSql(String datatable, String FKField,
|
||||||
|
Long appTableId) {
|
||||||
|
|
||||||
|
return "delete from `" + datatable + "` where `" + FKField + "` = "
|
||||||
|
+ appTableId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getDeleteEntrySql(String datatable, Long datatableId) {
|
||||||
|
|
||||||
|
return "delete from `" + datatable + "` where `id` = " + datatableId;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user