package org.multibit.mbm.api.response.hal; import com.google.common.base.Optional; import com.theoryinpractise.halbuilder.ResourceFactory; import com.theoryinpractise.halbuilder.spi.Resource; import org.multibit.mbm.api.hal.HalMediaType; import org.multibit.mbm.api.hal.MinifiedJsonRenderer; import org.multibit.mbm.api.hal.MinifiedXmlRenderer; import org.multibit.mbm.core.model.User; import javax.ws.rs.core.UriInfo; /** * <p>Abstract base class to provide the following to subclasses:</p> * <ul> * <li>Provision of common support methods</li> * </ul> * * @since 0.0.1 *   */ public abstract class BaseBridge<T> { protected final UriInfo uriInfo; protected final Optional<User> principal; /** * @param uriInfo The {@link UriInfo} containing the originating request information * @param principal An optional {@link User} to provide a security principal */ public BaseBridge(UriInfo uriInfo, Optional<User> principal) { this.uriInfo = uriInfo; this.principal = principal; } /** * @return A {@link ResourceFactory} configured for production use */ protected ResourceFactory getResourceFactory() { ResourceFactory resourceFactory = new ResourceFactory(uriInfo.getBaseUri().toString()); // Override the default configuration resourceFactory.withRenderer(HalMediaType.APPLICATION_HAL_JSON, MinifiedJsonRenderer.class); resourceFactory.withRenderer(HalMediaType.APPLICATION_HAL_XML, MinifiedXmlRenderer.class); return resourceFactory; } /** * Bridges from entity to resource, providing all necessary context extracted from the entity * * @param entity The entity to represent as a {@link Resource} * @return The {@link Resource} */ public abstract Resource toResource(T entity); }