From 75ba8097618b50ca93885197ebd789aec4dc382c Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Tue, 21 Aug 2012 21:47:07 +0100 Subject: [PATCH] from MIFOSX-38, tidy up serialization of deposit accounts. --- .../api/DepositAccountsApiResource.java | 10 ++-- .../ApiDataConversionService.java | 3 -- .../ApiDataConversionServiceImpl.java | 53 ------------------- .../ApiJsonSerializerService.java | 5 ++ .../GoogleGsonApiJsonSerializerService.java | 23 ++++++++ 5 files changed, 35 insertions(+), 59 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java index c05c251a6..d914ffca3 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java @@ -26,6 +26,7 @@ import org.mifosng.platform.api.data.DepositProductLookup; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.EnumOptionData; 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.loan.domain.PeriodFrequencyType; import org.mifosng.platform.saving.service.DepositAccountReadPlatformService; @@ -53,6 +54,9 @@ public class DepositAccountsApiResource { @Autowired private ApiDataConversionService apiDataConversionService; + @Autowired + private ApiJsonSerializerService apiJsonSerializerService; + @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @@ -99,7 +103,7 @@ public class DepositAccountsApiResource { Collection accounts = this.depositAccountReadPlatformService.retrieveAllDepositAccounts(); - return this.apiDataConversionService.convertDepositAccountDataToJson(prettyPrint, responseParameters, accounts.toArray(new DepositAccountData[accounts.size()])); + return this.apiJsonSerializerService.serializeDepositAccountDataToJson(prettyPrint, responseParameters, accounts); } @GET @@ -129,7 +133,7 @@ public class DepositAccountsApiResource { account = handleTemplateRelatedData(responseParameters, account); } - return this.apiDataConversionService.convertDepositAccountDataToJson(prettyPrint, responseParameters, account); + return this.apiJsonSerializerService.serializeDepositAccountDataToJson(prettyPrint, responseParameters, account); } @GET @@ -160,7 +164,7 @@ public class DepositAccountsApiResource { account = handleTemplateRelatedData(responseParameters, account); - return this.apiDataConversionService.convertDepositAccountDataToJson(prettyPrint, responseParameters, account); + return this.apiJsonSerializerService.serializeDepositAccountDataToJson(prettyPrint, responseParameters, account); } @DELETE 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 b2c84e285..e248d75b0 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 @@ -24,7 +24,6 @@ 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.DepositAccountData; import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanTransactionData; @@ -45,8 +44,6 @@ public interface ApiDataConversionService { String convertNoteDataToJson(boolean prettyPrint, Set responseParameters, Collection notes); - String convertDepositAccountDataToJson(boolean prettyPrint, Set responseParameters, DepositAccountData... accounts); - String convertNewLoanDataToJson(boolean prettyPrint, Set responseParameters, NewLoanData newLoanData); String convertLoanAccountDataToJson(boolean prettyPrint, Set responseParameters, LoanAccountData loanAccount); 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 65e1c0368..b843e217f 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 @@ -41,7 +41,6 @@ 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.DepositAccountData; import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanTransactionData; @@ -1296,56 +1295,4 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { interestCompoundedEvery, interestCompoundedEveryPeriodType, canRenew, canPreClose, preClosureInterestRate); } - - @Override - public String convertDepositAccountDataToJson( - final boolean prettyPrint, - final Set responseParameters, - final DepositAccountData... accounts) { - - Set supportedParameters = new HashSet( - Arrays.asList("productOptions", "interestCompoundedEveryPeriodTypeOptions", - "createdOn", "lastModifedOn", - "id", "externalId", "clientId", "clientName", "productId", "productName", - "currency", "deposit", "maturityInterestRate", "tenureInMonths", - "interestCompoundedEvery", "interestCompoundedEveryPeriodType", - "renewalAllowed","preClosureAllowed","preClosureInterestRate" - ) - ); - - final Set parameterNamesToSkip = new HashSet(); - - if (!responseParameters.isEmpty()) { - - // strip out all know support params from expected response to see if unsupported parameters requested for response. - Set differentParametersSet = new HashSet(responseParameters); - differentParametersSet.removeAll(supportedParameters); - - if (!differentParametersSet.isEmpty()) { - throw new UnsupportedParameterException(new ArrayList(differentParametersSet)); - } - - parameterNamesToSkip.addAll(supportedParameters); - parameterNamesToSkip.removeAll(responseParameters); - } - - ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip); - - GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy); - builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter()); - builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); - if (prettyPrint) { - builder.setPrettyPrinting(); - } - Gson gsonDeserializer = builder.create(); - - String json = ""; - if (accounts != null && accounts.length == 1) { - json = gsonDeserializer.toJson(accounts[0]); - } else { - json = gsonDeserializer.toJson(accounts); - } - - return json; - } } \ No newline at end of file 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 b0e4b338f..403257fa4 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 @@ -7,6 +7,7 @@ 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.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; @@ -58,4 +59,8 @@ public interface ApiJsonSerializerService { String serializeDepositProductDataToJson(boolean prettyPrint, Set responseParameters, Collection products); String serializeDepositProductDataToJson(boolean prettyPrint, Set responseParameters, DepositProductData depositProduct); + + String serializeDepositAccountDataToJson(boolean prettyPrint, Set responseParameters, Collection accounts); + + String serializeDepositAccountDataToJson(boolean prettyPrint, Set responseParameters, DepositAccountData account); } \ 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 e6ead34e9..c0bc28a6a 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 @@ -9,6 +9,7 @@ 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.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; @@ -64,6 +65,16 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ "maturityMaxInterestRate", "interestCompoundedEvery", "interestCompoundedEveryPeriodType", "renewalAllowed","preClosureAllowed","preClosureInterestRate") ); + + private static final Set SAVINGS_DEPOSIT_ACCOUNT_DATA_PARAMETERS = new HashSet( + Arrays.asList("productOptions", "interestCompoundedEveryPeriodTypeOptions", + "createdOn", "lastModifedOn", + "id", "externalId", "clientId", "clientName", "productId", "productName", + "currency", "deposit", "maturityInterestRate", "tenureInMonths", + "interestCompoundedEvery", "interestCompoundedEveryPeriodType", + "renewalAllowed","preClosureAllowed","preClosureInterestRate" + ) + ); private final GoogleGsonSerializerHelper helper; @@ -191,4 +202,16 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(SAVINGS_DEPOSIT_PRODUCT_DATA_PARAMETERS, prettyPrint, responseParameters); return helper.serializedJsonFrom(gsonDeserializer, depositProduct); } + + @Override + public String serializeDepositAccountDataToJson(final boolean prettyPrint, final Set responseParameters, final Collection accounts) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(SAVINGS_DEPOSIT_ACCOUNT_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, accounts.toArray(new DepositAccountData[accounts.size()])); + } + + @Override + public String serializeDepositAccountDataToJson(final boolean prettyPrint, final Set responseParameters, final DepositAccountData account) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(SAVINGS_DEPOSIT_ACCOUNT_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, account); + } } \ No newline at end of file