From 61ccefb5d7921461661ac2d4b683e8b502985925 Mon Sep 17 00:00:00 2001 From: Michal Dudzinski Date: Mon, 27 Aug 2012 16:43:29 +0200 Subject: [PATCH] MIFOSX-41: API fix. --- .../platform/api/ChargesApiResource.java | 19 +++++------ .../mifosng/platform/api/data/ChargeData.java | 33 +++++++++++++++++-- .../GoogleGsonApiJsonSerializerService.java | 2 +- .../ChargeReadPlatformServiceImpl.java | 18 +++++++--- 4 files changed, 53 insertions(+), 19 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java index a77390e37..188af8ba6 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/ChargesApiResource.java @@ -57,12 +57,19 @@ public class ChargesApiResource { @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public String retrieveCharge(@PathParam("chargeId") final Long chargeId, @Context final UriInfo uriInfo){ - Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); + boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters()); ChargeData charge = this.chargeReadPlatformService.retrieveCharge(chargeId); + if (template){ + ChargeData templateData = this.chargeReadPlatformService.retrieveNewChargeDetails(); + + charge = new ChargeData(charge, templateData); + } + return this.apiJsonSerializerService.serializeChargeDataToJson(prettyPrint, responseParameters, charge); } @@ -71,16 +78,8 @@ public class ChargesApiResource { @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public String retrieveNewChargeDetails(@Context final UriInfo uriInfo) { - - Set typicalResponseParameters = new HashSet( - Arrays.asList("id", "name", "amount", "currency", "active", "chargeAppliesTo", "chargeTimeType", - "chargeCalculationType", "chargeCalculationTypeOptions", "currencyOptions") - ); - Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); - if (responseParameters.isEmpty()) { - responseParameters.addAll(typicalResponseParameters); - } + boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); ChargeData chargeData = this.chargeReadPlatformService.retrieveNewChargeDetails(); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java index 3db77ef41..b7bd9bde5 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/ChargeData.java @@ -19,16 +19,29 @@ public class ChargeData { private final List currencyOptions; private final List chargeCalculationTypeOptions; + private final List chargeAppliesToOptions; + private final List chargeTimeTypeOptions; public static ChargeData template( + final CurrencyData currency, final EnumOptionData chargeTimeType, final EnumOptionData chargeAppliesToType, final EnumOptionData chargeCalculationType, final List currencyOptions, - final List chargeCalculationTypeOptions) { - return new ChargeData(null, null, null, null, chargeTimeType, chargeAppliesToType, chargeCalculationType, false, currencyOptions, chargeCalculationTypeOptions); + final List chargeCalculationTypeOptions, + final List chargeAppliesToOptions, + final List chargeTimeTypeOptions) { + return new ChargeData(null, null, null, currency, chargeTimeType, chargeAppliesToType, chargeCalculationType, false, + currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions); } + public ChargeData(ChargeData charge, ChargeData template){ + this(charge.getId(), charge.getName(), charge.getAmount(), charge.getCurrency(), charge.getChargeTimeType(), + charge.getChargeAppliesTo(), charge.getChargeCalculationType(), charge.isActive(), + template.getCurrencyOptions(), template.getChargeCalculationTypeOptions(), + template.getChargeAppliesToOptions(), template.getChargeTimeTypeOptions()); + } + public ChargeData(final Long id, final String name, final BigDecimal amount, final CurrencyData currency, final EnumOptionData chargeTimeType, @@ -44,6 +57,8 @@ public class ChargeData { this.active = active; this.currencyOptions = null; this.chargeCalculationTypeOptions = null; + this.chargeAppliesToOptions = null; + this.chargeTimeTypeOptions = null; } public ChargeData(final Long id, final String name, @@ -52,7 +67,9 @@ public class ChargeData { final EnumOptionData chargeAppliesTo, final EnumOptionData chargeCalculationType, final boolean active, final List currencyOptions, - final List chargeCalculationTypeOptions) { + final List chargeCalculationTypeOptions, + final List chargeAppliesToOptions, + final List chargeTimeTypeOptions) { this.id = id; this.name = name; this.amount = amount; @@ -63,6 +80,8 @@ public class ChargeData { this.active = active; this.currencyOptions = currencyOptions; this.chargeCalculationTypeOptions = chargeCalculationTypeOptions; + this.chargeAppliesToOptions = chargeAppliesToOptions; + this.chargeTimeTypeOptions = chargeTimeTypeOptions; } public Long getId() { @@ -104,4 +123,12 @@ public class ChargeData { public List getChargeCalculationTypeOptions() { return chargeCalculationTypeOptions; } + + public List getChargeAppliesToOptions() { + return chargeAppliesToOptions; + } + + public List getChargeTimeTypeOptions() { + return chargeTimeTypeOptions; + } } \ 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 8def39930..e6d2a562a 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 @@ -159,7 +159,7 @@ public class GoogleGsonApiJsonSerializerService implements Arrays.asList("id", "name", "amount", "currency", "active", "chargeAppliesTo", "chargeTimeType", "chargeCalculationType", "chargeCalculationTypeOptions", - "currencyOptions")); + "chargeAppliesToOptions", "chargeTimeTypeOptions", "currencyOptions")); private final GoogleGsonSerializerHelper helper; diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java index ad6dcf350..896baf24e 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/charge/service/ChargeReadPlatformServiceImpl.java @@ -75,17 +75,25 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService this.context.authenticatedUser(); List currencyOptions = currencyReadPlatformService.retrieveAllowedCurrencies(); - List allowedChargeCalculationMethods = Arrays.asList( + CurrencyData currency = new CurrencyData("", "", 0, "", ""); + + EnumOptionData allowedChargeCalculationType = chargeCalculationType(ChargeCalculationMethod.FLAT); + List allowedChargeCalculationMethodsOptions = Arrays.asList( chargeCalculationType(ChargeCalculationMethod.FLAT), chargeCalculationType(ChargeCalculationMethod.PERCENT_OF_AMOUNT), chargeCalculationType(ChargeCalculationMethod.PERCENT_OF_AMOUNT_AND_INTEREST), chargeCalculationType(ChargeCalculationMethod.PERCENT_OF_INTEREST) ); - EnumOptionData allowedChargeAppliesTo = chargeAppliesTo(ChargeAppliesTo.LOAN); - EnumOptionData allowedChargeTime = chargeTimeType(ChargeTimeType.DISBURSEMENT); - EnumOptionData allowedChargeCalculationType = chargeCalculationType(ChargeCalculationMethod.FLAT); - return ChargeData.template(allowedChargeTime, allowedChargeAppliesTo, allowedChargeCalculationType, currencyOptions, allowedChargeCalculationMethods); + EnumOptionData allowedChargeAppliesTo = chargeAppliesTo(ChargeAppliesTo.LOAN); + List allowedChargeAppliesToOptions = Arrays.asList(allowedChargeAppliesTo); + + EnumOptionData allowedChargeTime = chargeTimeType(ChargeTimeType.DISBURSEMENT); + List allowedChargeTimeOptions = Arrays.asList(allowedChargeTime); + + return ChargeData.template(currency, allowedChargeTime, allowedChargeAppliesTo, allowedChargeCalculationType, + currencyOptions, allowedChargeCalculationMethodsOptions, + allowedChargeAppliesToOptions, allowedChargeTimeOptions); } private static final class ChargeMapper implements RowMapper {