/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package storageapi; import java.net.ConnectException; import java.util.concurrent.ExecutionException; import play.mvc.Http; import util.MessagesUtils; import com.google.gson.JsonSyntaxException; /** * @author Chris Dail */ public class APIResponse<T> { public Integer status; public Throwable cause; public T value; public APIResponse() { } public APIResponse(Integer status, T value) { this.status = status; this.value = value; } public APIResponse(Throwable cause) { while (cause instanceof ExecutionException) { cause = cause.getCause(); } this.cause = cause; } public boolean isSuccessful() { if (cause != null || status == null) { return false; } return Http.StatusCode.success(status); } public boolean isError() { if (cause != null || status == null) { return true; } return Http.StatusCode.error(status); } public boolean isConnectionError() { return cause != null && cause instanceof ConnectException; } public String getErrorMessage() { if (status != null) { String messageKey = "storageapi.error.unknown"; if (status == Http.StatusCode.NOT_FOUND) { messageKey = "storageapi.error.404"; } else if (status == Http.StatusCode.BAD_REQUEST) { messageKey = "storageapi.error.400"; } else if (status == Http.StatusCode.INTERNAL_ERROR) { messageKey = "storageapi.error.500"; } return MessagesUtils.get(messageKey, status); } // Exceptions String messageKey = null; if (cause instanceof ConnectException) { messageKey = "storageapi.error.connect"; } else if (cause instanceof InterruptedException) { messageKey = "storageapi.error.timeout"; } else if (cause instanceof JsonSyntaxException) { messageKey = "storageapi.error.json"; } if (messageKey != null) { return MessagesUtils.get(messageKey); } else if (cause != null) { return cause.getMessage(); } else { return MessagesUtils.get("storageapi.error.exception"); } } }