1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.atlassian.jira.rest.client.internal.async;
17
18 import com.atlassian.httpclient.api.HttpClient;
19 import com.atlassian.jira.rest.client.api.MetadataRestClient;
20 import com.atlassian.jira.rest.client.api.domain.Field;
21 import com.atlassian.jira.rest.client.api.domain.IssueType;
22 import com.atlassian.jira.rest.client.api.domain.IssuelinksType;
23 import com.atlassian.jira.rest.client.api.domain.Priority;
24 import com.atlassian.jira.rest.client.api.domain.Resolution;
25 import com.atlassian.jira.rest.client.api.domain.ServerInfo;
26 import com.atlassian.jira.rest.client.api.domain.Status;
27 import com.atlassian.jira.rest.client.internal.json.FieldJsonParser;
28 import com.atlassian.jira.rest.client.internal.json.GenericJsonArrayParser;
29 import com.atlassian.jira.rest.client.internal.json.IssueLinkTypesJsonParser;
30 import com.atlassian.jira.rest.client.internal.json.IssueTypeJsonParser;
31 import com.atlassian.jira.rest.client.internal.json.JsonArrayParser;
32 import com.atlassian.jira.rest.client.internal.json.PriorityJsonParser;
33 import com.atlassian.jira.rest.client.internal.json.ResolutionJsonParser;
34 import com.atlassian.jira.rest.client.internal.json.ServerInfoJsonParser;
35 import com.atlassian.jira.rest.client.internal.json.StatusJsonParser;
36 import com.atlassian.util.concurrent.Promise;
37
38 import javax.ws.rs.core.UriBuilder;
39 import java.net.URI;
40
41
42
43
44
45
46 public class AsynchronousMetadataRestClient extends AbstractAsynchronousRestClient implements MetadataRestClient {
47
48 private static 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 GenericJsonArrayParser<Status> statusesJsonParser = GenericJsonArrayParser.create(statusJsonParser);
54 private final PriorityJsonParser priorityJsonParser = new PriorityJsonParser();
55 private final GenericJsonArrayParser<Priority> prioritiesJsonParser = GenericJsonArrayParser.create(priorityJsonParser);
56 private final ResolutionJsonParser resolutionJsonParser = new ResolutionJsonParser();
57 private final GenericJsonArrayParser<Resolution> resolutionsJsonParser = GenericJsonArrayParser.create(resolutionJsonParser);
58 private final IssueLinkTypesJsonParser issueLinkTypesJsonParser = new IssueLinkTypesJsonParser();
59 private final JsonArrayParser<Iterable<Field>> fieldsJsonParser = FieldJsonParser.createFieldsArrayParser();
60 private final URI baseUri;
61
62 public AsynchronousMetadataRestClient(final URI baseUri, HttpClient httpClient) {
63 super(httpClient);
64 this.baseUri = baseUri;
65
66 }
67
68 @Override
69 public Promise<IssueType> getIssueType(final URI uri) {
70 return getAndParse(uri, issueTypeJsonParser);
71 }
72
73 @Override
74 public Promise<Iterable<IssueType>> getIssueTypes() {
75 final URI uri = UriBuilder.fromUri(baseUri).path("issuetype").build();
76 return getAndParse(uri, issueTypesJsonParser);
77 }
78
79 @Override
80 public Promise<Iterable<IssuelinksType>> getIssueLinkTypes() {
81 final URI uri = UriBuilder.fromUri(baseUri).path("issueLinkType").build();
82 return getAndParse(uri, issueLinkTypesJsonParser);
83 }
84
85 @Override
86 public Promise<Status> getStatus(URI uri) {
87 return getAndParse(uri, statusJsonParser);
88 }
89
90 @Override
91 public Promise<Iterable<Status>> getStatuses() {
92 final URI uri = UriBuilder.fromUri(baseUri).path("status").build();
93 return getAndParse(uri, statusesJsonParser);
94 }
95
96 @Override
97 public Promise<Priority> getPriority(URI uri) {
98 return getAndParse(uri, priorityJsonParser);
99 }
100
101 @Override
102 public Promise<Iterable<Priority>> getPriorities() {
103 final URI uri = UriBuilder.fromUri(baseUri).path("priority").build();
104 return getAndParse(uri, prioritiesJsonParser);
105 }
106
107 @Override
108 public Promise<Resolution> getResolution(URI uri) {
109 return getAndParse(uri, resolutionJsonParser);
110 }
111
112 @Override
113 public Promise<Iterable<Resolution>> getResolutions() {
114 final URI uri = UriBuilder.fromUri(baseUri).path("resolution").build();
115 return getAndParse(uri, resolutionsJsonParser);
116 }
117
118 @Override
119 public Promise<ServerInfo> getServerInfo() {
120 final URI serverInfoUri = UriBuilder.fromUri(baseUri).path(SERVER_INFO_RESOURCE).build();
121 return getAndParse(serverInfoUri, serverInfoJsonParser);
122 }
123
124 @Override
125 public Promise<Iterable<Field>> getFields() {
126 final URI uri = UriBuilder.fromUri(baseUri).path("field").build();
127 return getAndParse(uri, fieldsJsonParser);
128 }
129 }