from MIFOX-38 - need to tidy up serialization of java objects into json across the board - this is for user admin related areas.

This commit is contained in:
Keith Woodlock
2012-08-21 13:04:58 +01:00
parent 432332c88e
commit 95bdafa4bb
14 changed files with 296 additions and 296 deletions
@@ -12,7 +12,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
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.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.user.service.PermissionReadPlatformService; import org.mifosng.platform.user.service.PermissionReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +28,7 @@ public class PermissionsApiResource {
private PermissionReadPlatformService permissionReadPlatformService; private PermissionReadPlatformService permissionReadPlatformService;
@Autowired @Autowired
private ApiDataConversionService apiDataConversionService; private ApiJsonSerializerService apiJsonSerializerService;
@GET @GET
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@@ -40,6 +40,6 @@ public class PermissionsApiResource {
Collection<PermissionData> permissions = this.permissionReadPlatformService.retrieveAllPermissions(); Collection<PermissionData> permissions = this.permissionReadPlatformService.retrieveAllPermissions();
return this.apiDataConversionService.convertPermissionDataToJson(prettyPrint, responseParameters, permissions.toArray(new PermissionData[permissions.size()])); return this.apiJsonSerializerService.serializePermissionDataToJson(prettyPrint, responseParameters, permissions);
} }
} }
@@ -1,5 +1,6 @@
package org.mifosng.platform.api; package org.mifosng.platform.api;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@@ -22,6 +23,7 @@ import org.mifosng.platform.api.data.EntityIdentifier;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData; import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService; 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.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.user.service.PermissionReadPlatformService; import org.mifosng.platform.user.service.PermissionReadPlatformService;
import org.mifosng.platform.user.service.RoleReadPlatformService; import org.mifosng.platform.user.service.RoleReadPlatformService;
@@ -47,6 +49,9 @@ public class RolesApiResource {
@Autowired @Autowired
private ApiDataConversionService apiDataConversionService; private ApiDataConversionService apiDataConversionService;
@Autowired
private ApiJsonSerializerService apiJsonSerializerService;
@GET @GET
@Consumes({MediaType.APPLICATION_JSON}) @Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON})
@@ -62,7 +67,7 @@ public class RolesApiResource {
Collection<RoleData> roles = this.roleReadPlatformService.retrieveAllRoles(); Collection<RoleData> roles = this.roleReadPlatformService.retrieveAllRoles();
return this.apiDataConversionService.convertRoleDataToJson(prettyPrint, responseParameters, roles.toArray(new RoleData[roles.size()])); return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, roles);
} }
@GET @GET
@@ -81,10 +86,9 @@ public class RolesApiResource {
Collection<PermissionData> allPermissions = this.permissionReadPlatformService.retrieveAllPermissions(); Collection<PermissionData> allPermissions = this.permissionReadPlatformService.retrieveAllPermissions();
RoleData role = new RoleData(); RoleData role = new RoleData(allPermissions, new ArrayList<PermissionData>());
role.setAvailablePermissions(allPermissions);
return this.apiDataConversionService.convertRoleDataToJson(prettyPrint, responseParameters, role); return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
} }
@POST @POST
@@ -119,13 +123,13 @@ public class RolesApiResource {
if (template) { if (template) {
Collection<PermissionData> availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions(); Collection<PermissionData> availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions();
availablePermissions.removeAll(role.getSelectedPermissions()); availablePermissions.removeAll(role.getSelectedPermissions());
role.setAvailablePermissions(availablePermissions);
role = new RoleData(role, availablePermissions);
responseParameters.add("availablePermissions"); responseParameters.add("availablePermissions");
responseParameters.add("selectedPermissions"); responseParameters.add("selectedPermissions");
} }
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
return this.apiDataConversionService.convertRoleDataToJson(prettyPrint, responseParameters, role);
} }
@PUT @PUT
@@ -25,6 +25,7 @@ import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.EntityIdentifier;
import org.mifosng.platform.api.data.OfficeLookup; import org.mifosng.platform.api.data.OfficeLookup;
import org.mifosng.platform.api.infrastructure.ApiDataConversionService; 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.api.infrastructure.ApiParameterHelper;
import org.mifosng.platform.organisation.service.OfficeReadPlatformService; import org.mifosng.platform.organisation.service.OfficeReadPlatformService;
import org.mifosng.platform.security.PlatformSecurityContext; import org.mifosng.platform.security.PlatformSecurityContext;
@@ -52,6 +53,9 @@ public class UsersApiResource {
@Autowired @Autowired
private ApiDataConversionService apiDataConversionService; private ApiDataConversionService apiDataConversionService;
@Autowired
private ApiJsonSerializerService apiJsonSerializerService;
@Autowired @Autowired
private PlatformSecurityContext context; private PlatformSecurityContext context;
@@ -70,7 +74,7 @@ public class UsersApiResource {
Collection<AppUserData> users = this.appUserReadPlatformService.retrieveAllUsers(); Collection<AppUserData> users = this.appUserReadPlatformService.retrieveAllUsers();
return this.apiDataConversionService.convertAppUserDataToJson(prettyPrint, responseParameters, users.toArray(new AppUserData[users.size()])); return this.apiJsonSerializerService.serializeAppUserDataToJson(prettyPrint, responseParameters, users);
} }
@GET @GET
@@ -91,13 +95,13 @@ public class UsersApiResource {
AppUserData user = this.appUserReadPlatformService.retrieveUser(userId); AppUserData user = this.appUserReadPlatformService.retrieveUser(userId);
if (template) { if (template) {
List<OfficeLookup> offices = new ArrayList<OfficeLookup>(this.officeReadPlatformService.retrieveAllOfficesForLookup()); List<OfficeLookup> offices = new ArrayList<OfficeLookup>(this.officeReadPlatformService.retrieveAllOfficesForLookup());
user.setAllowedOffices(offices); user = new AppUserData(user, offices);
responseParameters.add("allowedOffices"); responseParameters.add("allowedOffices");
responseParameters.add("availableRoles"); responseParameters.add("availableRoles");
responseParameters.add("selectedRoles"); responseParameters.add("selectedRoles");
} }
return this.apiDataConversionService.convertAppUserDataToJson(prettyPrint, responseParameters, user); return this.apiJsonSerializerService.serializeAppUserDataToJson(prettyPrint, responseParameters, user);
} }
@GET @GET
@@ -117,7 +121,7 @@ public class UsersApiResource {
AppUserData user = this.appUserReadPlatformService.retrieveNewUserDetails(); AppUserData user = this.appUserReadPlatformService.retrieveNewUserDetails();
return this.apiDataConversionService.convertAppUserDataToJson(prettyPrint, responseParameters, user); return this.apiJsonSerializerService.serializeAppUserDataToJson(prettyPrint, responseParameters, user);
} }
@POST @POST
@@ -3,112 +3,104 @@ package org.mifosng.platform.api.data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Immutable data object for application user data.
*/
public class AppUserData { public class AppUserData {
private Long id; private final Long id;
private String username; private final String username;
private Long officeId; private final Long officeId;
private String officeName; private final String officeName;
private String firstname; private final String firstname;
private String lastname; private final String lastname;
private String email; private final String email;
private List<OfficeLookup> allowedOffices = new ArrayList<OfficeLookup>(); private final List<OfficeLookup> allowedOffices;
private final List<RoleData> availableRoles;
private List<RoleData> availableRoles = new ArrayList<RoleData>(); private final List<RoleData> selectedRoles;
private List<RoleData> selectedRoles = new ArrayList<RoleData>();
public AppUserData() {
//
}
public AppUserData(final Long id, final String username, public AppUserData(final Long id, final String username,
final String email, final Long officeId, final String email, final Long officeId,
final String officeName) { final String officeName, final String firstname, final String lastname, final List<RoleData> availableRoles, final List<RoleData> selectedRoles) {
this.id = id; this.id = id;
this.username = username; this.username = username;
this.email = email;
this.officeId = officeId; this.officeId = officeId;
this.officeName = officeName; this.officeName = officeName;
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
this.allowedOffices = new ArrayList<OfficeLookup>();
this.availableRoles = availableRoles;
this.selectedRoles = selectedRoles;
}
public AppUserData(AppUserData user, List<OfficeLookup> allowedOffices) {
this.id = user.getId();
this.username = user.getUsername();
this.officeId = user.getOfficeId();
this.officeName = user.getOfficeName();
this.firstname = user.getFirstname();
this.lastname = user.getLastname();
this.email = user.getEmail();
this.allowedOffices = allowedOffices;
this.availableRoles = user.getAvailableRoles();
this.selectedRoles = user.getSelectedRoles();
}
public AppUserData(final List<OfficeLookup> allowedOffices, final List<RoleData> availableRoles) {
this.id = null;
this.username = null;
this.officeId = null;
this.officeName = null;
this.firstname = null;
this.lastname = null;
this.email = null;
this.allowedOffices = allowedOffices;
this.availableRoles = availableRoles;
this.selectedRoles = new ArrayList<RoleData>();
} }
public Long getId() { public Long getId() {
return this.id; return id;
} }
public String getUsername() { public String getUsername() {
return this.username; return username;
}
public String getEmail() {
return this.email;
} }
public Long getOfficeId() { public Long getOfficeId() {
return this.officeId; return officeId;
} }
public String getOfficeName() { public String getOfficeName() {
return this.officeName; return officeName;
}
public void setId(final Long id) {
this.id = id;
}
public void setUsername(final String username) {
this.username = username;
}
public void setEmail(final String email) {
this.email = email;
}
public void setOfficeId(final Long officeId) {
this.officeId = officeId;
}
public void setOfficeName(final String officeName) {
this.officeName = officeName;
}
public List<OfficeLookup> getAllowedOffices() {
return allowedOffices;
}
public void setAllowedOffices(List<OfficeLookup> allowedOffices) {
this.allowedOffices = allowedOffices;
}
public List<RoleData> getAvailableRoles() {
return availableRoles;
}
public void setAvailableRoles(List<RoleData> availableRoles) {
this.availableRoles = availableRoles;
}
public List<RoleData> getSelectedRoles() {
return selectedRoles;
}
public void setSelectedRoles(List<RoleData> selectedRoles) {
this.selectedRoles = selectedRoles;
} }
public String getFirstname() { public String getFirstname() {
return firstname; return firstname;
} }
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() { public String getLastname() {
return lastname; return lastname;
} }
public void setLastname(String lastname) { public String getEmail() {
this.lastname = lastname; return email;
}
public List<OfficeLookup> getAllowedOffices() {
return allowedOffices;
}
public List<RoleData> getAvailableRoles() {
return availableRoles;
}
public List<RoleData> getSelectedRoles() {
return selectedRoles;
} }
} }
@@ -1,17 +1,14 @@
package org.mifosng.platform.api.data; package org.mifosng.platform.api.data;
import java.io.Serializable; /**
* Immutable data object for permission data.
*/
public class PermissionData {
public class PermissionData implements Serializable { private final Long id;
private final String name;
private Long id; private final String description;
private String name; private final String code;
private String description;
private String code;
public PermissionData() {
//
}
public PermissionData(final Long id, final String name, final String description, final String code) { public PermissionData(final Long id, final String name, final String description, final String code) {
this.id = id; this.id = id;
@@ -32,34 +29,18 @@ public class PermissionData implements Serializable {
} }
public Long getId() { public Long getId() {
return this.id; return id;
} }
public String getName() { public String getName() {
return this.name; return name;
} }
public String getDescription() { public String getDescription() {
return this.description; return description;
} }
public String getCode() { public String getCode() {
return this.code; return code;
}
public void setId(final Long id) {
this.id = id;
}
public void setName(final String name) {
this.name = name;
}
public void setDescription(final String description) {
this.description = description;
}
public void setCode(final String code) {
this.code = code;
} }
} }
@@ -3,27 +3,44 @@ package org.mifosng.platform.api.data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
/**
* Immutable data object for role data.
*/
public class RoleData { public class RoleData {
private Long id; private final Long id;
private String name; private final String name;
private String description; private final String description;
private Collection<PermissionData> availablePermissions = new ArrayList<PermissionData>(); private final Collection<PermissionData> availablePermissions;
private Collection<PermissionData> selectedPermissions = new ArrayList<PermissionData>(); private final Collection<PermissionData> selectedPermissions;
public RoleData() { public RoleData(final Long id, final String name, final String description, final Collection<PermissionData> selectedPermissions) {
//
}
public RoleData(final Long id, final String name, final String description) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.description = description; this.description = description;
this.availablePermissions = new ArrayList<PermissionData>();
this.selectedPermissions = new ArrayList<PermissionData>(selectedPermissions);
}
public RoleData(final Collection<PermissionData> availablePermissions, final Collection<PermissionData> selectedPermissions) {
this.id = null;
this.name = null;
this.description = null;
this.availablePermissions = new ArrayList<PermissionData>(availablePermissions);
this.selectedPermissions = new ArrayList<PermissionData>(selectedPermissions);
}
public RoleData(RoleData role, final Collection<PermissionData> availablePermissions) {
this.id = role.getId();
this.name = role.getName();
this.description = role.getDescription();
this.availablePermissions = new ArrayList<PermissionData>(availablePermissions);
this.selectedPermissions = role.getSelectedPermissions();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(final Object obj) {
RoleData role = (RoleData) obj; RoleData role = (RoleData) obj;
return this.id.equals(role.getId()); return this.id.equals(role.getId());
} }
@@ -34,44 +51,22 @@ public class RoleData {
} }
public Long getId() { public Long getId() {
return this.id; return id;
} }
public String getName() { public String getName() {
return this.name; return name;
} }
public String getDescription() { public String getDescription() {
return this.description; return description;
}
public void setId(final Long id) {
this.id = id;
}
public void setName(final String name) {
this.name = name;
}
public void setDescription(final String description) {
this.description = description;
} }
public Collection<PermissionData> getAvailablePermissions() { public Collection<PermissionData> getAvailablePermissions() {
return availablePermissions; return availablePermissions;
} }
public void setAvailablePermissions(
Collection<PermissionData> availablePermissions) {
this.availablePermissions = availablePermissions;
}
public Collection<PermissionData> getSelectedPermissions() { public Collection<PermissionData> getSelectedPermissions() {
return selectedPermissions; return selectedPermissions;
} }
public void setSelectedPermissions(
Collection<PermissionData> selectedPermissions) {
this.selectedPermissions = selectedPermissions;
}
} }
@@ -7,8 +7,8 @@ import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand;
import org.mifosng.platform.api.commands.BranchMoneyTransferCommand; import org.mifosng.platform.api.commands.BranchMoneyTransferCommand;
import org.mifosng.platform.api.commands.ChargeCommand; import org.mifosng.platform.api.commands.ChargeCommand;
import org.mifosng.platform.api.commands.ClientCommand; import org.mifosng.platform.api.commands.ClientCommand;
import org.mifosng.platform.api.commands.DepositProductCommand;
import org.mifosng.platform.api.commands.DepositAccountCommand; import org.mifosng.platform.api.commands.DepositAccountCommand;
import org.mifosng.platform.api.commands.DepositProductCommand;
import org.mifosng.platform.api.commands.FundCommand; import org.mifosng.platform.api.commands.FundCommand;
import org.mifosng.platform.api.commands.GroupCommand; import org.mifosng.platform.api.commands.GroupCommand;
import org.mifosng.platform.api.commands.LoanProductCommand; import org.mifosng.platform.api.commands.LoanProductCommand;
@@ -22,14 +22,13 @@ import org.mifosng.platform.api.commands.SavingProductCommand;
import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand; import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand;
import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.commands.UserCommand;
import org.mifosng.platform.api.data.AdditionalFieldsSetData; 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.AuthenticatedUserData;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData;
import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.DepositProductData;
import org.mifosng.platform.api.data.DepositAccountData; 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.FundData;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
@@ -40,19 +39,11 @@ import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.api.data.NoteData; import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.SavingProductData; import org.mifosng.platform.api.data.SavingProductData;
public interface ApiDataConversionService { public interface ApiDataConversionService {
// //
String convertPermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, PermissionData... permissions);
String convertRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, RoleData... roles);
String convertAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, AppUserData... users);
String convertOfficeTransactionDataToJson(boolean prettyPrint, Set<String> responseParameters, OfficeTransactionData... officeTransactions); String convertOfficeTransactionDataToJson(boolean prettyPrint, Set<String> responseParameters, OfficeTransactionData... officeTransactions);
String convertConfigurationDataToJson(boolean prettyPrint, Set<String> responseParameters, ConfigurationData... configuration); String convertConfigurationDataToJson(boolean prettyPrint, Set<String> responseParameters, ConfigurationData... configuration);
@@ -23,8 +23,8 @@ import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand;
import org.mifosng.platform.api.commands.BranchMoneyTransferCommand; import org.mifosng.platform.api.commands.BranchMoneyTransferCommand;
import org.mifosng.platform.api.commands.ChargeCommand; import org.mifosng.platform.api.commands.ChargeCommand;
import org.mifosng.platform.api.commands.ClientCommand; import org.mifosng.platform.api.commands.ClientCommand;
import org.mifosng.platform.api.commands.DepositProductCommand;
import org.mifosng.platform.api.commands.DepositAccountCommand; import org.mifosng.platform.api.commands.DepositAccountCommand;
import org.mifosng.platform.api.commands.DepositProductCommand;
import org.mifosng.platform.api.commands.FundCommand; import org.mifosng.platform.api.commands.FundCommand;
import org.mifosng.platform.api.commands.GroupCommand; import org.mifosng.platform.api.commands.GroupCommand;
import org.mifosng.platform.api.commands.LoanProductCommand; import org.mifosng.platform.api.commands.LoanProductCommand;
@@ -39,14 +39,13 @@ import org.mifosng.platform.api.commands.SubmitLoanApplicationCommand;
import org.mifosng.platform.api.commands.UserCommand; import org.mifosng.platform.api.commands.UserCommand;
import org.mifosng.platform.api.data.AdditionalFieldsSetData; import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.ApiParameterError; import org.mifosng.platform.api.data.ApiParameterError;
import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.AuthenticatedUserData; import org.mifosng.platform.api.data.AuthenticatedUserData;
import org.mifosng.platform.api.data.ChargeData; import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData; import org.mifosng.platform.api.data.ClientLoanAccountSummaryCollectionData;
import org.mifosng.platform.api.data.ConfigurationData; import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.DepositProductData;
import org.mifosng.platform.api.data.DepositAccountData; 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.FundData;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
@@ -57,8 +56,6 @@ import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.api.data.NoteData; import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.SavingProductData; import org.mifosng.platform.api.data.SavingProductData;
import org.mifosng.platform.api.errorhandling.InvalidJsonException; import org.mifosng.platform.api.errorhandling.InvalidJsonException;
import org.mifosng.platform.api.errorhandling.UnsupportedParameterException; import org.mifosng.platform.api.errorhandling.UnsupportedParameterException;
@@ -494,110 +491,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
return json; return json;
} }
@Override
public String convertAppUserDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final AppUserData... users) {
final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "officeId", "officeName", "username", "firstname", "lastname", "email",
"allowedOffices", "availableRoles", "selectedRoles"));
final Set<String> parameterNamesToSkip = new HashSet<String>();
if (!responseParameters.isEmpty()) {
if (!supportedParameters.containsAll(responseParameters)) {
throw new UnsupportedParameterException(new ArrayList<String>(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 (users != null && users.length == 1) {
json = gsonDeserializer.toJson(users[0]);
} else {
json = gsonDeserializer.toJson(users);
}
return json;
}
@Override
public String convertRoleDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final RoleData... roles) {
final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "name", "description", "availablePermissions", "selectedPermissions"));
final Set<String> parameterNamesToSkip = new HashSet<String>();
if (!responseParameters.isEmpty()) {
if (!supportedParameters.containsAll(responseParameters)) {
throw new UnsupportedParameterException(new ArrayList<String>(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 (roles != null && roles.length == 1) {
json = gsonDeserializer.toJson(roles[0]);
} else {
json = gsonDeserializer.toJson(roles);
}
return json;
}
@Override
public String convertPermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final PermissionData... permissions) {
final Set<String> supportedParameters = new HashSet<String>(Arrays.asList("id", "name", "description", "code"));
final Set<String> parameterNamesToSkip = new HashSet<String>();
if (!responseParameters.isEmpty()) {
if (!supportedParameters.containsAll(responseParameters)) {
throw new UnsupportedParameterException(new ArrayList<String>(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 (permissions != null && permissions.length == 1) {
json = gsonDeserializer.toJson(permissions[0]);
} else {
json = gsonDeserializer.toJson(permissions);
}
return json;
}
@Override @Override
public String convertOfficeDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final OfficeData... offices) { public String convertOfficeDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final OfficeData... offices) {
@@ -0,0 +1,22 @@
package org.mifosng.platform.api.infrastructure;
import java.util.Collection;
import java.util.Set;
import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
public interface ApiJsonSerializerService {
String serializePermissionDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<PermissionData> permissions);
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<RoleData> roles);
String serializeRoleDataToJson(boolean prettyPrint, Set<String> responseParameters, RoleData role);
String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<AppUserData> users);
String serializeAppUserDataToJson(boolean prettyPrint, Set<String> responseParameters, AppUserData user);
}
@@ -0,0 +1,64 @@
package org.mifosng.platform.api.infrastructure;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.mifosng.platform.api.data.AppUserData;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.google.gson.Gson;
/**
* Implementation of {@link ApiJsonSerializerService} that uses google-gson to serialize Java object representation into JSON.
*/
@Service
public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerService {
private static final Set<String> PERMISSION_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "description", "code"));
private static final Set<String> ROLE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "name", "description", "availablePermissions", "selectedPermissions"));
private static final Set<String> APP_USER_DATA_PARAMETERS = new HashSet<String>(
Arrays.asList("id", "officeId", "officeName", "username", "firstname", "lastname", "email",
"allowedOffices", "availableRoles", "selectedRoles"));
private final GoogleGsonSerializerHelper helper;
@Autowired
public GoogleGsonApiJsonSerializerService(final GoogleGsonSerializerHelper helper) {
this.helper = helper;
}
@Override
public String serializePermissionDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<PermissionData> permissions) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(PERMISSION_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, permissions.toArray(new PermissionData[permissions.size()]));
}
@Override
public String serializeRoleDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<RoleData> roles) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(ROLE_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, roles.toArray(new RoleData[roles.size()]));
}
@Override
public String serializeRoleDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final RoleData role) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(ROLE_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, role);
}
@Override
public String serializeAppUserDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final Collection<AppUserData> users) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(APP_USER_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, users.toArray(new AppUserData[users.size()]));
}
@Override
public String serializeAppUserDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final AppUserData user) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(APP_USER_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, user);
}
}
@@ -0,0 +1,62 @@
package org.mifosng.platform.api.infrastructure;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.mifosng.platform.api.errorhandling.UnsupportedParameterException;
import org.springframework.stereotype.Service;
import com.google.gson.ExclusionStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* Helper class for serialization of java objects into JSON using google-gson.
*/
@Service
public class GoogleGsonSerializerHelper {
public Gson createGsonBuilderWithParameterExclusionSerializationStrategy(
final Set<String> supportedParameters,
final boolean prettyPrint,
final Set<String> responseParameters) {
final Set<String> parameterNamesToSkip = new HashSet<String>();
if (!responseParameters.isEmpty()) {
// strip out all know support parameters from expected response to
// see if unsupported parameters requested for response.
final Set<String> differentParametersDetectedSet = new HashSet<String>(responseParameters);
differentParametersDetectedSet.removeAll(supportedParameters);
if (!differentParametersDetectedSet.isEmpty()) {
throw new UnsupportedParameterException(new ArrayList<String>(differentParametersDetectedSet));
}
parameterNamesToSkip.addAll(supportedParameters);
parameterNamesToSkip.removeAll(responseParameters);
}
final ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip);
final GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy);
builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter());
builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter());
if (prettyPrint) {
builder.setPrettyPrinting();
}
return builder.create();
}
public String serializedJsonFrom(final Gson serializer, final Object[] dataObjects) {
return serializer.toJson(dataObjects);
}
public String serializedJsonFrom(final Gson serializer, final Object singleDataObject) {
return serializer.toJson(singleDataObject);
}
}
@@ -62,16 +62,13 @@ public class Role extends AbstractAuditableCustom<AppUser, Long> {
public RoleData toData() { public RoleData toData() {
RoleData data = new RoleData(this.getId(), this.name, this.description);
Collection<PermissionData> rolePermissions = new ArrayList<PermissionData>(); Collection<PermissionData> rolePermissions = new ArrayList<PermissionData>();
for (Permission permission : this.permissions) { for (Permission permission : this.permissions) {
PermissionData permissionData = permission.toData(); PermissionData permissionData = permission.toData();
rolePermissions.add(permissionData); rolePermissions.add(permissionData);
} }
data.setSelectedPermissions(rolePermissions);
return data; return new RoleData(this.getId(), this.name, this.description, rolePermissions);
} }
public void update(final RoleCommand command, final List<Permission> selectedPermissions) { public void update(final RoleCommand command, final List<Permission> selectedPermissions) {
@@ -79,9 +79,7 @@ public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformServic
List<RoleData> availableRoles = new ArrayList<RoleData>(this.roleReadPlatformService.retrieveAllRoles()); List<RoleData> availableRoles = new ArrayList<RoleData>(this.roleReadPlatformService.retrieveAllRoles());
AppUserData userData = new AppUserData(); AppUserData userData = new AppUserData(offices, availableRoles);
userData.setAllowedOffices(offices);
userData.setAvailableRoles(availableRoles);
return userData; return userData;
} }
@@ -98,21 +96,17 @@ public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformServic
List<RoleData> availableRoles = new ArrayList<RoleData>(this.roleReadPlatformService.retrieveAllRoles()); List<RoleData> availableRoles = new ArrayList<RoleData>(this.roleReadPlatformService.retrieveAllRoles());
List<RoleData> userRoleData = new ArrayList<RoleData>(); List<RoleData> selectedUserRoles = new ArrayList<RoleData>();
Set<Role> userRoles = user.getRoles(); Set<Role> userRoles = user.getRoles();
for (Role role : userRoles) { for (Role role : userRoles) {
userRoleData.add(role.toData()); selectedUserRoles.add(role.toData());
} }
availableRoles.removeAll(selectedUserRoles);
AppUserData userData = new AppUserData(user.getId(), AppUserData userData = new AppUserData(user.getId(),
user.getUsername(), user.getEmail(), user.getOffice().getId(), user.getOffice() user.getUsername(), user.getEmail(), user.getOffice().getId(), user.getOffice()
.getName()); .getName(), user.getFirstname(), user.getLastname(), availableRoles, selectedUserRoles);
userData.setFirstname(user.getFirstname());
userData.setLastname(user.getLastname());
availableRoles.removeAll(userRoleData);
userData.setAvailableRoles(availableRoles);
userData.setSelectedRoles(userRoleData);
return userData; return userData;
} }
@@ -139,9 +133,7 @@ public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformServic
// FIXME - change sql query to join to get office id and name information. // FIXME - change sql query to join to get office id and name information.
String officeName = fromOfficeList(this.offices, officeId); String officeName = fromOfficeList(this.offices, officeId);
AppUserData user = new AppUserData(id, username, email, officeId, officeName); AppUserData user = new AppUserData(id, username, email, officeId, officeName, firstname, lastname, new ArrayList<RoleData>(), new ArrayList<RoleData>());
user.setLastname(lastname);
user.setFirstname(firstname);
return user; return user;
} }
@@ -2,8 +2,10 @@ package org.mifosng.platform.user.service;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData; import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.exceptions.RoleNotFoundException; import org.mifosng.platform.exceptions.RoleNotFoundException;
import org.mifosng.platform.infrastructure.JdbcSupport; import org.mifosng.platform.infrastructure.JdbcSupport;
@@ -61,7 +63,8 @@ public class RoleReadPlatformServiceImpl implements RoleReadPlatformService {
String name = rs.getString("name"); String name = rs.getString("name");
String description = rs.getString("description"); String description = rs.getString("description");
return new RoleData(id, name, description); Collection<PermissionData> selectedPermissions = new ArrayList<PermissionData>(0);
return new RoleData(id, name, description, selectedPermissions);
} }
public String schema() { public String schema() {