From f2ca1746a41b2691822c4c96e29b5475a0ca674f Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Wed, 22 Aug 2012 00:37:18 +0100 Subject: [PATCH] from MIFOSX-38, tidy up serialization for client and group areas. --- .../platform/api/ClientsApiResource.java | 12 +- .../platform/api/GroupsApiResource.java | 21 ++-- .../ApiDataConversionService.java | 10 -- .../ApiDataConversionServiceImpl.java | 104 ------------------ .../ApiJsonSerializerService.java | 13 +++ .../GoogleGsonApiJsonSerializerService.java | 48 ++++++++ 6 files changed, 79 insertions(+), 129 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/ClientsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/ClientsApiResource.java index df07a6c4f..214503a94 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/ClientsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/ClientsApiResource.java @@ -29,6 +29,7 @@ import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.NoteData; import org.mifosng.platform.api.data.OfficeLookup; 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.client.service.ClientReadPlatformService; import org.mifosng.platform.client.service.ClientWritePlatformService; @@ -57,6 +58,9 @@ public class ClientsApiResource { @Autowired private OfficeReadPlatformService officeReadPlatformService; + + @Autowired + private ApiJsonSerializerService apiJsonSerializerService; @GET @Consumes({MediaType.APPLICATION_JSON}) @@ -83,7 +87,7 @@ public class ClientsApiResource { Collection clients = this.clientReadPlatformService.retrieveAllIndividualClients(extraCriteria); - return this.apiDataConversionService.convertClientDataToJson(prettyPrint, responseParameters, clients.toArray(new ClientData[clients.size()])); + return this.apiJsonSerializerService.serializeClientDataToJson(prettyPrint, responseParameters, clients); } private String getClientCriteria(String sqlSearch, Integer officeId, @@ -150,7 +154,7 @@ public class ClientsApiResource { responseParameters.add("allowedOffices"); } - return this.apiDataConversionService.convertClientDataToJson(prettyPrint, responseParameters, clientData); + return this.apiJsonSerializerService.serializeClientDataToJson(prettyPrint, responseParameters, clientData); } @GET @@ -171,7 +175,7 @@ public class ClientsApiResource { ClientData clientData = this.clientReadPlatformService.retrieveNewClientDetails(); - return this.apiDataConversionService.convertClientDataToJson(prettyPrint, responseParameters, clientData); + return this.apiJsonSerializerService.serializeClientDataToJson(prettyPrint, responseParameters, clientData); } @POST @@ -230,7 +234,7 @@ public class ClientsApiResource { ClientLoanAccountSummaryCollectionData clientAccount = this.clientReadPlatformService.retrieveClientAccountDetails(clientId); - return this.apiDataConversionService.convertClientLoanAccountSummaryCollectionDataToJson(prettyPrint, responseParameters, clientAccount); + return this.apiJsonSerializerService.serializeClientLoanAccountSummaryCollectionDataToJson(prettyPrint, responseParameters, clientAccount); } @GET diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java index 4a1946cfc..a6d1c743c 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/GroupsApiResource.java @@ -23,6 +23,7 @@ import org.mifosng.platform.api.data.ClientLookup; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.GroupData; 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.client.service.ClientReadPlatformService; import org.mifosng.platform.group.service.GroupReadPlatformService; @@ -48,13 +49,16 @@ public class GroupsApiResource { @Autowired private ApiDataConversionService apiDataConversionService; + @Autowired + private ApiJsonSerializerService apiJsonSerializerService; + @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public String retrieveAllGroups(@Context final UriInfo uriInfo){ Set typicalResponseParameters = new HashSet( - Arrays.asList("id", "name", "externalId", "clientMembers") + Arrays.asList("id", "name", "externalId") ); Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); @@ -66,11 +70,7 @@ public class GroupsApiResource { Collection groups = this.groupReadPlatformService.retrieveAllGroups(); - for (GroupData group : groups){ - group.setClientMembers(this.groupReadPlatformService.retrieveClientMembers(group.getId())); - } - - return this.apiDataConversionService.convertGroupDataToJson(prettyPrint, responseParameters, groups.toArray(new GroupData[groups.size()])); + return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, groups); } @GET @@ -103,7 +103,7 @@ public class GroupsApiResource { responseParameters.add("allowedClients"); } - return this.apiDataConversionService.convertGroupDataToJson(prettyPrint, responseParameters, group); + return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, group); } @GET @@ -112,7 +112,7 @@ public class GroupsApiResource { @Produces({MediaType.APPLICATION_JSON}) public String newGroupDetails(@Context final UriInfo uriInfo) { - Set typicalResponseParameters = new HashSet(Arrays.asList("id", "name", "externalId", "clientMembers", "allowedClients")); + Set typicalResponseParameters = new HashSet(Arrays.asList("id", "name", "externalId", "allowedClients")); Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); if (responseParameters.isEmpty()) { @@ -122,7 +122,7 @@ public class GroupsApiResource { GroupData groupData = this.groupReadPlatformService.retrieveNewGroupDetails(); - return this.apiDataConversionService.convertGroupDataToJson(prettyPrint, responseParameters, groupData); + return this.apiJsonSerializerService.serializeGroupDataToJson(prettyPrint, responseParameters, groupData); } @POST @@ -160,5 +160,4 @@ public class GroupsApiResource { return Response.ok().entity(entityIdentifier).build(); } - -} +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionService.java index e248d75b0..1c1ec4c50 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionService.java @@ -22,9 +22,6 @@ import org.mifosng.platform.api.commands.SavingProductCommand; import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.data.ChargeData; -import org.mifosng.platform.api.data.ClientData; -import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; -import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanTransactionData; import org.mifosng.platform.api.data.NewLoanData; @@ -33,13 +30,6 @@ import org.mifosng.platform.api.data.NoteData; public interface ApiDataConversionService { // - String convertClientDataToJson(boolean prettyPrint, Set responseParameters, ClientData... clients); - - String convertClientLoanAccountSummaryCollectionDataToJson(boolean prettyPrint, Set responseParameters, - ClientLoanAccountSummaryCollectionData clientAccountsData); - - String convertGroupDataToJson(boolean prettyPrint, Set responseParameters, GroupData... groups); - String convertNoteDataToJson(boolean prettyPrint, Set responseParameters, NoteData note); String convertNoteDataToJson(boolean prettyPrint, Set responseParameters, Collection notes); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java index b843e217f..4fdef123f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiDataConversionServiceImpl.java @@ -39,9 +39,6 @@ import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.data.ApiParameterError; import org.mifosng.platform.api.data.ChargeData; -import org.mifosng.platform.api.data.ClientData; -import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; -import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanTransactionData; import org.mifosng.platform.api.data.NewLoanData; @@ -225,107 +222,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { return json; } - @Override - public String convertClientLoanAccountSummaryCollectionDataToJson(final boolean prettyPrint, final Set responseParameters, - final ClientLoanAccountSummaryCollectionData clientAccountsData) { - final Set supportedParameters = new HashSet( - Arrays.asList("pendingApprovalLoans", "awaitingDisbursalLoans", "openLoans", "closedLoans", - "anyLoanCount", "pendingApprovalLoanCount", "awaitingDisbursalLoanCount", "activeLoanCount", "closedLoanCount") - ); - - final Set parameterNamesToSkip = new HashSet(); - - if (!responseParameters.isEmpty()) { - if (!supportedParameters.containsAll(responseParameters)) { - throw new UnsupportedParameterException(new ArrayList(responseParameters)); - } - - parameterNamesToSkip.addAll(supportedParameters); - parameterNamesToSkip.removeAll(responseParameters); - } - - ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip); - - GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy); - builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter()); - if (prettyPrint) { - builder.setPrettyPrinting(); - } - Gson gsonDeserializer = builder.create(); - - return gsonDeserializer.toJson(clientAccountsData); - } - - @Override - public String convertClientDataToJson(final boolean prettyPrint, final Set responseParameters, final ClientData... clients) { - final Set supportedParameters = new HashSet( - Arrays.asList("id", "officeId", "officeName", "externalId", "firstname", "lastname", "joinedDate", "displayName", "allowedOffices") - ); - - final Set parameterNamesToSkip = new HashSet(); - - if (!responseParameters.isEmpty()) { - if (!supportedParameters.containsAll(responseParameters)) { - throw new UnsupportedParameterException(new ArrayList(responseParameters)); - } - - parameterNamesToSkip.addAll(supportedParameters); - parameterNamesToSkip.removeAll(responseParameters); - } - - ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip); - - GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy); - builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter()); - if (prettyPrint) { - builder.setPrettyPrinting(); - } - Gson gsonDeserializer = builder.create(); - - String json = ""; - if (clients != null && clients.length == 1) { - json = gsonDeserializer.toJson(clients[0]); - } else { - json = gsonDeserializer.toJson(clients); - } - - return json; - } - - @Override - public String convertGroupDataToJson(boolean prettyPrint, Set responseParameters, GroupData... groups) { - final Set supportedParameters = new HashSet( - Arrays.asList("id", "name", "externalId", "clientMembers", "allowedClients") - ); - - final Set parameterNamesToSkip = new HashSet(); - - if (!responseParameters.isEmpty()) { - if (!supportedParameters.containsAll(responseParameters)) { - throw new UnsupportedParameterException(new ArrayList(responseParameters)); - } - - parameterNamesToSkip.addAll(supportedParameters); - parameterNamesToSkip.removeAll(responseParameters); - } - - ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip); - GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy); - if (prettyPrint) { - builder.setPrettyPrinting(); - } - Gson gsonDeserializer = builder.create(); - String json = ""; - - if (groups != null && groups.length == 1) { - json = gsonDeserializer.toJson(groups[0]); - } else { - json = gsonDeserializer.toJson(groups); - } - - return json; - } - @Override public ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json) { if (StringUtils.isBlank(json)) { diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJsonSerializerService.java index 403257fa4..1932c8525 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJsonSerializerService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJsonSerializerService.java @@ -6,11 +6,14 @@ import java.util.Set; import org.mifosng.platform.api.data.AdditionalFieldsSetData; import org.mifosng.platform.api.data.AppUserData; import org.mifosng.platform.api.data.AuthenticatedUserData; +import org.mifosng.platform.api.data.ClientData; +import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.DepositAccountData; import org.mifosng.platform.api.data.DepositProductData; import org.mifosng.platform.api.data.FundData; import org.mifosng.platform.api.data.GenericResultsetData; +import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeTransactionData; @@ -63,4 +66,14 @@ public interface ApiJsonSerializerService { String serializeDepositAccountDataToJson(boolean prettyPrint, Set responseParameters, Collection accounts); String serializeDepositAccountDataToJson(boolean prettyPrint, Set responseParameters, DepositAccountData account); + + String serializeClientDataToJson(boolean prettyPrint, Set responseParameters, Collection clients); + + String serializeClientDataToJson(boolean prettyPrint, Set responseParameters, ClientData clientData); + + String serializeClientLoanAccountSummaryCollectionDataToJson(boolean prettyPrint, Set responseParameters, ClientLoanAccountSummaryCollectionData clientAccount); + + String serializeGroupDataToJson(boolean prettyPrint, Set responseParameters, Collection groups); + + String serializeGroupDataToJson(boolean prettyPrint, Set responseParameters, GroupData group); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java index c0bc28a6a..af5bddd24 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java @@ -8,11 +8,14 @@ import java.util.Set; import org.mifosng.platform.api.data.AdditionalFieldsSetData; import org.mifosng.platform.api.data.AppUserData; import org.mifosng.platform.api.data.AuthenticatedUserData; +import org.mifosng.platform.api.data.ClientData; +import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.DepositAccountData; import org.mifosng.platform.api.data.DepositProductData; import org.mifosng.platform.api.data.FundData; import org.mifosng.platform.api.data.GenericResultsetData; +import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeTransactionData; @@ -76,6 +79,20 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ ) ); + private static final Set CLIENT_DATA_PARAMETERS = new HashSet( + Arrays.asList("id", "officeId", "officeName", "externalId", "firstname", "lastname", "joinedDate", "displayName", "allowedOffices") + ); + + private static final Set CLIENT_ACCOUNTS_DATA_PARAMETERS = new HashSet( + Arrays.asList("pendingApprovalLoans", "awaitingDisbursalLoans", "openLoans", "closedLoans", + "anyLoanCount", "pendingApprovalLoanCount", "awaitingDisbursalLoanCount", "activeLoanCount", "closedLoanCount") + ); + + private static final Set GROUP_DATA_PARAMETERS = new HashSet( + Arrays.asList("id", "name", "externalId", "clientMembers", "allowedClients") + ); + + private final GoogleGsonSerializerHelper helper; @Autowired @@ -214,4 +231,35 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(SAVINGS_DEPOSIT_ACCOUNT_DATA_PARAMETERS, prettyPrint, responseParameters); return helper.serializedJsonFrom(gsonDeserializer, account); } + + @Override + public String serializeClientDataToJson(final boolean prettyPrint, final Set responseParameters, final Collection clients) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(CLIENT_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, clients.toArray(new ClientData[clients.size()])); + } + + @Override + public String serializeClientDataToJson(final boolean prettyPrint, final Set responseParameters, final ClientData client) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(CLIENT_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, client); + } + + @Override + public String serializeClientLoanAccountSummaryCollectionDataToJson(final boolean prettyPrint, final Set responseParameters, + final ClientLoanAccountSummaryCollectionData clientAccount) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(CLIENT_ACCOUNTS_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, clientAccount); + } + + @Override + public String serializeGroupDataToJson(final boolean prettyPrint, final Set responseParameters, final Collection groups) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(GROUP_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, groups.toArray(new GroupData[groups.size()])); + } + + @Override + public String serializeGroupDataToJson(final boolean prettyPrint, final Set responseParameters, final GroupData group) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(GROUP_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, group); + } } \ No newline at end of file