from MIFOSX-38, tidy up serialisation around additional data and reports.2

This commit is contained in:
Keith Woodlock
2012-08-21 20:45:44 +01:00
parent c7c5198206
commit b44e53c3b7
10 changed files with 71 additions and 106 deletions
@@ -192,28 +192,26 @@ public class ReadExtraDataAndReportingServiceImpl implements
private GenericResultsetData fillReportingGenericResultSet(final String sql) { private GenericResultsetData fillReportingGenericResultSet(final String sql) {
GenericResultsetData result = new GenericResultsetData();
Connection db_connection = null; Connection db_connection = null;
Statement db_statement = null; Statement db_statement = null;
try { try {
db_connection = dataSource.getConnection(); db_connection = dataSource.getConnection();
db_statement = db_connection.createStatement(); db_statement = db_connection.createStatement();
ResultSet rs = db_statement.executeQuery(sql); ResultSet rs = db_statement.executeQuery(sql);
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
ResultSetMetaData rsmd = rs.getMetaData(); ResultSetMetaData rsmd = rs.getMetaData();
String columnName = null; String columnName = null;
String columnValue = null; String columnValue = null;
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
for (int i = 0; i < rsmd.getColumnCount(); i++) { for (int i = 0; i < rsmd.getColumnCount(); i++) {
ResultsetColumnHeader rsch = new ResultsetColumnHeader(); ResultsetColumnHeader rsch = new ResultsetColumnHeader();
rsch.setColumnName(rsmd.getColumnName(i + 1)); rsch.setColumnName(rsmd.getColumnName(i + 1));
rsch.setColumnType(rsmd.getColumnTypeName(i + 1)); rsch.setColumnType(rsmd.getColumnTypeName(i + 1));
columnHeaders.add(rsch); columnHeaders.add(rsch);
} }
result.setColumnHeaders(columnHeaders);
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
ResultsetDataRow resultsetDataRow; ResultsetDataRow resultsetDataRow;
while (rs.next()) { while (rs.next()) {
resultsetDataRow = new ResultsetDataRow(); resultsetDataRow = new ResultsetDataRow();
@@ -226,16 +224,13 @@ public class ReadExtraDataAndReportingServiceImpl implements
resultsetDataRow.setRow(columnValues); resultsetDataRow.setRow(columnValues);
resultsetDataRows.add(resultsetDataRow); resultsetDataRows.add(resultsetDataRow);
} }
result.setData(resultsetDataRows);
return new GenericResultsetData(columnHeaders, resultsetDataRows);
} catch (SQLException e) { } catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error", throw new PlatformDataIntegrityException("error.msg.sql.error", e.getMessage(), "Sql: " + sql);
e.getMessage(), "Sql: " + sql);
} finally { } finally {
dbClose(db_statement, db_connection); dbClose(db_statement, db_connection);
} }
return result;
} }
private String getSQLtoRun(final String name, final String type, private String getSQLtoRun(final String name, final String type,
@@ -470,10 +465,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
return result; return result;
} }
private GenericResultsetData fillExtraDataGenericResultSet(String type, private GenericResultsetData fillExtraDataGenericResultSet(final String type, final String set, final Long id) {
String set, Long id) {
GenericResultsetData result = new GenericResultsetData();
Connection db_connection = null; Connection db_connection = null;
Statement db_statement1 = null; Statement db_statement1 = null;
@@ -487,11 +479,14 @@ public class ReadExtraDataAndReportingServiceImpl implements
ResultSet rsmd = db_statement1.executeQuery(sql); ResultSet rsmd = db_statement1.executeQuery(sql);
List<ResultsetColumnHeader> columnHeaders = null;
List<ResultsetDataRow> resultsetDataRows = null;
if (rsmd.next()) { if (rsmd.next()) {
String fullDatasetName = getFullDatasetName(type, set); String fullDatasetName = getFullDatasetName(type, set);
db_statement2 = db_connection.createStatement(); db_statement2 = db_connection.createStatement();
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>(); columnHeaders = new ArrayList<ResultsetColumnHeader>();
Boolean firstColumn = true; Boolean firstColumn = true;
Integer allowedListId; Integer allowedListId;
String selectFieldList = ""; String selectFieldList = "";
@@ -528,8 +523,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
} }
columnHeaders.add(rsch); columnHeaders.add(rsch);
} while (rsmd.next()); } while (rsmd.next());
result.setColumnHeaders(columnHeaders);
sql = "select " + selectFieldList + " from `" + type sql = "select " + selectFieldList + " from `" + type
+ "` t left join `" + fullDatasetName + "` t left join `" + fullDatasetName
+ "` s on s.id = t.id " + " where t.id = " + id; + "` s on s.id = t.id " + " where t.id = " + id;
@@ -540,7 +534,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
if (rs.next()) { if (rs.next()) {
String columnName = null; String columnName = null;
String columnValue = null; String columnValue = null;
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>(); resultsetDataRows = new ArrayList<ResultsetDataRow>();
ResultsetDataRow resultsetDataRow; ResultsetDataRow resultsetDataRow;
do { do {
resultsetDataRow = new ResultsetDataRow(); resultsetDataRow = new ResultsetDataRow();
@@ -554,13 +548,15 @@ public class ReadExtraDataAndReportingServiceImpl implements
resultsetDataRow.setRow(columnValues); resultsetDataRow.setRow(columnValues);
resultsetDataRows.add(resultsetDataRow); resultsetDataRows.add(resultsetDataRow);
} while (rs.next()); } while (rs.next());
result.setData(resultsetDataRows);
} else { } else {
throw new AdditionalFieldsNotFoundException(type, id); throw new AdditionalFieldsNotFoundException(type, id);
} }
} else { } else {
throw new AdditionalFieldsNotFoundException(type, set); throw new AdditionalFieldsNotFoundException(type, set);
} }
return new GenericResultsetData(columnHeaders, resultsetDataRows);
} catch (SQLException e) { } catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error", throw new PlatformDataIntegrityException("error.msg.sql.error",
e.getMessage(), "Additional Fields Type: " + type e.getMessage(), "Additional Fields Type: " + type
@@ -570,8 +566,6 @@ public class ReadExtraDataAndReportingServiceImpl implements
dbClose(db_statement3, null); dbClose(db_statement3, null);
dbClose(db_statement1, db_connection); dbClose(db_statement1, db_connection);
} }
return result;
} }
private String getFullDatasetName(final String type, final String set) { private String getFullDatasetName(final String type, final String set) {
@@ -780,7 +774,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
} }
private void dbClose(Statement db_statement, Connection db_connection) { private void dbClose(Statement db_statement, Connection db_connection) {
logger.info("dbClose"); logger.debug("dbClose");
try { try {
if (db_statement != null) { if (db_statement != null) {
db_statement.close(); db_statement.close();
@@ -791,8 +785,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
db_connection = null; db_connection = null;
} }
} catch (SQLException e) { } catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error", throw new PlatformDataIntegrityException("error.msg.sql.error", e.getMessage(), "Error closing database connection");
e.getMessage(), "Error closing database connection");
} }
} }
@@ -28,7 +28,7 @@ import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.ApiParameterError; import org.mifosng.platform.api.data.ApiParameterError;
import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.EntityIdentifier;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService; import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
import org.mifosng.platform.api.infrastructure.ApiParameterHelper; import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.exceptions.PlatformApiDataValidationException; import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -48,7 +48,7 @@ public class AdditionalFieldsApiResource {
private ReadExtraDataAndReportingService readExtraDataAndReportingService; private ReadExtraDataAndReportingService readExtraDataAndReportingService;
@Autowired @Autowired
private ApiDataConversionService apiDataConversionService; private ApiJsonSerializerService apiJsonSerializerService;
@GET @GET
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@@ -58,7 +58,7 @@ public class AdditionalFieldsApiResource {
List<AdditionalFieldsSetData> result = this.readExtraDataAndReportingService.retrieveExtraDatasetNames(type); List<AdditionalFieldsSetData> result = this.readExtraDataAndReportingService.retrieveExtraDatasetNames(type);
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
return this.apiDataConversionService.convertAdditionalFieldsSetDataToJson(prettyPrint, result.toArray(new AdditionalFieldsSetData[result.size()])); return this.apiJsonSerializerService.serializeAdditionalFieldsSetDataToJson(prettyPrint, result);
} }
@GET @GET
@@ -73,7 +73,7 @@ public class AdditionalFieldsApiResource {
GenericResultsetData result = this.readExtraDataAndReportingService.retrieveExtraData(type, set, id); GenericResultsetData result = this.readExtraDataAndReportingService.retrieveExtraData(type, set, id);
boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
return this.apiDataConversionService.convertGenericResultsetDataToJson(prettyPrint, result); return this.apiJsonSerializerService.serializeGenericResultsetDataToJson(prettyPrint, result);
} catch (InvalidSqlException e) { } catch (InvalidSqlException e) {
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
ApiParameterError error = ApiParameterError.parameterError( ApiParameterError error = ApiParameterError.parameterError(
@@ -9,17 +9,12 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
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 org.mifosng.platform.InvalidSqlException; import org.mifosng.platform.InvalidSqlException;
import org.mifosng.platform.ReadExtraDataAndReportingService; import org.mifosng.platform.ReadExtraDataAndReportingService;
import org.mifosng.platform.api.data.ApiParameterError; import org.mifosng.platform.api.data.ApiParameterError;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService;
import org.mifosng.platform.exceptions.PlatformApiDataValidationException; import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -29,15 +24,11 @@ import org.springframework.stereotype.Component;
@Scope("singleton") @Scope("singleton")
public class DataTableApiResource { public class DataTableApiResource {
private final static Logger logger = LoggerFactory.getLogger(DataTableApiResource.class); // private final static Logger logger = LoggerFactory.getLogger(DataTableApiResource.class);
@Autowired @Autowired
private ReadExtraDataAndReportingService readExtraDataAndReportingService; private ReadExtraDataAndReportingService readExtraDataAndReportingService;
@Autowired
private ApiDataConversionService apiDataConversionService;
@GET @GET
@Path("{datatable}") @Path("{datatable}")
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@@ -45,8 +36,9 @@ public class DataTableApiResource {
public String extraData(@PathParam("datatable") final String datatable, public String extraData(@PathParam("datatable") final String datatable,
@QueryParam("sqlFields") final String sqlFields, @QueryParam("sqlFields") final String sqlFields,
@QueryParam("sqlSearch") final String sqlSearch, @QueryParam("sqlSearch") final String sqlSearch,
@QueryParam("sqlOrder") final String sqlOrder, @QueryParam("sqlOrder") final String sqlOrder
@Context final UriInfo uriInfo) { // ,@Context final UriInfo uriInfo
) {
try { try {
//GenericResultsetData result = this.readExtraDataAndReportingService.retrieveDataTable(datatable); //GenericResultsetData result = this.readExtraDataAndReportingService.retrieveDataTable(datatable);
@@ -18,7 +18,7 @@ import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.ReadExtraDataAndReportingService; import org.mifosng.platform.ReadExtraDataAndReportingService;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService; import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService;
import org.mifosng.platform.api.infrastructure.ApiParameterHelper; import org.mifosng.platform.api.infrastructure.ApiParameterHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
@@ -33,7 +33,7 @@ public class ReportsApiResource {
private ReadExtraDataAndReportingService readExtraDataAndReportingService; private ReadExtraDataAndReportingService readExtraDataAndReportingService;
@Autowired @Autowired
private ApiDataConversionService apiDataConversionService; private ApiJsonSerializerService apiJsonSerializerService;
@GET @GET
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@@ -48,7 +48,7 @@ public class ReportsApiResource {
if (!exportCsv) { if (!exportCsv) {
GenericResultsetData result = this.readExtraDataAndReportingService.retrieveGenericResultset(".", ".", extractedQueryParams); GenericResultsetData result = this.readExtraDataAndReportingService.retrieveGenericResultset(".", ".", extractedQueryParams);
final String json = this.apiDataConversionService.convertGenericResultsetDataToJson(prettyPrint, result); final String json = this.apiJsonSerializerService.serializeGenericResultsetDataToJson(prettyPrint, result);
return Response.ok().entity(json).build(); return Response.ok().entity(json).build();
} }
@@ -93,7 +93,7 @@ public class ReportsApiResource {
GenericResultsetData result = this.readExtraDataAndReportingService.retrieveGenericResultset(reportName, parameterTypeValue, reportParams); GenericResultsetData result = this.readExtraDataAndReportingService.retrieveGenericResultset(reportName, parameterTypeValue, reportParams);
final String json = this.apiDataConversionService.convertGenericResultsetDataToJson(prettyPrint, result); final String json = this.apiJsonSerializerService.serializeGenericResultsetDataToJson(prettyPrint, result);
return Response.ok().entity(json).type(MediaType.APPLICATION_JSON).build(); return Response.ok().entity(json).type(MediaType.APPLICATION_JSON).build();
} }
@@ -1,5 +1,8 @@
package org.mifosng.platform.api.data; package org.mifosng.platform.api.data;
/**
* Immutable data object for 'additional data'.
*/
public class AdditionalFieldsSetData { public class AdditionalFieldsSetData {
private final Integer id; private final Integer id;
@@ -1,30 +1,25 @@
package org.mifosng.platform.api.data; package org.mifosng.platform.api.data;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Immutable data object for generic resultset data.
*/
public class GenericResultsetData { public class GenericResultsetData {
private List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>(); private final List<ResultsetColumnHeader> columnHeaders;
private List<ResultsetDataRow> data = new ArrayList<ResultsetDataRow>(); private final List<ResultsetDataRow> data;
public GenericResultsetData() { public GenericResultsetData(final List<ResultsetColumnHeader> columnHeaders, final List<ResultsetDataRow> resultsetDataRows) {
this.columnHeaders = columnHeaders;
this.data = resultsetDataRows;
} }
public List<ResultsetColumnHeader> getColumnHeaders() { public List<ResultsetColumnHeader> getColumnHeaders() {
return columnHeaders; return columnHeaders;
} }
public void setColumnHeaders(List<ResultsetColumnHeader> columnHeaders) {
this.columnHeaders = columnHeaders;
}
public List<ResultsetDataRow> getData() { public List<ResultsetDataRow> getData() {
return data; return data;
} }
public void setData(List<ResultsetDataRow> data) {
this.data = data;
}
} }
@@ -21,13 +21,11 @@ import org.mifosng.platform.api.commands.RoleCommand;
import org.mifosng.platform.api.commands.SavingProductCommand; import org.mifosng.platform.api.commands.SavingProductCommand;
import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand;
import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.commands.UserCommand;
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData;
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.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanAccountData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
@@ -63,10 +61,6 @@ public interface ApiDataConversionService {
String convertLoanAccountDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanAccountData loanAccount); String convertLoanAccountDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanAccountData loanAccount);
String convertLoanTransactionDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanTransactionData... transactions); String convertLoanTransactionDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanTransactionData... transactions);
String convertAdditionalFieldsSetDataToJson(boolean prettyPrint, AdditionalFieldsSetData... additionalFields);
String convertGenericResultsetDataToJson(boolean prettyPrint, GenericResultsetData result);
// //
ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json); ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json);
@@ -37,14 +37,12 @@ import org.mifosng.platform.api.commands.RoleCommand;
import org.mifosng.platform.api.commands.SavingProductCommand; import org.mifosng.platform.api.commands.SavingProductCommand;
import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand;
import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.commands.UserCommand;
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.ApiParameterError; import org.mifosng.platform.api.data.ApiParameterError;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData;
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.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanAccountData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
@@ -77,34 +75,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
gsonConverter = new Gson(); gsonConverter = new Gson();
} }
@Override
public String convertGenericResultsetDataToJson(final boolean prettyPrint, final GenericResultsetData result) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter());
builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter());
if (prettyPrint) {
builder.setPrettyPrinting();
}
Gson gsonDeserializer = builder.create();
return gsonDeserializer.toJson(result);
}
@Override
public String convertAdditionalFieldsSetDataToJson(final boolean prettyPrint, final AdditionalFieldsSetData... additionalFields) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter());
builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter());
if (prettyPrint) {
builder.setPrettyPrinting();
}
Gson gsonDeserializer = builder.create();
// even if only a single result, its passed back as an array.
return gsonDeserializer.toJson(additionalFields);
}
@Override @Override
public String convertLoanTransactionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final LoanTransactionData... transactions) { public String convertLoanTransactionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final LoanTransactionData... transactions) {
final Set<String> supportedParameters = new HashSet<String>( final Set<String> supportedParameters = new HashSet<String>(
@@ -3,10 +3,12 @@ package org.mifosng.platform.api.infrastructure;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Set;
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.AppUserData; import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.AuthenticatedUserData; import org.mifosng.platform.api.data.AuthenticatedUserData;
import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.FundData; import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
@@ -14,6 +16,12 @@ import org.mifosng.platform.api.data.RoleData;
public interface ApiJsonSerializerService { public interface ApiJsonSerializerService {
String serializeAuthenticatedUserDataToJson(boolean prettyPrint, AuthenticatedUserData authenticatedUserData);
String serializeGenericResultsetDataToJson(boolean prettyPrint, GenericResultsetData result);
String serializeAdditionalFieldsSetDataToJson(boolean prettyPrint, Collection<AdditionalFieldsSetData> 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);
@@ -24,8 +32,6 @@ public interface ApiJsonSerializerService {
String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, AppUserData user); String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, AppUserData user);
String serializeAuthenticatedUserDataToJson(boolean prettyPrint, AuthenticatedUserData authenticatedUserData);
String serializeOfficeDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<OfficeData> offices); String serializeOfficeDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<OfficeData> offices);
String serializeOfficeDataToJson(boolean prettyPrint, Set<String> responseParameters, OfficeData office); String serializeOfficeDataToJson(boolean prettyPrint, Set<String> responseParameters, OfficeData office);
@@ -5,10 +5,12 @@ import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.AppUserData; import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.AuthenticatedUserData; import org.mifosng.platform.api.data.AuthenticatedUserData;
import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.FundData; import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
@@ -34,9 +36,7 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
"hierarchy", "parentId", "parentName", "allowedParents") "hierarchy", "parentId", "parentName", "allowedParents")
); );
private static final Set<String> OFFICE_TRANSACTIONS_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("transactionDate", "allowedOffices", "currencyOptions")); private static final Set<String> OFFICE_TRANSACTIONS_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("transactionDate", "allowedOffices", "currencyOptions"));
private static final Set<String> CONFIGURATION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("selectedCurrencyOptions", "currencyOptions")); private static final Set<String> CONFIGURATION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("selectedCurrencyOptions", "currencyOptions"));
private static final Set<String> FUND_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "externalId")); private static final Set<String> FUND_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "externalId"));
private final GoogleGsonSerializerHelper helper; private final GoogleGsonSerializerHelper helper;
@@ -46,6 +46,24 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
this.helper = helper; this.helper = helper;
} }
@Override
public String serializeAuthenticatedUserDataToJson(final boolean prettyPrint, final AuthenticatedUserData authenticatedUserData) {
final Gson gsonDeserializer = helper.createGsonBuilder(prettyPrint);
return helper.serializedJsonFrom(gsonDeserializer, authenticatedUserData);
}
@Override
public String serializeGenericResultsetDataToJson(final boolean prettyPrint, final GenericResultsetData resultsetData) {
final Gson gsonDeserializer = helper.createGsonBuilder(prettyPrint);
return helper.serializedJsonFrom(gsonDeserializer, resultsetData);
}
@Override
public String serializeAdditionalFieldsSetDataToJson(final boolean prettyPrint, final Collection<AdditionalFieldsSetData> datasets) {
final Gson gsonDeserializer = helper.createGsonBuilder(prettyPrint);
return helper.serializedJsonFrom(gsonDeserializer, datasets.toArray(new AdditionalFieldsSetData[datasets.size()]));
}
@Override @Override
public String serializePermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<PermissionData> permissions) { public String serializePermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<PermissionData> permissions) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(PERMISSION_DATA_PARAMETERS, prettyPrint, responseParameters); final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(PERMISSION_DATA_PARAMETERS, prettyPrint, responseParameters);
@@ -76,12 +94,6 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
return helper.serializedJsonFrom(gsonDeserializer, user); return helper.serializedJsonFrom(gsonDeserializer, user);
} }
@Override
public String serializeAuthenticatedUserDataToJson(final boolean prettyPrint, final AuthenticatedUserData authenticatedUserData) {
final Gson gsonDeserializer = helper.createGsonBuilder(prettyPrint);
return helper.serializedJsonFrom(gsonDeserializer, authenticatedUserData);
}
@Override @Override
public String serializeOfficeDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<OfficeData> offices) { public String serializeOfficeDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<OfficeData> offices) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(OFFICE_DATA_PARAMETERS, prettyPrint, responseParameters); final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(OFFICE_DATA_PARAMETERS, prettyPrint, responseParameters);