package org.multibit.mbm.api.response.hal.role; import com.google.common.base.Optional; import com.theoryinpractise.halbuilder.spi.Resource; import org.multibit.mbm.api.response.hal.BaseBridge; import org.multibit.mbm.auth.Authority; import org.multibit.mbm.core.model.Role; import org.multibit.mbm.core.model.User; import org.multibit.mbm.resources.ResourceAsserts; import javax.ws.rs.core.UriInfo; /** * <p>Bridge to provide the following to {@link org.multibit.mbm.core.model.User}:</p> * <ul> * <li>Creates a representation of a single {@link org.multibit.mbm.core.model.User} update for an administrator</li> * </ul> * * @since 0.0.1 */ public class AdminRoleBridge extends BaseBridge<Role> { /** * @param uriInfo The {@link javax.ws.rs.core.UriInfo} containing the originating request information * @param principal An optional {@link org.multibit.mbm.core.model.User} to provide a security principal */ public AdminRoleBridge(UriInfo uriInfo, Optional<User> principal) { super(uriInfo, principal); } public Resource toResource(Role role) { ResourceAsserts.assertNotNull(role, "role"); ResourceAsserts.assertNotNull(role.getId(),"id"); // Build the representation Resource roleResource = getResourceFactory().newResource("/role/" + role.getId()) // Must use individual property entries due to collections .withProperty("name", role.getName()) .withProperty("description", role.getDescription()) .withProperty("internal",role.isInternal()) // End of build ; // Build a sub-resource representing all the authorities bound to this Role Resource authoritiesResource = getResourceFactory().newResource("authorities"); for (Authority authority : role.getAuthorities()) { authoritiesResource.withProperty(authority.name(),Boolean.TRUE); } roleResource.withSubresource("authorities", authoritiesResource); return roleResource; } }