View Javadoc

1   /*
2    * Copyright (C) 2010 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  
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   * Jersey-based implementation of MetadataRestClient
43   *
44   * @since v0.1
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  }