diff --git a/mifosng-data/src/main/java/org/mifosng/data/AppUserData.java b/mifosng-data/src/main/java/org/mifosng/data/AppUserData.java index e7879f647..252bc6445 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/AppUserData.java +++ b/mifosng-data/src/main/java/org/mifosng/data/AppUserData.java @@ -5,7 +5,12 @@ import java.util.List; import javax.xml.bind.annotation.XmlRootElement; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; +import org.codehaus.jackson.map.annotate.JsonFilter; + @XmlRootElement(name = "user") +@JsonIgnoreProperties({ "orgId" }) +@JsonFilter("userFilter") public class AppUserData { private Long id; diff --git a/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java b/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java index 47ef8ebeb..f0da59e47 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java +++ b/mifosng-data/src/main/java/org/mifosng/data/PermissionData.java @@ -23,8 +23,8 @@ public class PermissionData implements Serializable { // } - public PermissionData(final Long id, final Long orgId, - final String name, final String description, final String code, int groupType) { + public PermissionData(final Long id, final Long orgId, final String name, + final String description, final String code, int groupType) { this.id = id; this.orgId = orgId; this.name = name; @@ -32,13 +32,13 @@ public class PermissionData implements Serializable { this.code = code; this.groupType = groupType; } - + @Override public boolean equals(Object obj) { PermissionData data = (PermissionData) obj; return this.code.equalsIgnoreCase(data.code); } - + @Override public int hashCode() { return this.code.hashCode(); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/UserApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/UserApiResource.java index 14f0b51ab..bc5bbd774 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/UserApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/UserApiResource.java @@ -10,13 +10,15 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import org.mifosng.data.AppUserData; import org.mifosng.data.EntityIdentifier; -import org.mifosng.data.UserList; import org.mifosng.data.command.UserCommand; +import org.mifosng.platform.api.infrastructure.ApiJSONFormattingService; import org.mifosng.platform.user.service.AppUserReadPlatformService; import org.mifosng.platform.user.service.AppUserWritePlatformService; import org.springframework.beans.factory.annotation.Autowired; @@ -27,75 +29,91 @@ import org.springframework.stereotype.Component; @Component @Scope("singleton") public class UserApiResource { - - @Autowired + + private String allowedFieldList = "allowedOffices,availableRoles"; + private String filterName = "userFilter"; + + @Autowired private AppUserReadPlatformService appUserReadPlatformService; @Autowired private AppUserWritePlatformService appUserWritePlatformService; - @GET - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({MediaType.APPLICATION_JSON}) - public Response retrieveUsers() { - - Collection users = this.appUserReadPlatformService.retrieveAllUsers(); + @Autowired + private ApiJSONFormattingService jsonFormattingService; - return Response.ok().entity(new UserList(users)).build(); + @GET + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) + public String retrieveUsers(@Context UriInfo uriInfo) { + + Collection users = this.appUserReadPlatformService + .retrieveAllUsers(); + + String selectedFields = "id,officeId,officeName,username,firstname,lastname,email"; + return this.jsonFormattingService.convertRequest(users, filterName, + allowedFieldList, selectedFields, uriInfo.getQueryParameters()); } - + @GET @Path("{userId}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({ MediaType.APPLICATION_JSON}) - public Response retrieveUser(@PathParam("userId") final Long userId) { - + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) + public String retrieveUser(@PathParam("userId") final Long userId, + @Context UriInfo uriInfo) { + AppUserData user = this.appUserReadPlatformService.retrieveUser(userId); - - return Response.ok().entity(user).build(); + + String selectedFields = ""; + return this.jsonFormattingService.convertRequest(user, filterName, + allowedFieldList, selectedFields, uriInfo.getQueryParameters()); } - - @GET + + @GET @Path("template") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({ MediaType.APPLICATION_JSON}) - public Response newUserDetails() { - - AppUserData newUser = this.appUserReadPlatformService.retrieveNewUserDetails(); - - return Response.ok().entity(newUser).build(); + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) + public String newUserDetails(@Context UriInfo uriInfo) { + + AppUserData newUser = this.appUserReadPlatformService + .retrieveNewUserDetails(); + + String selectedFields = allowedFieldList; + return this.jsonFormattingService.convertRequest(newUser, filterName, + allowedFieldList, selectedFields, uriInfo.getQueryParameters()); } @POST - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({ MediaType.APPLICATION_JSON}) + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) public Response createUser(UserCommand command) { Long userId = this.appUserWritePlatformService.createUser(command); return Response.ok().entity(new EntityIdentifier(userId)).build(); } - + @DELETE @Path("{userId}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({ MediaType.APPLICATION_JSON}) + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) public Response deleteUser(@PathParam("userId") final Long userId) { this.appUserWritePlatformService.deleteUser(userId); return Response.ok().build(); } - + @PUT @Path("{userId}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) - @Produces({ MediaType.APPLICATION_JSON}) - public Response updateUser(@PathParam("userId") final Long userId, UserCommand command) { - + @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @Produces({ MediaType.APPLICATION_JSON }) + public Response updateUser(@PathParam("userId") final Long userId, + UserCommand command) { + command.setId(userId); - + this.appUserWritePlatformService.updateUser(command); - + return Response.ok().entity(new EntityIdentifier(userId)).build(); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java index 715aecdab..b4f550cb5 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java @@ -86,62 +86,8 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { String filterType, String fields, boolean prettyOutput) { try { - String json = ""; - // String myFilter = "myFilter"; - FilterProvider filters = null; - Set filterFields = new HashSet(); - StringTokenizer st = new StringTokenizer(fields, ","); - while (st.hasMoreTokens()) { - filterFields.add(st.nextToken().trim()); - } - - if (filterName.equals("roleFilter")) { - - Set permissionFields = new HashSet(); - //Ask keith which ones to show - permissionFields.add("id"); - permissionFields.add("name"); - permissionFields.add("description"); - permissionFields.add("code"); - permissionFields.add("groupType"); - - if (filterType.equals("I")) { - filters = new SimpleFilterProvider() - .addFilter( - filterName, - SimpleBeanPropertyFilter - .filterOutAllExcept(filterFields)) - .addFilter( - "permissionFilter", - SimpleBeanPropertyFilter - .filterOutAllExcept(permissionFields)); - - } else { - filters = new SimpleFilterProvider() - .addFilter( - filterName, - SimpleBeanPropertyFilter - .serializeAllExcept(filterFields)) - .addFilter( - "permissionFilter", - SimpleBeanPropertyFilter - .filterOutAllExcept(permissionFields)); - } - - } else { - - if (filterType.equals("I")) { - filters = new SimpleFilterProvider().addFilter(filterName, - SimpleBeanPropertyFilter - .filterOutAllExcept(filterFields)); - - } else { - filters = new SimpleFilterProvider().addFilter(filterName, - SimpleBeanPropertyFilter - .serializeAllExcept(filterFields)); - } - } + FilterProvider filters = buildFilter(filterName, filterType, fields); ObjectWriter jsonWriter = null; if (prettyOutput) { jsonWriter = new ObjectMapper() @@ -150,9 +96,8 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { jsonWriter = new ObjectMapper().writer(); } - json = jsonWriter.withFilters(filters).writeValueAsString( + return jsonWriter.withFilters(filters).writeValueAsString( dataObject); - return json; } catch (JsonGenerationException e) { throw new PlatformInternalServerException( "error.msg.platform.json.generation", @@ -171,6 +116,113 @@ public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { } } + private FilterProvider buildFilter(String filterName, String filterType, + String fields) { + FilterProvider filters = null; + + Set filterFields = new HashSet(); + StringTokenizer st = new StringTokenizer(fields, ","); + while (st.hasMoreTokens()) { + filterFields.add(st.nextToken().trim()); + } + + if (filterName.equals("myFilter")) { + + if (filterType.equals("I")) { + return new SimpleFilterProvider().addFilter(filterName, + SimpleBeanPropertyFilter + .filterOutAllExcept(filterFields)); + + } else { + return new SimpleFilterProvider().addFilter(filterName, + SimpleBeanPropertyFilter + .serializeAllExcept(filterFields)); + } + } + + if (filterName.equals("roleFilter")) { + + Set permissionFields = new HashSet(); + // Ask keith which ones to show + permissionFields.add("id"); + permissionFields.add("name"); + permissionFields.add("description"); + permissionFields.add("code"); + permissionFields.add("groupType"); + + if (filterType.equals("I")) { + return new SimpleFilterProvider().addFilter( + filterName, + SimpleBeanPropertyFilter + .filterOutAllExcept(filterFields)).addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + + } else { + return new SimpleFilterProvider().addFilter( + filterName, + SimpleBeanPropertyFilter + .serializeAllExcept(filterFields)).addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + } + + } + + if (filterName.equals("userFilter")) { + + Set roleFields = new HashSet(); + roleFields.add("id"); + roleFields.add("name"); + roleFields.add("description"); + roleFields.add("availablePermissions"); + roleFields.add("selectedPermissions"); + // Ask keith which ones to show + Set permissionFields = new HashSet(); + // Ask keith which ones to show + permissionFields.add("id"); + permissionFields.add("name"); + permissionFields.add("description"); + permissionFields.add("code"); + permissionFields.add("groupType"); + + if (filterType.equals("I")) { + return new SimpleFilterProvider() + .addFilter( + filterName, + SimpleBeanPropertyFilter + .filterOutAllExcept(filterFields)) + .addFilter( + "roleFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(roleFields)) + .addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + + } else { + return new SimpleFilterProvider() + .addFilter( + filterName, + SimpleBeanPropertyFilter + .serializeAllExcept(filterFields)) + .addFilter( + "roleFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(roleFields)) + .addFilter( + "permissionFilter", + SimpleBeanPropertyFilter + .filterOutAllExcept(permissionFields)); + } + + } + return filters; + } + private Boolean isTrue(String param) { if (param != null && param.equalsIgnoreCase("true")) return true;