1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.atlassian.jira.rest.client.internal.jersey;
18
19 import com.atlassian.jira.rest.client.MetadataRestClient;
20 import com.atlassian.jira.rest.client.ProgressMonitor;
21 import com.atlassian.jira.rest.client.domain.IssueType;
22 import com.atlassian.jira.rest.client.domain.IssuelinksType;
23 import com.atlassian.jira.rest.client.domain.Priority;
24 import com.atlassian.jira.rest.client.domain.Resolution;
25 import com.atlassian.jira.rest.client.domain.ServerInfo;
26 import com.atlassian.jira.rest.client.domain.Status;
27 import com.atlassian.jira.rest.client.internal.json.IssueLinkTypesJsonParser;
28 import com.atlassian.jira.rest.client.internal.json.IssueTypeJsonParser;
29 import com.atlassian.jira.rest.client.internal.json.PriorityJsonParser;
30 import com.atlassian.jira.rest.client.internal.json.ResolutionJsonParser;
31 import com.atlassian.jira.rest.client.internal.json.ServerInfoJsonParser;
32 import com.atlassian.jira.rest.client.internal.json.StatusJsonParser;
33 import com.sun.jersey.api.client.WebResource;
34 import com.sun.jersey.client.apache.ApacheHttpClient;
35 import org.codehaus.jettison.json.JSONObject;
36
37 import javax.ws.rs.core.UriBuilder;
38 import java.net.URI;
39 import java.util.concurrent.Callable;
40
41
42
43
44
45
46 public class JerseyMetadataRestClient extends AbstractJerseyRestClient implements MetadataRestClient {
47 private final String SERVER_INFO_RESOURCE = "/serverInfo";
48 private final ServerInfoJsonParser serverInfoJsonParser = new ServerInfoJsonParser();
49 private final IssueTypeJsonParser issueTypeJsonParser = new IssueTypeJsonParser();
50 private final StatusJsonParser statusJsonParser = new StatusJsonParser();
51 private final PriorityJsonParser priorityJsonParser = new PriorityJsonParser();
52 private final ResolutionJsonParser resolutionJsonParser = new ResolutionJsonParser();
53 private final IssueLinkTypesJsonParser issueLinkTypesJsonParser = new IssueLinkTypesJsonParser();
54
55 public JerseyMetadataRestClient(URI baseUri, ApacheHttpClient client) {
56 super(baseUri, client);
57 }
58
59 @Override
60 public IssueType getIssueType(final URI uri, ProgressMonitor progressMonitor) {
61 return getAndParse(uri, issueTypeJsonParser, progressMonitor);
62 }
63
64 @Override
65 public Iterable<IssuelinksType> getIssueLinkTypes(ProgressMonitor progressMonitor) {
66 final URI uri = UriBuilder.fromUri(baseUri).path("issueLinkType").build();
67 return getAndParse(uri, issueLinkTypesJsonParser, progressMonitor);
68 }
69
70 @Override
71 public Status getStatus(final URI uri, ProgressMonitor progressMonitor) {
72 return getAndParse(uri, statusJsonParser, progressMonitor);
73 }
74
75 @Override
76 public Priority getPriority(final URI uri, ProgressMonitor progressMonitor) {
77 return getAndParse(uri, priorityJsonParser, progressMonitor);
78 }
79
80 @Override
81 public Resolution getResolution(URI uri, ProgressMonitor progressMonitor) {
82 return getAndParse(uri, resolutionJsonParser, progressMonitor);
83 }
84
85 @Override
86 public ServerInfo getServerInfo(ProgressMonitor progressMonitor) {
87 return invoke(new Callable<ServerInfo>() {
88 @Override
89 public ServerInfo call() throws Exception {
90 final WebResource serverInfoResource = client.resource(UriBuilder.fromUri(baseUri)
91 .path(SERVER_INFO_RESOURCE).build());
92 return serverInfoJsonParser.parse(serverInfoResource.get(JSONObject.class));
93 }
94 });
95 }
96 }