package com.aol.micro.server.general.exception.mapper;
import java.io.EOFException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import javax.ws.rs.core.Response.Status;
import org.jooq.lambda.tuple.Tuple2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
@Component
public class MapOfExceptionsToErrorCodes {
public static final String INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR";
public static final String EMPTY_REQUEST = "EMPTY_REQUEST";
public static final String JSON_PROCESSING_EXCEPTION = "JSON_PROCESSING_EXCEPTION";
public static final String NOT_FOUND = "NOT_FOUND";
private static final String UNSUPPORTED_MEDIA_TYPE = "UNSUPPORTED_MEDIA_TYPE";
private volatile static LinkedHashMap<Class<? extends Exception>, Tuple2<String, Status>> mapOfExceptionsToErrorCodes = createMap();
private static LinkedHashMap<Class<? extends Exception>, Tuple2<String, Status>> createMap(){
LinkedHashMap<Class<? extends Exception>, Tuple2<String, Status>> mapOfExceptionsToErrorCodes = new LinkedHashMap<>();
mapOfExceptionsToErrorCodes.put(EOFException.class, new Tuple2<String, Status>(EMPTY_REQUEST, Status.BAD_REQUEST));
mapOfExceptionsToErrorCodes.put(JsonProcessingException.class, new Tuple2<String, Status>(JSON_PROCESSING_EXCEPTION, Status.BAD_REQUEST));
return mapOfExceptionsToErrorCodes;
}
private volatile static Optional<ExtensionMapOfExceptionsToErrorCodes> extensions = Optional.empty();
public static Map<Class<? extends Exception>, Tuple2<String, Status>> getMergedMappings(){
Map<Class<? extends Exception>, Tuple2<String, Status>> result = new LinkedHashMap<>();
result.putAll(mapOfExceptionsToErrorCodes);
extensions
.ifPresent(ext->result.putAll(ext.getErrorMappings()));
return result;
}
//@Autowired(required=false)
public MapOfExceptionsToErrorCodes(){
}
@Autowired(required=false)
public MapOfExceptionsToErrorCodes(ExtensionMapOfExceptionsToErrorCodes ext){
MapOfExceptionsToErrorCodes.extensions = Optional.ofNullable(ext);
}
}