From f48e4de3092d07c3fc4993815ae1a7c45dd52816 Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Tue, 21 Aug 2012 16:17:41 +0100 Subject: [PATCH] from MIFOSX-38 - update serialization of offices and office transactions. --- ...-account-status-and-transactions-table.sql | 2 +- .../api/AuthenticationApiResource.java | 17 ++-- .../api/OfficeTransactionsApiResource.java | 6 +- .../platform/api/OfficesApiResource.java | 17 +++- .../api/data/AuthenticatedUserData.java | 59 +++++------- .../mifosng/platform/api/data/OfficeData.java | 92 +++++++------------ .../api/data/OfficeTransactionData.java | 23 ++--- .../ApiDataConversionService.java | 9 -- .../ApiDataConversionServiceImpl.java | 88 ------------------ .../ApiJsonSerializerService.java | 11 +++ .../GoogleGsonApiJsonSerializerService.java | 34 ++++++- .../GoogleGsonSerializerHelper.java | 10 ++ .../OfficeReadPlatformServiceImpl.java | 13 +-- 13 files changed, 145 insertions(+), 236 deletions(-) diff --git a/mifosng-db/patches/patch-0002-deposit-account-status-and-transactions-table.sql b/mifosng-db/patches/patch-0002-deposit-account-status-and-transactions-table.sql index f76977ed2..133adebc7 100644 --- a/mifosng-db/patches/patch-0002-deposit-account-status-and-transactions-table.sql +++ b/mifosng-db/patches/patch-0002-deposit-account-status-and-transactions-table.sql @@ -1,4 +1,4 @@ -ALTER TABLE `m_deposit_account` ADD COLUMN `status_enum` smallint(5) NOT NULL AFTER `is_deleted`; +ALTER TABLE `m_deposit_account` ADD COLUMN `status_enum` smallint(5) NOT NULL DEFAULT 0 AFTER `is_deleted`; DROP TABLE IF EXISTS `m_deposit_account_transaction`; CREATE TABLE `m_deposit_account_transaction` ( diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/AuthenticationApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/AuthenticationApiResource.java index a4652bf02..8afa94528 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/AuthenticationApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/AuthenticationApiResource.java @@ -11,7 +11,7 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.mifosng.platform.api.data.AuthenticatedUserData; -import org.mifosng.platform.api.infrastructure.ApiDataConversionService; +import org.mifosng.platform.api.infrastructure.ApiJsonSerializerService; import org.mifosng.platform.user.domain.AppUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -34,8 +34,8 @@ public class AuthenticationApiResource { private DaoAuthenticationProvider customAuthenticationProvider; @Autowired - private ApiDataConversionService apiDataConversionService; - + private ApiJsonSerializerService apiJsonSerializerService; + @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) @@ -45,22 +45,19 @@ public class AuthenticationApiResource { Authentication authenticationCheck = customAuthenticationProvider.authenticate(authentication); Collection permissions = new ArrayList(); - AuthenticatedUserData authenticatedUserData = new AuthenticatedUserData(permissions); - authenticatedUserData.setUsername(username); + AuthenticatedUserData authenticatedUserData = new AuthenticatedUserData(username, permissions); if (authenticationCheck.isAuthenticated()) { Collection authorities = new ArrayList(authenticationCheck.getAuthorities()); for (GrantedAuthority grantedAuthority : authorities) { permissions.add(grantedAuthority.getAuthority()); } - authenticatedUserData.setPermissions(permissions); - authenticatedUserData.setAuthenticated(true); AppUser principal = (AppUser) authenticationCheck.getPrincipal(); - authenticatedUserData.setUserId(principal.getId()); byte[] base64EncodedAuthenticationKey = Base64.encode(username + ":" + password); - authenticatedUserData.setBase64EncodedAuthenticationKey(new String(base64EncodedAuthenticationKey)); + + authenticatedUserData = new AuthenticatedUserData(username, permissions, principal.getId(), new String(base64EncodedAuthenticationKey)); } - return this.apiDataConversionService.convertAuthenticatedUserDataToJson(false, authenticatedUserData); + return this.apiJsonSerializerService.serializeAuthenticatedUserDataToJson(false, authenticatedUserData); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeTransactionsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeTransactionsApiResource.java index 8ba2ce899..13fcc0c65 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeTransactionsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeTransactionsApiResource.java @@ -18,6 +18,7 @@ import org.mifosng.platform.api.commands.BranchMoneyTransferCommand; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.OfficeTransactionData; 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.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.organisation.service.OfficeWritePlatformService; @@ -38,6 +39,9 @@ public class OfficeTransactionsApiResource { @Autowired private ApiDataConversionService apiDataConversionService; + + @Autowired + private ApiJsonSerializerService apiJsonSerializerService; @GET @Path("template") @@ -55,7 +59,7 @@ public class OfficeTransactionsApiResource { OfficeTransactionData officeTransactionData = this.readPlatformService.retrieveNewOfficeTransactionDetails(); - return this.apiDataConversionService.convertOfficeTransactionDataToJson(prettyPrint, responseParameters, officeTransactionData); + return this.apiJsonSerializerService.serializeOfficeTransactionDataToJson(prettyPrint, responseParameters, officeTransactionData); } @POST diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficesApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficesApiResource.java index c667e372b..7de978433 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficesApiResource.java @@ -3,6 +3,7 @@ package org.mifosng.platform.api; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; import javax.ws.rs.Consumes; @@ -20,7 +21,9 @@ import javax.ws.rs.core.UriInfo; import org.mifosng.platform.api.commands.OfficeCommand; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.OfficeData; +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.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.organisation.service.OfficeWritePlatformService; @@ -41,6 +44,9 @@ public class OfficesApiResource { @Autowired private ApiDataConversionService apiDataConversionService; + + @Autowired + private ApiJsonSerializerService apiJsonSerializerService; @GET @Consumes({MediaType.APPLICATION_JSON}) @@ -59,7 +65,7 @@ public class OfficesApiResource { Collection offices = this.readPlatformService.retrieveAllOffices(); - return this.apiDataConversionService.convertOfficeDataToJson(prettyPrint, responseParameters, offices.toArray(new OfficeData[offices.size()])); + return this.apiJsonSerializerService.serializeOfficeDataToJson(prettyPrint, responseParameters, offices); } @GET @@ -74,9 +80,9 @@ public class OfficesApiResource { boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters()); - OfficeData officeData = this.readPlatformService.retrieveNewOfficeTemplate(); + OfficeData office = this.readPlatformService.retrieveNewOfficeTemplate(); - return this.apiDataConversionService.convertOfficeDataToJson(prettyPrint, typicalResponseParameters, officeData); + return this.apiJsonSerializerService.serializeOfficeDataToJson(prettyPrint, typicalResponseParameters, office); } @POST @@ -110,11 +116,12 @@ public class OfficesApiResource { OfficeData office = this.readPlatformService.retrieveOffice(officeId); if (template) { - office.setAllowedParents(this.readPlatformService.retrieveAllowedParents(officeId)); + List allowedParents = this.readPlatformService.retrieveAllowedParents(officeId); + office = OfficeData.appendedTemplate(office, allowedParents); responseParameters.add("allowedParents"); } - return this.apiDataConversionService.convertOfficeDataToJson(prettyPrint, responseParameters, office); + return this.apiJsonSerializerService.serializeOfficeDataToJson(prettyPrint, responseParameters, office); } @PUT diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/AuthenticatedUserData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/AuthenticatedUserData.java index 82e8d3257..82f1aef0a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/AuthenticatedUserData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/AuthenticatedUserData.java @@ -1,29 +1,31 @@ package org.mifosng.platform.api.data; -import java.util.ArrayList; import java.util.Collection; +/** + * Immutable data object for authentication. + */ public class AuthenticatedUserData { - private String username; - private Long userId; - private String base64EncodedAuthenticationKey; - private boolean authenticated = false; - private Collection permissions = new ArrayList(); + private final String username; + private final Long userId; + private final String base64EncodedAuthenticationKey; + private final boolean authenticated; + private final Collection permissions; - protected AuthenticatedUserData() { - // - } - - public AuthenticatedUserData(final Collection permissions) { + public AuthenticatedUserData(final String username, final Collection permissions) { + this.username = username; + this.userId = null; + this.base64EncodedAuthenticationKey = null; + this.authenticated = false; this.permissions = permissions; } - public Collection getPermissions() { - return this.permissions; - } - - public void setPermissions(final Collection permissions) { + public AuthenticatedUserData(final String username, final Collection permissions, final Long userId, final String base64EncodedAuthenticationKey) { + this.username = username; + this.userId = userId; + this.base64EncodedAuthenticationKey = base64EncodedAuthenticationKey; + this.authenticated = true; this.permissions = permissions; } @@ -31,32 +33,19 @@ public class AuthenticatedUserData { return username; } - public void setUsername(String username) { - this.username = username; - } - - public boolean isAuthenticated() { - return authenticated; - } - - public void setAuthenticated(boolean authenticated) { - this.authenticated = authenticated; + public Long getUserId() { + return userId; } public String getBase64EncodedAuthenticationKey() { return base64EncodedAuthenticationKey; } - public void setBase64EncodedAuthenticationKey( - String base64EncodedAuthenticationKey) { - this.base64EncodedAuthenticationKey = base64EncodedAuthenticationKey; + public boolean isAuthenticated() { + return authenticated; } - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; + public Collection getPermissions() { + return permissions; } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeData.java index b9cbf6354..054547917 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeData.java @@ -1,31 +1,38 @@ package org.mifosng.platform.api.data; -import java.util.ArrayList; import java.util.List; import org.joda.time.LocalDate; +/** + * Immutable data object for office data. + */ public class OfficeData { - private Long id; - private String name; - private String nameDecorated; - private String externalId; - private LocalDate openingDate; - private String hierarchy; - private Long parentId; - private String parentName; + private final Long id; + private final String name; + private final String nameDecorated; + private final String externalId; + private final LocalDate openingDate; + private final String hierarchy; + private final Long parentId; + private final String parentName; - private List allowedParents = new ArrayList(); - - public OfficeData() { - // + private final List allowedParents; + + public static OfficeData template(final List parentLookups, final LocalDate defaultOpeningDate) { + return new OfficeData(null, null, null, null, defaultOpeningDate, null, null, null, parentLookups); + } + + public static OfficeData appendedTemplate(final OfficeData office, final List allowedParents) { + return new OfficeData(office.getId(), office.getName(), office.getNameDecorated(), office.getExternalId(), + office.getOpeningDate(), office.getHierarchy(), office.getParentId(), office.getParentName(), allowedParents); } public OfficeData(final Long id, final String name, final String nameDecorated, final String externalId, final LocalDate openingDate, String hierarchy, final Long parentId, - final String parentName) { + final String parentName, final List allowedParents) { this.id = id; this.name = name; this.nameDecorated = nameDecorated; @@ -34,14 +41,15 @@ public class OfficeData { this.hierarchy = hierarchy; this.parentName = parentName; this.parentId = parentId; + this.allowedParents = allowedParents; } public Long getId() { - return this.id; + return id; } public String getName() { - return this.name; + return name; } public String getNameDecorated() { @@ -49,62 +57,26 @@ public class OfficeData { } public String getExternalId() { - return this.externalId; + return externalId; } public LocalDate getOpeningDate() { - return this.openingDate; - } - - public Long getParentId() { - return this.parentId; - } - - public String getParentName() { - return this.parentName; - } - - public void setId(final Long id) { - this.id = id; - } - - public void setName(final String name) { - this.name = name; - } - - public void setNameDecorated(String nameDecorated) { - this.nameDecorated = nameDecorated; - } - - public void setExternalId(final String externalId) { - this.externalId = externalId; - } - - public void setOpeningDate(final LocalDate openingDate) { - this.openingDate = openingDate; - } - - public void setParentName(final String parentName) { - this.parentName = parentName; - } - - public void setParentId(final Long parentId) { - this.parentId = parentId; + return openingDate; } public String getHierarchy() { return hierarchy; } - public void setHierarchy(String hierarchy) { - this.hierarchy = hierarchy; + public Long getParentId() { + return parentId; + } + + public String getParentName() { + return parentName; } public List getAllowedParents() { return allowedParents; } - - public void setAllowedParents(List allowedParents) { - this.allowedParents = allowedParents; - } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeTransactionData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeTransactionData.java index b11e3cd66..73ed43b3d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeTransactionData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/OfficeTransactionData.java @@ -1,15 +1,17 @@ package org.mifosng.platform.api.data; -import java.util.ArrayList; import java.util.List; import org.joda.time.LocalDate; +/** + * Immutable data object for office transactions. + */ public class OfficeTransactionData { - private LocalDate transactionDate; - private List currencyOptions = new ArrayList(); - private List allowedOffices = new ArrayList(); + private final LocalDate transactionDate; + private final List currencyOptions; + private final List allowedOffices; public OfficeTransactionData(final LocalDate transactionDate, final List allowedOffices, final List currencyOptions) { this.transactionDate = transactionDate; @@ -21,24 +23,11 @@ public class OfficeTransactionData { return transactionDate; } - public void setTransactionDate(LocalDate transactionDate) { - this.transactionDate = transactionDate; - } - public List getCurrencyOptions() { return currencyOptions; } - public void setCurrencyOptions(List currencyOptions) { - this.currencyOptions = currencyOptions; - } - public List getAllowedOffices() { return allowedOffices; } - - public void setAllowedOffices(List allowedOffices) { - this.allowedOffices = allowedOffices; - } - } \ 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 712dce71f..35eeb0e38 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,7 +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.AdditionalFieldsSetData; -import org.mifosng.platform.api.data.AuthenticatedUserData; import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; @@ -37,15 +36,11 @@ 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; import org.mifosng.platform.api.data.SavingProductData; public interface ApiDataConversionService { // - String convertOfficeTransactionDataToJson(boolean prettyPrint, Set responseParameters, OfficeTransactionData... officeTransactions); - String convertConfigurationDataToJson(boolean prettyPrint, Set responseParameters, ConfigurationData... configuration); String convertClientDataToJson(boolean prettyPrint, Set responseParameters, ClientData... clients); @@ -76,8 +71,6 @@ public interface ApiDataConversionService { String convertAdditionalFieldsSetDataToJson(boolean prettyPrint, AdditionalFieldsSetData... additionalFields); String convertGenericResultsetDataToJson(boolean prettyPrint, GenericResultsetData result); - - String convertAuthenticatedUserDataToJson(boolean prettyPrint, AuthenticatedUserData authenticatedUserData); // ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json); @@ -90,8 +83,6 @@ public interface ApiDataConversionService { OfficeCommand convertJsonToOfficeCommand(Long resourceIdentifier, String json); - String convertOfficeDataToJson(boolean prettyPrint, Set responseParameters, OfficeData... offices); - RoleCommand convertJsonToRoleCommand(Long resourceIdentifier, String json); UserCommand convertJsonToUserCommand(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 bfc051533..d63ea84dd 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,7 +39,6 @@ import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; 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.AuthenticatedUserData; import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; @@ -54,8 +53,6 @@ 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; import org.mifosng.platform.api.data.SavingProductData; import org.mifosng.platform.api.errorhandling.InvalidJsonException; import org.mifosng.platform.api.errorhandling.UnsupportedParameterException; @@ -82,20 +79,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { gsonConverter = new Gson(); } - @Override - public String convertAuthenticatedUserDataToJson(final boolean prettyPrint, final AuthenticatedUserData authenticatedUserData) { - 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(authenticatedUserData); - } - @Override public String convertGenericResultsetDataToJson(final boolean prettyPrint, final GenericResultsetData result) { GsonBuilder builder = new GsonBuilder(); @@ -456,77 +439,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService { return json; } - @Override - public String convertOfficeTransactionDataToJson(final boolean prettyPrint, final Set responseParameters, final OfficeTransactionData... officeTransactions) { - - final Set supportedParameters = new HashSet(Arrays.asList("transactionDate", "allowedOffices", "currencyOptions")); - - 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 (officeTransactions != null && officeTransactions.length == 1) { - json = gsonDeserializer.toJson(officeTransactions[0]); - } else { - json = gsonDeserializer.toJson(officeTransactions); - } - - return json; - } - - @Override - public String convertOfficeDataToJson(final boolean prettyPrint, final Set responseParameters, final OfficeData... offices) { - - Set supportedParameters = new HashSet(Arrays.asList("id", "name", "nameDecorated", "externalId", "openingDate", - "hierarchy", "parentId", "parentName", "allowedParents")); - - 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 (offices != null && offices.length == 1) { - json = gsonDeserializer.toJson(offices[0]); - } else { - json = gsonDeserializer.toJson(offices); - } - - return json; - } - @Override public String convertFundDataToJson(final boolean prettyPrint, final Set responseParameters, final FundData... funds) { 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 6414ec586..4f08a320a 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 @@ -4,6 +4,9 @@ import java.util.Collection; import java.util.Set; import org.mifosng.platform.api.data.AppUserData; +import org.mifosng.platform.api.data.AuthenticatedUserData; +import org.mifosng.platform.api.data.OfficeData; +import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.RoleData; @@ -18,5 +21,13 @@ public interface ApiJsonSerializerService { String serializeAppUserDataToJson(boolean prettyPrint, Set responseParameters, Collection users); String serializeAppUserDataToJson(boolean prettyPrint, Set responseParameters, AppUserData user); + + String serializeAuthenticatedUserDataToJson(boolean prettyPrint, AuthenticatedUserData authenticatedUserData); + + String serializeOfficeDataToJson(boolean prettyPrint, Set responseParameters, Collection offices); + + String serializeOfficeDataToJson(boolean prettyPrint, Set responseParameters, OfficeData office); + + String serializeOfficeTransactionDataToJson(boolean prettyPrint, Set responseParameters, OfficeTransactionData officeTransactionData); } \ 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 b0b0b7193..6e4efbcc8 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 @@ -6,6 +6,9 @@ import java.util.HashSet; import java.util.Set; import org.mifosng.platform.api.data.AppUserData; +import org.mifosng.platform.api.data.AuthenticatedUserData; +import org.mifosng.platform.api.data.OfficeData; +import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.RoleData; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +27,12 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ private static final Set APP_USER_DATA_PARAMETERS = new HashSet( Arrays.asList("id", "officeId", "officeName", "username", "firstname", "lastname", "email", "allowedOffices", "availableRoles", "selectedRoles")); - + private static final Set OFFICE_DATA_PARAMETERS = new HashSet( + Arrays.asList("id", "name", "nameDecorated", "externalId", "openingDate", + "hierarchy", "parentId", "parentName", "allowedParents") + ); + private static final Set OFFICE_TRANSACTIONS_DATA_PARAMETERS = new HashSet(Arrays.asList("transactionDate", "allowedOffices", "currencyOptions")); + private final GoogleGsonSerializerHelper helper; @Autowired @@ -61,4 +69,28 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(APP_USER_DATA_PARAMETERS, prettyPrint, responseParameters); 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 + public String serializeOfficeDataToJson(final boolean prettyPrint, final Set responseParameters, final Collection offices) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(OFFICE_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, offices.toArray(new OfficeData[offices.size()])); + } + + @Override + public String serializeOfficeDataToJson(final boolean prettyPrint, final Set responseParameters, final OfficeData office) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(OFFICE_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, office); + } + + @Override + public String serializeOfficeTransactionDataToJson(final boolean prettyPrint, final Set responseParameters, final OfficeTransactionData officeTransaction) { + final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(OFFICE_TRANSACTIONS_DATA_PARAMETERS, prettyPrint, responseParameters); + return helper.serializedJsonFrom(gsonDeserializer, officeTransaction); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonSerializerHelper.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonSerializerHelper.java index 60e838357..34ce7800f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonSerializerHelper.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonSerializerHelper.java @@ -19,6 +19,16 @@ import com.google.gson.GsonBuilder; @Service public class GoogleGsonSerializerHelper { + public Gson createGsonBuilder(final boolean prettyPrint) { + final GsonBuilder builder = new GsonBuilder(); + builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter()); + builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter()); + if (prettyPrint) { + builder.setPrettyPrinting(); + } + return builder.create(); + } + public Gson createGsonBuilderWithParameterExclusionSerializationStrategy( final Set supportedParameters, final boolean prettyPrint, diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/organisation/service/OfficeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/organisation/service/OfficeReadPlatformServiceImpl.java index c2930c634..2521c32c3 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/organisation/service/OfficeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/organisation/service/OfficeReadPlatformServiceImpl.java @@ -62,8 +62,8 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService Long parentId = JdbcSupport.getLong(rs, "parentId"); String parentName = rs.getString("parentName"); - return new OfficeData(id, name, nameDecorated, externalId, - openingDate, hierarchy, parentId, parentName); + List allowedParents = new ArrayList(); + return new OfficeData(id, name, nameDecorated, externalId, openingDate, hierarchy, parentId, parentName, allowedParents); } } @@ -144,11 +144,7 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService List parentLookups = new ArrayList( retrieveAllOfficesForLookup()); - OfficeData officeData = new OfficeData(); - officeData.setAllowedParents(parentLookups); - officeData.setOpeningDate(new LocalDate()); - - return officeData; + return OfficeData.template(parentLookups, new LocalDate()); } @Override @@ -156,8 +152,7 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService context.authenticatedUser(); - List parentLookups = new ArrayList( - retrieveAllOfficesForLookup()); + List parentLookups = new ArrayList(retrieveAllOfficesForLookup()); List filterParentLookups = new ArrayList(); for (OfficeLookup office : parentLookups) {