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.GenericJsonArrayParser;
28 import com.atlassian.jira.rest.client.internal.json.IssueLinkTypesJsonParser;
29 import com.atlassian.jira.rest.client.internal.json.IssueTypeJsonParser;
30 import com.atlassian.jira.rest.client.internal.json.PriorityJsonParser;
31 import com.atlassian.jira.rest.client.internal.json.ResolutionJsonParser;
32 import com.atlassian.jira.rest.client.internal.json.ServerInfoJsonParser;
33 import com.atlassian.jira.rest.client.internal.json.StatusJsonParser;
34 import com.sun.jersey.api.client.WebResource;
35 import com.sun.jersey.client.apache.ApacheHttpClient;
36 import org.codehaus.jettison.json.JSONObject;
37
38 import javax.ws.rs.core.UriBuilder;
39 import java.net.URI;
40 import java.util.concurrent.Callable;
41
42
43
44
45
46
47 public class JerseyMetadataRestClient extends AbstractJerseyRestClient implements MetadataRestClient {
48 private final String SERVER_INFO_RESOURCE = "/serverInfo";
49 private final ServerInfoJsonParser serverInfoJsonParser = new ServerInfoJsonParser();
50 private final IssueTypeJsonParser issueTypeJsonParser = new IssueTypeJsonParser();
51 private final GenericJsonArrayParser<IssueType> issueTypesJsonParser = GenericJsonArrayParser.create(issueTypeJsonParser);
52 private final StatusJsonParser statusJsonParser = new StatusJsonParser();
53 private final PriorityJsonParser priorityJsonParser = new PriorityJsonParser();
54 private final GenericJsonArrayParser<Priority> prioritiesJsonParser = GenericJsonArrayParser.create(priorityJsonParser);
55 private final ResolutionJsonParser resolutionJsonParser = new ResolutionJsonParser();
56 private final GenericJsonArrayParser<Resolution> resolutionsJsonParser = GenericJsonArrayParser.create(resolutionJsonParser);
57 private final IssueLinkTypesJsonParser issueLinkTypesJsonParser = new IssueLinkTypesJsonParser();
58
59 public JerseyMetadataRestClient(URI baseUri, ApacheHttpClient client) {
60 super(baseUri, client);
61 }
62
63 @Override
64 public IssueType getIssueType(final URI uri, ProgressMonitor progressMonitor) {
65 return getAndParse(uri, issueTypeJsonParser, progressMonitor);
66 }
67
68 @Override
69 public Iterable<IssueType> getIssueTypes(ProgressMonitor progressMonitor) {
70 final URI uri = UriBuilder.fromUri(baseUri).path("issuetype").build();
71 return getAndParse(uri, issueTypesJsonParser, progressMonitor);
72 }
73
74 @Override
75 public Iterable<IssuelinksType> getIssueLinkTypes(ProgressMonitor progressMonitor) {
76 final URI uri = UriBuilder.fromUri(baseUri).path("issueLinkType").build();
77 return getAndParse(uri, issueLinkTypesJsonParser, progressMonitor);
78 }
79
80 @Override
81 public Status getStatus(final URI uri, ProgressMonitor progressMonitor) {
82 return getAndParse(uri, statusJsonParser, progressMonitor);
83 }
84
85 @Override
86 public Priority getPriority(final URI uri, ProgressMonitor progressMonitor) {
87 return getAndParse(uri, priorityJsonParser, progressMonitor);
88 }
89
90 @Override
91 public Iterable<Priority> getPriorities(ProgressMonitor progressMonitor) {
92 final URI uri = UriBuilder.fromUri(baseUri).path("priority").build();
93 return getAndParse(uri, prioritiesJsonParser, progressMonitor);
94 }
95
96 @Override
97 public Resolution getResolution(URI uri, ProgressMonitor progressMonitor) {
98 return getAndParse(uri, resolutionJsonParser, progressMonitor);
99 }
100
101 @Override
102 public Iterable<Resolution> getResolutions(ProgressMonitor progressMonitor) {
103 final URI uri = UriBuilder.fromUri(baseUri).path("resolution").build();
104 return getAndParse(uri, resolutionsJsonParser, progressMonitor);
105 }
106
107 @Override
108 public ServerInfo getServerInfo(ProgressMonitor progressMonitor) {
109 return invoke(new Callable<ServerInfo>() {
110 @Override
111 public ServerInfo call() throws Exception {
112 final WebResource serverInfoResource = client.resource(UriBuilder.fromUri(baseUri)
113 .path(SERVER_INFO_RESOURCE).build());
114 return serverInfoJsonParser.parse(serverInfoResource.get(JSONObject.class));
115 }
116 });
117 }
118 }