View Javadoc

1   /*
2    * Copyright (C) 2012 Atlassian
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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   * Asynchronous implementation of MetadataRestClient.
43   *
44   * @since v2.0
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 }