package com.jfrog.bintray.client.api;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpResponseException;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import java.io.IOException;
/**
* An exception thrown for failed operations against the Bintray api.
*
* @author danf
*/
public class BintrayCallException extends HttpResponseException {
private int statusCode;
private String reason;
private String message;
public BintrayCallException(int statusCode, String reason, String message) {
super(statusCode, reason);
this.statusCode = statusCode;
this.reason = reason;
this.message = message;
}
public BintrayCallException(HttpResponse response) {
super(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase());
String message = " ";
String entity = null;
int statusCode = response.getStatusLine().getStatusCode();
if (response.getEntity() != null && statusCode != 405 && statusCode != 500) {
try {
entity = IOUtils.toString(response.getEntity().getContent());
ObjectMapper mapper = ObjectMapperHelper.get();
JsonNode node = mapper.readTree(entity);
message = node.get("message").getTextValue();
} catch (IOException | NullPointerException e) {
//Null entity?
if (entity != null) {
message = entity;
}
}
}
this.statusCode = statusCode;
this.reason = response.getStatusLine().getReasonPhrase();
this.message = message;
}
public BintrayCallException(Exception e) {
super(HttpStatus.SC_BAD_REQUEST, e.getMessage());
this.statusCode = HttpStatus.SC_BAD_REQUEST;
this.reason = e.getMessage();
this.message = (e.getCause() == null) ? " " : " : " + e.getCause().getMessage();
}
public int getStatusCode() {
return statusCode;
}
public String getReason() {
return reason;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String newMessage) {
this.message = newMessage;
}
@Override
public String toString() {
return statusCode + ", " + reason + " " + message;
}
}