WIP data tables
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package org.mifosng.platform.api;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
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.UriInfo;
|
||||
|
||||
import org.mifosng.platform.api.data.DatatableData;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
|
||||
import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
|
||||
@@ -42,6 +45,21 @@ public class DataTableApiResource {
|
||||
@Autowired
|
||||
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
|
||||
@Path("{datatable}/{id}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON })
|
||||
@@ -49,7 +67,6 @@ public class DataTableApiResource {
|
||||
public String getDatatable(@PathParam("datatable") final String datatable,
|
||||
@PathParam("id") final Long id,
|
||||
@QueryParam("sqlFields") final String sqlFields,
|
||||
@QueryParam("sqlSearch") final String sqlSearch,
|
||||
@QueryParam("sqlOrder") final String sqlOrder,
|
||||
@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
|
||||
* objects rather than a generic resultset String resultStr =
|
||||
* this.readWriteNonCoreDataService
|
||||
* .retrieveDataTableJSONObject(datatable, id, sqlFields, sqlSearch,
|
||||
* sqlOrder);
|
||||
* .retrieveDataTableJSONObject(datatable, id, sqlFields, sqlOrder);
|
||||
*/
|
||||
|
||||
GenericResultsetData results = this.readWriteNonCoreDataService
|
||||
.retrieveDataTableGenericResultSet(datatable, id, sqlFields,
|
||||
sqlSearch, sqlOrder);
|
||||
sqlOrder);
|
||||
|
||||
boolean prettyPrints = ApiParameterHelper.prettyPrint(uriInfo
|
||||
.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.ClientData;
|
||||
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.DepositProductData;
|
||||
import org.mifosng.platform.api.data.FundData;
|
||||
@@ -34,6 +35,8 @@ public interface ApiJsonSerializerService {
|
||||
|
||||
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 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.ClientData;
|
||||
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.DepositProductData;
|
||||
import org.mifosng.platform.api.data.FundData;
|
||||
@@ -192,6 +193,15 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
|
||||
return helper.serializedJsonFrom(gsonDeserializer,
|
||||
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
|
||||
public String serializePermissionDataToJson(final boolean prettyPrint,
|
||||
|
||||
+5
-2
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||
import org.mifosng.platform.api.data.DatatableData;
|
||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||
|
||||
public interface ReadWriteNonCoreDataService {
|
||||
@@ -15,10 +16,12 @@ public interface ReadWriteNonCoreDataService {
|
||||
void updateExtraData(String type, String set, Long id,
|
||||
Map<String, String> queryParams);
|
||||
|
||||
List<DatatableData> retrieveDatatableNames(String appTable);
|
||||
|
||||
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 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.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.ResultsetColumnHeader;
|
||||
import org.mifosng.platform.api.data.ResultsetColumnValue;
|
||||
@@ -475,13 +476,64 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
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
|
||||
public String retrieveDataTableJSONObject(String datatable, Long id,
|
||||
String sqlFields, String sqlSearch, String sqlOrder) {
|
||||
String sqlFields, String sqlOrder) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
GenericResultsetData result = retrieveDataTableGenericResultSet(
|
||||
datatable, id, sqlFields, sqlSearch, sqlOrder);
|
||||
datatable, id, sqlFields, sqlOrder);
|
||||
|
||||
String jsonString = generateJsonFromGenericResultsetData(result);
|
||||
|
||||
@@ -493,7 +545,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
|
||||
@Override
|
||||
public GenericResultsetData retrieveDataTableGenericResultSet(
|
||||
String datatable, Long id, String sqlFields, String sqlSearch,
|
||||
String datatable, Long id, String sqlFields,
|
||||
String sqlOrder) {
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
@@ -517,8 +569,6 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
||||
|
||||
sql = sql + " from " + datatable + " where " + fkField + " = " + id;
|
||||
|
||||
if (sqlSearch != null)
|
||||
sql = sql + " and ( " + sqlSearch + ")";
|
||||
if (sqlOrder != null)
|
||||
sql = sql + " order by " + sqlOrder;
|
||||
logger.info(sql);
|
||||
|
||||
Reference in New Issue
Block a user