1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Created by nishio
*/
public class BitbucketApiClient {
private static final Logger logger = Logger.getLogger(BitbucketApiClient.class.getName());
private static final String BITBUCKET_HOST = "bitbucket.org";
private static final String V1_API_BASE_URL = "https://bitbucket.org/api/1.0/repositories/";
private static final String V2_API_BASE_URL = "https://bitbucket.org/api/2.0/repositories/";
private String owner;
private String repositoryName;
private Credentials credentials;
public BitbucketApiClient(String username, String password, String owner, String repositoryName) {
this.credentials = new UsernamePasswordCredentials(username, password);
this.owner = owner;
this.repositoryName = repositoryName;
}
public List<BitbucketPullRequestResponseValue> getPullRequests() {
String response = getRequest(V2_API_BASE_URL + this.owner + "/" + this.repositoryName + "/pullrequests/");
try {
return parsePullRequestJson(response).getPrValues();
} catch(Exception e) {
logger.log(Level.WARNING, "invalid pull request response.", e);
}
return null;
}
public List<BitbucketPullRequestComment> getPullRequestComments(String commentOwnerName, String commentRepositoryName, String pullRequestId) {
String response = getRequest(
V1_API_BASE_URL + commentOwnerName + "/" + commentRepositoryName + "/pullrequests/" + pullRequestId + "/comments");
try {
return parseCommentJson(response);
} catch(Exception e) {
logger.log(Level.WARNING, "invalid pull request response.", e);
}
return null;
}
public void postPullRequestComment(String pullRequestId, String comment) {
String path = V1_API_BASE_URL + this.owner + "/" + this.repositoryName + "/pullrequests/" + pullRequestId + "/comments";
try {
NameValuePair content = new NameValuePair("content", comment);
postRequest(path, new NameValuePair[]{ content });
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private String getRequest(String path) {
HttpClient client = new HttpClient();
client.getState().setCredentials(AuthScope.ANY, credentials);
GetMethod httpget = new GetMethod(path);
client.getParams().setAuthenticationPreemptive(true);
String response = null;
try {
client.executeMethod(httpget);
response = httpget.getResponseBodyAsString();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
private void postRequest(String path, NameValuePair[] params) throws UnsupportedEncodingException {
HttpClient client = new HttpClient();
client.getState().setCredentials(AuthScope.ANY, credentials);
PostMethod httppost = new PostMethod(path);
httppost.setRequestBody(params);
client.getParams().setAuthenticationPreemptive(true);
try {
client.executeMethod(httppost);
String response = httppost.getResponseBodyAsString();
logger.info("API Request Response: " + response);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private BitbucketPullRequestResponse parsePullRequestJson(String response) throws IOException {
ObjectMapper mapper = new ObjectMapper();
BitbucketPullRequestResponse parsedResponse;
parsedResponse = mapper.readValue(response, BitbucketPullRequestResponse.class);
return parsedResponse;
}
private List<BitbucketPullRequestComment> parseCommentJson(String response) throws IOException {
ObjectMapper mapper = new ObjectMapper();
List<BitbucketPullRequestComment> parsedResponse;
parsedResponse = mapper.readValue(
response,
new TypeReference<List<BitbucketPullRequestComment>>() {
});
return parsedResponse;
}
}
|