/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.user; import java.net.URI; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.joda.beans.impl.flexi.FlexiBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.master.user.ManageableRole; import com.opengamma.master.user.RoleEventHistoryRequest; import com.opengamma.master.user.RoleEventHistoryResult; import com.opengamma.master.user.RoleForm; import com.opengamma.master.user.RoleFormError; import com.opengamma.master.user.RoleFormException; /** * RESTful resource for a role. */ @Path("/roles/name/{roleName}") public class WebRoleResource extends AbstractWebRoleResource { /** Logger. */ private static final Logger s_logger = LoggerFactory.getLogger(WebRoleResource.class); /** * The ftl file. */ private static final String ROLE_PAGE = HTML_DIR + "role.ftl"; /** * The ftl file. */ private static final String ROLE_UPDATE_PAGE = HTML_DIR + "role-update.ftl"; /** * Creates the resource. * @param parent the parent resource, not null */ public WebRoleResource(final AbstractWebRoleResource parent) { super(parent); } //------------------------------------------------------------------------- @GET @Produces(MediaType.TEXT_HTML) public String getHTML() { final FlexiBean out = createRootData(); return getFreemarker().build(ROLE_PAGE, out); } //------------------------------------------------------------------------- @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.TEXT_HTML) public Response postHTML( @FormParam("rolename") String roleName, @FormParam("description") String description, @FormParam("addroles") String addRoles, @FormParam("removeroles") String removeRoles, @FormParam("addperms") String addPerms, @FormParam("removeperms") String removePerms, @FormParam("addusers") String addUsers, @FormParam("removeusers") String removeUsers) { try { RoleForm form = new RoleForm(data().getRole()); form.setRoleName(roleName); form.setDescription(description); form.setAddRoles(addRoles); form.setRemoveRoles(removeRoles); form.setAddPermissions(addPerms); form.setRemovePermissions(removePerms); form.setAddUsers(addUsers); form.setRemoveUsers(removeUsers); ManageableRole updated = form.update(data().getUserMaster()); URI uri = WebRoleResource.uri(data(), updated.getRoleName()); return Response.seeOther(uri).build(); } catch (RoleFormException ex) { ex.logUnexpected(s_logger); FlexiBean out = createRootData(); out.put("rolename", roleName); out.put("description", description); out.put("addroles", addRoles); out.put("removeroles", removeRoles); out.put("addperms", addPerms); out.put("removeperms", removePerms); out.put("addusers", addUsers); out.put("removeusers", removeUsers); for (RoleFormError error : ex.getErrors()) { out.put("err_" + error.toLowerCamel(), true); } return Response.ok(getFreemarker().build(ROLE_UPDATE_PAGE, out)).build(); } } //------------------------------------------------------------------------- @DELETE @Produces(MediaType.TEXT_HTML) public Response deleteHTML() { ManageableRole role = data().getRole(); data().getRoleMaster().removeById(role.getUniqueId().getObjectId()); URI uri = WebRoleResource.uri(data()); return Response.seeOther(uri).build(); } //------------------------------------------------------------------------- /** * Creates the output root data. * @return the output root data, not null */ @Override protected FlexiBean createRootData() { FlexiBean out = super.createRootData(); ManageableRole role = data().getRole(); out.put("role", role); out.put("deleted", role.getObjectId() == null); out.put("description", role.getDescription()); RoleEventHistoryRequest historyRequest = new RoleEventHistoryRequest(data().getRole().getRoleName()); RoleEventHistoryResult history = data().getRoleMaster().eventHistory(historyRequest); out.put("eventHistory", history); return out; } //------------------------------------------------------------------------- /** * Builds a URI for this resource. * @param data the data, not null * @return the URI, not null */ public static URI uri(final WebRoleData data) { return uri(data, null); } /** * Builds a URI for this resource. * @param data the data, not null * @param overrideRoleName the override role name, null uses information from data * @return the URI, not null */ public static URI uri(final WebRoleData data, final String overrideRoleName) { String roleName = data.getBestRoleUriName(overrideRoleName); return data.getUriInfo().getBaseUriBuilder().path(WebRoleResource.class).build(roleName); } }