package com.atlassian.labs.speakeasy.rest;
import com.atlassian.labs.speakeasy.external.SpeakeasyService;
import com.atlassian.labs.speakeasy.manager.PluginOperationFailedException;
import com.atlassian.sal.api.user.UserManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
/**
*
*/
@Provider
public class PluginOperationFailedExceptionMapper implements ExceptionMapper<PluginOperationFailedException>
{
private final SpeakeasyService speakeasyService;
private final UserManager userManager;
private static final Logger log = LoggerFactory.getLogger(PluginOperationFailedExceptionMapper.class);
public PluginOperationFailedExceptionMapper(SpeakeasyService speakeasyService, UserManager userManager)
{
this.speakeasyService = speakeasyService;
this.userManager = userManager;
}
public Response toResponse(PluginOperationFailedException exception)
{
if (exception.getPluginKey() != null)
{
try
{
exception.setPlugin(speakeasyService.getRemotePlugin(exception.getPluginKey(), userManager.getRemoteUsername()));
}
catch (Throwable t)
{
// ignore
}
}
log.error(exception.getError(), exception.getCause());
return Response.status(400).
entity(exception).
type("application/json").
build();
}
}