filtering users

This commit is contained in:
John Woodlock
2012-05-26 16:32:27 +10:00
parent b96764da56
commit c11adc2da8
4 changed files with 174 additions and 99 deletions
@@ -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;
@@ -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();
@@ -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<AppUserData> 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<AppUserData> 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();
}
}
@@ -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<String> filterFields = new HashSet<String>();
StringTokenizer st = new StringTokenizer(fields, ",");
while (st.hasMoreTokens()) {
filterFields.add(st.nextToken().trim());
}
if (filterName.equals("roleFilter")) {
Set<String> permissionFields = new HashSet<String>();
//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<String> filterFields = new HashSet<String>();
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<String> permissionFields = new HashSet<String>();
// 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<String> roleFields = new HashSet<String>();
roleFields.add("id");
roleFields.add("name");
roleFields.add("description");
roleFields.add("availablePermissions");
roleFields.add("selectedPermissions");
// Ask keith which ones to show
Set<String> permissionFields = new HashSet<String>();
// 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;