WIP data tables
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package org.mifosng.platform.api;
|
package org.mifosng.platform.api;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
@@ -10,6 +12,7 @@ import javax.ws.rs.core.Context;
|
|||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
|
import org.mifosng.platform.api.data.DatatableData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
|
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
|
||||||
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
|
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
|
||||||
@@ -42,6 +45,21 @@ public class DataTableApiResource {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ApiJsonSerializerService apiJsonSerializerService;
|
private ApiJsonSerializerService apiJsonSerializerService;
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
|
public String datasets(@QueryParam("appTable") final String appTable,
|
||||||
|
@Context final UriInfo uriInfo) {
|
||||||
|
|
||||||
|
List<DatatableData> result = this.readWriteNonCoreDataService
|
||||||
|
.retrieveDatatableNames(appTable);
|
||||||
|
|
||||||
|
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo
|
||||||
|
.getQueryParameters());
|
||||||
|
return this.apiJsonSerializerService.serializeDatatableDataToJson(
|
||||||
|
prettyPrint, result);
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("{datatable}/{id}")
|
@Path("{datatable}/{id}")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@@ -49,7 +67,6 @@ public class DataTableApiResource {
|
|||||||
public String getDatatable(@PathParam("datatable") final String datatable,
|
public String getDatatable(@PathParam("datatable") final String datatable,
|
||||||
@PathParam("id") final Long id,
|
@PathParam("id") final Long id,
|
||||||
@QueryParam("sqlFields") final String sqlFields,
|
@QueryParam("sqlFields") final String sqlFields,
|
||||||
@QueryParam("sqlSearch") final String sqlSearch,
|
|
||||||
@QueryParam("sqlOrder") final String sqlOrder,
|
@QueryParam("sqlOrder") final String sqlOrder,
|
||||||
@Context final UriInfo uriInfo) {
|
@Context final UriInfo uriInfo) {
|
||||||
|
|
||||||
@@ -59,13 +76,12 @@ public class DataTableApiResource {
|
|||||||
* Dont use this for now... but its the code for returning data as json
|
* Dont use this for now... but its the code for returning data as json
|
||||||
* objects rather than a generic resultset String resultStr =
|
* objects rather than a generic resultset String resultStr =
|
||||||
* this.readWriteNonCoreDataService
|
* this.readWriteNonCoreDataService
|
||||||
* .retrieveDataTableJSONObject(datatable, id, sqlFields, sqlSearch,
|
* .retrieveDataTableJSONObject(datatable, id, sqlFields, sqlOrder);
|
||||||
* sqlOrder);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GenericResultsetData results = this.readWriteNonCoreDataService
|
GenericResultsetData results = this.readWriteNonCoreDataService
|
||||||
.retrieveDataTableGenericResultSet(datatable, id, sqlFields,
|
.retrieveDataTableGenericResultSet(datatable, id, sqlFields,
|
||||||
sqlSearch, sqlOrder);
|
sqlOrder);
|
||||||
|
|
||||||
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
||||||
.getQueryParameters());
|
.getQueryParameters());
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package org.mifosng.platform.api.data;
|
||||||
|
|
||||||
|
public class DatatableData {
|
||||||
|
|
||||||
|
private final String applicationTableName;
|
||||||
|
private final String registeredTableName;
|
||||||
|
private final String registeredTableLabel;
|
||||||
|
|
||||||
|
public DatatableData(final String applicationTableName,
|
||||||
|
final String registeredTableName, final String registeredTableLabel) {
|
||||||
|
this.applicationTableName = applicationTableName;
|
||||||
|
this.registeredTableName = registeredTableName;
|
||||||
|
this.registeredTableLabel = registeredTableLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getApplicationTableName() {
|
||||||
|
return applicationTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRegisteredTableName() {
|
||||||
|
return registeredTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRegisteredTableLabel() {
|
||||||
|
return registeredTableLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+3
@@ -10,6 +10,7 @@ import org.mifosng.platform.api.data.ChargeData;
|
|||||||
import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
|
import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
|
||||||
import org.mifosng.platform.api.data.ClientData;
|
import org.mifosng.platform.api.data.ClientData;
|
||||||
import org.mifosng.platform.api.data.ConfigurationData;
|
import org.mifosng.platform.api.data.ConfigurationData;
|
||||||
|
import org.mifosng.platform.api.data.DatatableData;
|
||||||
import org.mifosng.platform.api.data.DepositAccountData;
|
import org.mifosng.platform.api.data.DepositAccountData;
|
||||||
import org.mifosng.platform.api.data.DepositProductData;
|
import org.mifosng.platform.api.data.DepositProductData;
|
||||||
import org.mifosng.platform.api.data.FundData;
|
import org.mifosng.platform.api.data.FundData;
|
||||||
@@ -34,6 +35,8 @@ public interface ApiJsonSerializerService {
|
|||||||
|
|
||||||
String serializeAdditionalFieldsSetDataToJson(boolean prettyPrint, Collection<AdditionalFieldsSetData> result);
|
String serializeAdditionalFieldsSetDataToJson(boolean prettyPrint, Collection<AdditionalFieldsSetData> result);
|
||||||
|
|
||||||
|
String serializeDatatableDataToJson(boolean prettyPrint, Collection<DatatableData> result);
|
||||||
|
|
||||||
String serializePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<PermissionData> permissions);
|
String serializePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<PermissionData> permissions);
|
||||||
|
|
||||||
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<RoleData> roles);
|
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<RoleData> roles);
|
||||||
|
|||||||
+10
@@ -12,6 +12,7 @@ import org.mifosng.platform.api.data.ChargeData;
|
|||||||
import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
|
import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
|
||||||
import org.mifosng.platform.api.data.ClientData;
|
import org.mifosng.platform.api.data.ClientData;
|
||||||
import org.mifosng.platform.api.data.ConfigurationData;
|
import org.mifosng.platform.api.data.ConfigurationData;
|
||||||
|
import org.mifosng.platform.api.data.DatatableData;
|
||||||
import org.mifosng.platform.api.data.DepositAccountData;
|
import org.mifosng.platform.api.data.DepositAccountData;
|
||||||
import org.mifosng.platform.api.data.DepositProductData;
|
import org.mifosng.platform.api.data.DepositProductData;
|
||||||
import org.mifosng.platform.api.data.FundData;
|
import org.mifosng.platform.api.data.FundData;
|
||||||
@@ -193,6 +194,15 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
|
|||||||
datasets.toArray(new AdditionalFieldsSetData[datasets.size()]));
|
datasets.toArray(new AdditionalFieldsSetData[datasets.size()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String serializeDatatableDataToJson(
|
||||||
|
final boolean prettyPrint,
|
||||||
|
final Collection<DatatableData> datatables) {
|
||||||
|
final Gson gsonDeserializer = helper.createGsonBuilder(prettyPrint);
|
||||||
|
return helper.serializedJsonFrom(gsonDeserializer,
|
||||||
|
datatables.toArray(new DatatableData[datatables.size()]));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String serializePermissionDataToJson(final boolean prettyPrint,
|
public String serializePermissionDataToJson(final boolean prettyPrint,
|
||||||
final Set<String> responseParameters,
|
final Set<String> responseParameters,
|
||||||
|
|||||||
+5
-2
@@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||||
|
import org.mifosng.platform.api.data.DatatableData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
|
|
||||||
public interface ReadWriteNonCoreDataService {
|
public interface ReadWriteNonCoreDataService {
|
||||||
@@ -15,10 +16,12 @@ 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);
|
||||||
|
|
||||||
|
List<DatatableData> retrieveDatatableNames(String appTable);
|
||||||
|
|
||||||
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
GenericResultsetData retrieveDataTableGenericResultSet(String datatable,
|
||||||
Long id, String sqlFields, String sqlSearch, String sqlOrder);
|
Long id, String sqlFields, String sqlOrder);
|
||||||
|
|
||||||
String retrieveDataTableJSONObject(String datatable, Long id,
|
String retrieveDataTableJSONObject(String datatable, Long id,
|
||||||
String sqlFields, String sqlSearch, String sqlOrder);
|
String sqlFields, String sqlOrder);
|
||||||
|
|
||||||
}
|
}
|
||||||
+55
-5
@@ -11,6 +11,7 @@ import javax.sql.rowset.CachedRowSet;
|
|||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||||
|
import org.mifosng.platform.api.data.DatatableData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||||
import org.mifosng.platform.api.data.ResultsetColumnValue;
|
import org.mifosng.platform.api.data.ResultsetColumnValue;
|
||||||
@@ -475,13 +476,64 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
return type + "_x" + set;
|
return type + "_x" + set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DatatableData> retrieveDatatableNames(String appTable) {
|
||||||
|
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
String andClause;
|
||||||
|
if (appTable == null) {
|
||||||
|
andClause = "";
|
||||||
|
} else {
|
||||||
|
andClause = " and application_table_name = '" + appTable + "'";
|
||||||
|
}
|
||||||
|
// PERMITTED datatables
|
||||||
|
String sql = "select application_table_name, registered_table_name, registered_table_label"
|
||||||
|
+ " from x_registered_table "
|
||||||
|
+ " where exists"
|
||||||
|
+ " (select 'f'"
|
||||||
|
+ " from m_appuser_role ur "
|
||||||
|
+ " join m_role r on r.id = ur.role_id"
|
||||||
|
+ " left join m_role_permission rp on rp.role_id = r.id"
|
||||||
|
+ " left join m_permission p on p.id = rp.permission_id"
|
||||||
|
+ " where ur.appuser_id = "
|
||||||
|
+ context.authenticatedUser().getId()
|
||||||
|
+ " and (p.code in ('ALL_FUNCTIONS', 'ALL_FUNCTIONS_READ') or p.code = concat('CAN_READ_', registered_table_name))) "
|
||||||
|
+ andClause + " order by application_table_name, registered_table_name";
|
||||||
|
|
||||||
|
//sql = genericDataService.wrapSQL(sql);
|
||||||
|
String sqlErrorMsg = "Application Table Name: " + appTable + " sql: "
|
||||||
|
+ sql;
|
||||||
|
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
|
||||||
|
sqlErrorMsg);
|
||||||
|
|
||||||
|
List<DatatableData> datatables = new ArrayList<DatatableData>();
|
||||||
|
try {
|
||||||
|
while (rs.next()) {
|
||||||
|
datatables.add(new DatatableData(rs
|
||||||
|
.getString("application_table_name"), rs.getString("registered_table_name"), rs
|
||||||
|
.getString("registered_table_label")));
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
|
e.getMessage(), sqlErrorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
long elapsed = System.currentTimeMillis() - startTime;
|
||||||
|
logger.info("FINISHING retrieveDatatableNames: Elapsed Time: "
|
||||||
|
+ elapsed);
|
||||||
|
|
||||||
|
return datatables;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String retrieveDataTableJSONObject(String datatable, Long id,
|
public String retrieveDataTableJSONObject(String datatable, Long id,
|
||||||
String sqlFields, String sqlSearch, String sqlOrder) {
|
String sqlFields, String sqlOrder) {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
||||||
datatable, id, sqlFields, sqlSearch, sqlOrder);
|
datatable, id, sqlFields, sqlOrder);
|
||||||
|
|
||||||
String jsonString = generateJsonFromGenericResultsetData(result);
|
String jsonString = generateJsonFromGenericResultsetData(result);
|
||||||
|
|
||||||
@@ -493,7 +545,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GenericResultsetData retrieveDataTableGenericResultSet(
|
public GenericResultsetData retrieveDataTableGenericResultSet(
|
||||||
String datatable, Long id, String sqlFields, String sqlSearch,
|
String datatable, Long id, String sqlFields,
|
||||||
String sqlOrder) {
|
String sqlOrder) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -517,8 +569,6 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
sql = sql + " from " + datatable + " where " + fkField + " = " + id;
|
sql = sql + " from " + datatable + " where " + fkField + " = " + id;
|
||||||
|
|
||||||
if (sqlSearch != null)
|
|
||||||
sql = sql + " and ( " + sqlSearch + ")";
|
|
||||||
if (sqlOrder != null)
|
if (sqlOrder != null)
|
||||||
sql = sql + " order by " + sqlOrder;
|
sql = sql + " order by " + sqlOrder;
|
||||||
logger.info(sql);
|
logger.info(sql);
|
||||||
|
|||||||
Reference in New Issue
Block a user