From 36ea860dfc9695af57140134845563ead27cb861 Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Sun, 22 Jul 2012 12:48:14 +0100 Subject: [PATCH] tidy up json serialization for loan account areas. --- .../platform/api/LoansApiResource.java | 140 +++++++++--------- .../platform/api/data/LoanAccountData.java | 2 - .../platform/api/data/LoanPermissionData.java | 88 ++++------- .../api/data/LoanTransactionData.java | 6 - .../platform/api/data/NewLoanData.java | 5 +- .../ApiDataConversionService.java | 9 ++ .../ApiDataConversionServiceImpl.java | 108 ++++++++++++++ 7 files changed, 216 insertions(+), 142 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java index 60b576864..6eaadb04f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/LoansApiResource.java @@ -1,6 +1,9 @@ package org.mifosng.platform.api; +import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -28,12 +31,12 @@ import org.mifosng.platform.api.data.LoanAccountSummaryData; import org.mifosng.platform.api.data.LoanBasicDetailsData; import org.mifosng.platform.api.data.LoanPermissionData; import org.mifosng.platform.api.data.LoanRepaymentPeriodData; +import org.mifosng.platform.api.data.LoanRepaymentTransactionData; import org.mifosng.platform.api.data.LoanSchedule; import org.mifosng.platform.api.data.LoanTransactionData; -import org.mifosng.platform.api.data.LoanRepaymentTransactionData; import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.infrastructure.ApiDataConversionService; -import org.mifosng.platform.api.infrastructure.ApiJSONFormattingService; +import org.mifosng.platform.api.infrastructure.ApiParameterHelper; import org.mifosng.platform.exceptions.UnrecognizedQueryParamException; import org.mifosng.platform.loan.service.CalculationPlatformService; import org.mifosng.platform.loan.service.LoanReadPlatformService; @@ -47,14 +50,6 @@ import org.springframework.stereotype.Component; @Scope("singleton") public class LoansApiResource { - private String filterName = "myFilter"; - private String allowedFieldList = ""; - private String loanFilterName = "loanFilter"; - private String loanAllowedFieldList = ""; - private String loanRepaymentFilterName = "loanRepaymentFilter"; - private String loanRepaymentDefaultFieldList = "transactionType,date,total"; - private String loanRepaymentAllowedFieldList = ""; - @Autowired private LoanReadPlatformService loanReadPlatformService; @@ -67,9 +62,6 @@ public class LoansApiResource { @Autowired private ApiDataConversionService apiDataConversionService; - @Autowired - private ApiJSONFormattingService jsonFormattingService; - @GET @Path("template") @Consumes({ MediaType.APPLICATION_JSON }) @@ -78,14 +70,19 @@ public class LoansApiResource { @QueryParam("clientId") final Long clientId, @QueryParam("productId") final Long productId, @Context final UriInfo uriInfo) { + + Set typicalResponseParameters = new HashSet(Arrays.asList("clientId", "clientName", "productId", "productName", + "selectedProduct", "expectedDisbursementDate", "allowedProducts")); + + Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + if (responseParameters.isEmpty()) { + responseParameters.addAll(typicalResponseParameters); + } + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); + + NewLoanData workflowData = this.loanReadPlatformService.retrieveClientAndProductDetails(clientId, productId); - NewLoanData workflowData = this.loanReadPlatformService - .retrieveClientAndProductDetails(clientId, productId); - - String selectedFields = ""; - return this.jsonFormattingService.convertRequest(workflowData, - filterName, allowedFieldList, selectedFields, - uriInfo.getQueryParameters()); + return this.apiDataConversionService.convertNewLoanDataToJson(prettyPrint, responseParameters, workflowData); } @GET @@ -96,32 +93,36 @@ public class LoansApiResource { @PathParam("loanId") final Long loanId, @Context final UriInfo uriInfo) { - LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService - .retrieveLoanAccountDetails(loanId); + Set typicalResponseParameters = new HashSet( + Arrays.asList("id", "externalId", "fundId", "fundName", "loanProductId", "loanProductName", "principal", "inArrearsTolerance", "numberOfRepayments", + "repaymentEvery", "interestRatePerPeriod", "annualInterestRate", + "repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", + "submittedOnDate", "approvedOnDate", "expectedDisbursementDate", "actualDisbursementDate", + "expectedFirstRepaymentOnDate", "interestChargedFromDate", "closedOnDate", "expectedMaturityDate", + "lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate", + "summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData") + ); + + Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + if (responseParameters.isEmpty()) { + responseParameters.addAll(typicalResponseParameters); + } + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); + + LoanBasicDetailsData loanBasicDetails = this.loanReadPlatformService.retrieveLoanAccountDetails(loanId); - Collection loanRepayments = this.loanReadPlatformService - .retrieveLoanPayments(loanId); - Collection repaymentSchedule = this.loanReadPlatformService - .retrieveRepaymentSchedule(loanId); + Collection loanRepayments = this.loanReadPlatformService.retrieveLoanPayments(loanId); + Collection repaymentSchedule = this.loanReadPlatformService.retrieveRepaymentSchedule(loanId); - LoanAccountSummaryData summary = this.loanReadPlatformService - .retrieveSummary(loanBasicDetails.getPrincipal(), - repaymentSchedule, loanRepayments); + LoanAccountSummaryData summary = this.loanReadPlatformService.retrieveSummary(loanBasicDetails.getPrincipal(), repaymentSchedule, loanRepayments); - LoanPermissionData permissions = this.loanReadPlatformService - .retrieveLoanPermissions(loanBasicDetails, summary - .isWaiveAllowed(loanBasicDetails - .getInArrearsTolerance()), loanRepayments - .size()); + LoanPermissionData permissions = this.loanReadPlatformService.retrieveLoanPermissions(loanBasicDetails, + summary.isWaiveAllowed(loanBasicDetails.getInArrearsTolerance()), + loanRepayments.size()); - LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, - summary, repaymentSchedule, loanRepayments, permissions); - - String selectedFields = ""; - String associatedFields = "summary,repaymentSchedule,loanRepayments,permissions,convenienceData"; - return this.jsonFormattingService.convertRequest(loanAccount, - loanFilterName, loanAllowedFieldList, selectedFields, - associatedFields, uriInfo.getQueryParameters()); + LoanAccountData loanAccount = new LoanAccountData(loanBasicDetails, summary, repaymentSchedule, loanRepayments, permissions); + + return this.apiDataConversionService.convertLoanAccountDataToJson(prettyPrint, responseParameters, loanAccount); } @POST @@ -261,28 +262,27 @@ public class LoansApiResource { @PathParam("loanId") final Long loanId, @QueryParam("command") final String commandParam, @Context final UriInfo uriInfo) { - - String json = ""; - String selectedFields = loanRepaymentDefaultFieldList; - if (is(commandParam, "repayment")) { - LoanTransactionData loanRepaymentData = this.loanReadPlatformService - .retrieveNewLoanRepaymentDetails(loanId); - json = this.jsonFormattingService.convertRequest(loanRepaymentData, - loanRepaymentFilterName, loanRepaymentAllowedFieldList, - selectedFields, uriInfo.getQueryParameters()); - } else if (is(commandParam, "waiver")) { - LoanTransactionData loanWaiverData = this.loanReadPlatformService - .retrieveNewLoanWaiverDetails(loanId); - json = this.jsonFormattingService.convertRequest(loanWaiverData, - loanRepaymentFilterName, loanRepaymentAllowedFieldList, - selectedFields, uriInfo.getQueryParameters()); + + Set typicalResponseParameters = new HashSet( + Arrays.asList("id", "transactionType", "date", "principal", "interest", "total", "totalWaived", "overpaid") + ); + + Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + if (responseParameters.isEmpty()) { + responseParameters.addAll(typicalResponseParameters); } - - if (StringUtils.isBlank(json)) { + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); + + LoanTransactionData transactionData = null; + if (is(commandParam, "repayment")) { + transactionData = this.loanReadPlatformService.retrieveNewLoanRepaymentDetails(loanId); + } else if (is(commandParam, "waiver")) { + transactionData = this.loanReadPlatformService.retrieveNewLoanWaiverDetails(loanId); + } else { throw new UnrecognizedQueryParamException("command", commandParam); } - return json; + return this.apiDataConversionService.convertLoanTransactionDataToJson(prettyPrint, responseParameters, transactionData); } @GET @@ -292,14 +292,20 @@ public class LoansApiResource { public String retrieveTransaction(@PathParam("loanId") final Long loanId, @PathParam("transactionId") final Long transactionId, @Context final UriInfo uriInfo) { + + Set typicalResponseParameters = new HashSet( + Arrays.asList("id", "transactionType", "date", "principal", "interest", "total", "totalWaived", "overpaid") + ); + + Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + if (responseParameters.isEmpty()) { + responseParameters.addAll(typicalResponseParameters); + } + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); + + LoanTransactionData transactionData = this.loanReadPlatformService.retrieveLoanTransactionDetails(loanId, transactionId); - LoanTransactionData loanRepaymentData = this.loanReadPlatformService - .retrieveLoanTransactionDetails(loanId, transactionId); - - String selectedFields = loanRepaymentDefaultFieldList; - return this.jsonFormattingService.convertRequest(loanRepaymentData, - loanRepaymentFilterName, loanRepaymentAllowedFieldList, - selectedFields, uriInfo.getQueryParameters()); + return this.apiDataConversionService.convertLoanTransactionDataToJson(prettyPrint, responseParameters, transactionData); } @POST diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java index f16703ca3..661415a25 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanAccountData.java @@ -3,10 +3,8 @@ package org.mifosng.platform.api.data; import java.math.BigDecimal; import java.util.Collection; -import org.codehaus.jackson.map.annotate.JsonFilter; import org.joda.time.LocalDate; -@JsonFilter("loanFilter") public class LoanAccountData { private Long id; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanPermissionData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanPermissionData.java index 00ff3355a..b3347d2ab 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanPermissionData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanPermissionData.java @@ -2,25 +2,22 @@ package org.mifosng.platform.api.data; public class LoanPermissionData { - private boolean waiveAllowed; - private boolean makeRepaymentAllowed; - private boolean rejectAllowed; - private boolean withdrawnByApplicantAllowed; - private boolean undoApprovalAllowed; - private boolean disbursalAllowed; - private boolean undoDisbursalAllowed; + private final boolean waiveAllowed; + private final boolean makeRepaymentAllowed; + private final boolean rejectAllowed; + private final boolean withdrawnByApplicantAllowed; + private final boolean undoApprovalAllowed; + private final boolean disbursalAllowed; + private final boolean undoDisbursalAllowed; - private boolean pendingApproval; - private boolean waitingForDisbursal; + private final boolean pendingApproval; + private final boolean waitingForDisbursal; + private final boolean anyActionOnLoanAllowed; - protected LoanPermissionData() { - // - } - - public LoanPermissionData(boolean waiveAllowed, - boolean makeRepaymentAllowed, boolean rejectAllowed, - boolean withdrawnByApplicantAllowed, boolean undoApprovalAllowed, - boolean undoDisbursalAllowed, boolean disbursalAllowed, boolean pendingApproval, boolean waitingForDisbursal) { + public LoanPermissionData(final boolean waiveAllowed, + final boolean makeRepaymentAllowed, final boolean rejectAllowed, + final boolean withdrawnByApplicantAllowed, final boolean undoApprovalAllowed, + final boolean undoDisbursalAllowed, final boolean disbursalAllowed, final boolean pendingApproval, final boolean waitingForDisbursal) { this.waiveAllowed = waiveAllowed; this.makeRepaymentAllowed = makeRepaymentAllowed; this.rejectAllowed = rejectAllowed; @@ -30,81 +27,46 @@ public class LoanPermissionData { this.disbursalAllowed = disbursalAllowed; this.pendingApproval = pendingApproval; this.waitingForDisbursal = waitingForDisbursal; - } - - public boolean isAnyActionOnLoanAllowed() { - return isRejectAllowed() || isWithdrawnByApplicantAllowed() || isPendingApproval() || isUndoDisbursalAllowed() || isMakeRepaymentAllowed(); + this.anyActionOnLoanAllowed = isRejectAllowed() || isWithdrawnByApplicantAllowed() || isPendingApproval() || isUndoDisbursalAllowed() || isMakeRepaymentAllowed(); } public boolean isWaiveAllowed() { return waiveAllowed; } - public void setWaiveAllowed(boolean waiveAllowed) { - this.waiveAllowed = waiveAllowed; - } - public boolean isMakeRepaymentAllowed() { return makeRepaymentAllowed; } - public void setMakeRepaymentAllowed(boolean makeRepaymentAllowed) { - this.makeRepaymentAllowed = makeRepaymentAllowed; - } - public boolean isRejectAllowed() { return rejectAllowed; } - public void setRejectAllowed(boolean rejectAllowed) { - this.rejectAllowed = rejectAllowed; - } - public boolean isWithdrawnByApplicantAllowed() { return withdrawnByApplicantAllowed; } - public void setWithdrawnByApplicantAllowed(boolean withdrawnByApplicantAllowed) { - this.withdrawnByApplicantAllowed = withdrawnByApplicantAllowed; - } - public boolean isUndoApprovalAllowed() { return undoApprovalAllowed; } - public void setUndoApprovalAllowed(boolean undoApprovalAllowed) { - this.undoApprovalAllowed = undoApprovalAllowed; - } - public boolean isDisbursalAllowed() { return disbursalAllowed; } - public void setDisbursalAllowed(boolean disbursalAllowed) { - this.disbursalAllowed = disbursalAllowed; - } - - public boolean isPendingApproval() { - return pendingApproval; - } - - public void setPendingApproval(boolean pendingApproval) { - this.pendingApproval = pendingApproval; - } - - public boolean isWaitingForDisbursal() { - return waitingForDisbursal; - } - - public void setWaitingForDisbursal(boolean waitingForDisbursal) { - this.waitingForDisbursal = waitingForDisbursal; - } - public boolean isUndoDisbursalAllowed() { return undoDisbursalAllowed; } - public void setUndoDisbursalAllowed(boolean undoDisbursalAllowed) { - this.undoDisbursalAllowed = undoDisbursalAllowed; + public boolean isPendingApproval() { + return pendingApproval; + } + + public boolean isWaitingForDisbursal() { + return waitingForDisbursal; + } + + public boolean isAnyActionOnLoanAllowed() { + return anyActionOnLoanAllowed; } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanTransactionData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanTransactionData.java index cc9f5a548..4fab14375 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanTransactionData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/LoanTransactionData.java @@ -1,13 +1,7 @@ package org.mifosng.platform.api.data; -import org.codehaus.jackson.map.annotate.JsonFilter; import org.joda.time.LocalDate; -/** - * TODO - KW - Think this is deprecated now. - */ -@Deprecated -@JsonFilter("loanRepaymentFilter") public class LoanTransactionData { private Long id; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/NewLoanData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/NewLoanData.java index 3f42a1a54..0401f7179 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/NewLoanData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/NewLoanData.java @@ -1,14 +1,11 @@ package org.mifosng.platform.api.data; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import org.codehaus.jackson.map.annotate.JsonFilter; import org.joda.time.LocalDate; -@JsonFilter("myFilter") -public class NewLoanData implements Serializable { +public class NewLoanData { private Long clientId; private String clientName; 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 b7e011293..f275c8049 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 @@ -20,7 +20,10 @@ 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.FundData; +import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanProductData; +import org.mifosng.platform.api.data.LoanTransactionData; +import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.data.NoteData; import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeTransactionData; @@ -48,6 +51,12 @@ public interface ApiDataConversionService { String convertNoteDataToJson(boolean prettyPrint, Set responseParameters, NoteData... notes); String convertLoanProductDataToJson(boolean prettyPrint, Set responseParameters, LoanProductData... products); + + String convertNewLoanDataToJson(boolean prettyPrint, Set responseParameters, NewLoanData newLoanData); + + String convertLoanAccountDataToJson(boolean prettyPrint, Set responseParameters, LoanAccountData loanAccount); + + String convertLoanTransactionDataToJson(boolean prettyPrint, Set responseParameters, LoanTransactionData... transactions); // FundCommand convertJsonToFundCommand(Long resourceIdentifier, String json); 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 38e17be18..484682339 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 @@ -37,7 +37,10 @@ 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.FundData; +import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanProductData; +import org.mifosng.platform.api.data.LoanTransactionData; +import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.data.NoteData; import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeTransactionData; @@ -68,6 +71,111 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { gsonConverter = new Gson(); } + @Override + public String convertLoanTransactionDataToJson(final boolean prettyPrint, final Set responseParameters, final LoanTransactionData... transactions) { + Set supportedParameters = new HashSet( + Arrays.asList("id", "transactionType", "date", "principal", "interest", "total", "totalWaived", "overpaid") + ); + + 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()); + builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); + if (prettyPrint) { + builder.setPrettyPrinting(); + } + Gson gsonDeserializer = builder.create(); + + String json = ""; + if (transactions != null && transactions.length == 1) { + json = gsonDeserializer.toJson(transactions[0]); + } else { + json = gsonDeserializer.toJson(transactions); + } + + return json; + } + + @Override + public String convertLoanAccountDataToJson(final boolean prettyPrint, final Set responseParameters, final LoanAccountData loanAccount) { + Set supportedParameters = new HashSet( + Arrays.asList("id", "externalId", "fundId", "fundName", "loanProductId", "loanProductName", "principal", "inArrearsTolerance", "numberOfRepayments", + "repaymentEvery", "interestRatePerPeriod", "annualInterestRate", + "repaymentFrequencyType", "interestRateFrequencyType", "amortizationType", "interestType", "interestCalculationPeriodType", + "submittedOnDate", "approvedOnDate", "expectedDisbursementDate", "actualDisbursementDate", + "expectedFirstRepaymentOnDate", "interestChargedFromDate", "closedOnDate", "expectedMaturityDate", + "lifeCycleStatusId", "lifeCycleStatusText", "lifeCycleStatusDate", + "summary", "repaymentSchedule", "loanRepayments", "permissions", "convenienceData") + ); + + 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()); + builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); + if (prettyPrint) { + builder.setPrettyPrinting(); + } + Gson gsonDeserializer = builder.create(); + + return gsonDeserializer.toJson(loanAccount); + } + + @Override + public String convertNewLoanDataToJson(final boolean prettyPrint, final Set responseParameters, final NewLoanData newLoanData) { + + Set supportedParameters = new HashSet( + Arrays.asList("clientId", "clientName", "productId", "productName", + "selectedProduct", "expectedDisbursementDate", "allowedProducts") + ); + + 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()); + builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); + if (prettyPrint) { + builder.setPrettyPrinting(); + } + Gson gsonDeserializer = builder.create(); + + return gsonDeserializer.toJson(newLoanData); + } + @Override public String convertLoanProductDataToJson(final boolean prettyPrint, final Set responseParameters, final LoanProductData... products) { Set supportedParameters = new HashSet(