001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.http.commons.exceptionhandlers;
007
008import org.fcrepo.kernel.api.exception.ServerManagedPropertyException;
009
010import org.slf4j.Logger;
011
012import javax.servlet.ServletContext;
013import javax.ws.rs.core.Context;
014import javax.ws.rs.core.Link;
015import javax.ws.rs.core.Response;
016import javax.ws.rs.core.UriInfo;
017import javax.ws.rs.ext.Provider;
018
019import static javax.ws.rs.core.Response.Status.CONFLICT;
020import static javax.ws.rs.core.Response.status;
021import static org.fcrepo.http.commons.domain.RDFMediaType.TEXT_PLAIN_WITH_CHARSET;
022import static org.slf4j.LoggerFactory.getLogger;
023
024/**
025 * @author cabeer
026 * @author whikloj
027 * @since 10/1/14
028 */
029@Provider
030public class ServerManagedPropertyExceptionMapper extends ConstraintExceptionMapper<ServerManagedPropertyException>
031    implements ExceptionDebugLogging {
032
033    private static final Logger LOGGER =
034            getLogger(ServerManagedPropertyExceptionMapper.class);
035
036    @Context
037    private UriInfo uriInfo;
038
039    @Context
040    private ServletContext context;
041
042    @Override
043    public Response toResponse(final ServerManagedPropertyException e) {
044        debugException(this, e, LOGGER);
045        final Link link = buildConstraintLink(e, context, uriInfo);
046        final String msg = e.getMessage();
047        return status(CONFLICT).entity(msg).links(link).type(TEXT_PLAIN_WITH_CHARSET).build();
048    }
049}