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.Priority;
23  import com.atlassian.jira.rest.client.domain.Resolution;
24  import com.atlassian.jira.rest.client.domain.ServerInfo;
25  import com.atlassian.jira.rest.client.domain.Status;
26  import com.atlassian.jira.rest.client.internal.json.IssueTypeJsonParser;
27  import com.atlassian.jira.rest.client.internal.json.PriorityJsonParser;
28  import com.atlassian.jira.rest.client.internal.json.ResolutionJsonParser;
29  import com.atlassian.jira.rest.client.internal.json.ServerInfoJsonParser;
30  import com.atlassian.jira.rest.client.internal.json.StatusJsonParser;
31  import com.sun.jersey.api.client.WebResource;
32  import com.sun.jersey.client.apache.ApacheHttpClient;
33  import org.codehaus.jettison.json.JSONObject;
34  
35  import javax.ws.rs.core.UriBuilder;
36  import java.net.URI;
37  import java.util.concurrent.Callable;
38  
39  /**
40   * Jersey-based implementation of MetadataRestClient
41   *
42   * @since v0.1
43   */
44  public class JerseyMetadataRestClient extends AbstractJerseyRestClient implements MetadataRestClient {
45  	private final String SERVER_INFO_RESOURCE = "/serverInfo";
46  	private final ServerInfoJsonParser serverInfoJsonParser = new ServerInfoJsonParser();
47  	private final IssueTypeJsonParser issueTypeJsonParser = new IssueTypeJsonParser();
48  	private final StatusJsonParser statusJsonParser = new StatusJsonParser();
49  	private final PriorityJsonParser priorityJsonParser = new PriorityJsonParser();
50  	private final ResolutionJsonParser resolutionJsonParser = new ResolutionJsonParser();
51  
52  	public JerseyMetadataRestClient(URI baseUri, ApacheHttpClient client) {
53  		super(baseUri, client);
54  	}
55  
56  	@Override
57  	public IssueType getIssueType(final URI uri, ProgressMonitor progressMonitor) {
58  		return getAndParse(uri, issueTypeJsonParser, progressMonitor);
59  	}
60  
61  	@Override
62  	public Status getStatus(final URI uri, ProgressMonitor progressMonitor) {
63  		return getAndParse(uri, statusJsonParser, progressMonitor);
64  	}
65  
66  	@Override
67  	public Priority getPriority(final URI uri, ProgressMonitor progressMonitor) {
68  		return getAndParse(uri, priorityJsonParser, progressMonitor);
69  	}
70  
71  	@Override
72  	public Resolution getResolution(URI uri, ProgressMonitor progressMonitor) {
73  		return getAndParse(uri, resolutionJsonParser, progressMonitor);
74  	}
75  
76  	@Override
77  	public ServerInfo getServerInfo(ProgressMonitor progressMonitor) {
78  		return invoke(new Callable<ServerInfo>() {
79  			@Override
80  			public ServerInfo call() throws Exception {
81  				final WebResource serverInfoResource = client.resource(UriBuilder.fromUri(baseUri)
82  						.path(SERVER_INFO_RESOURCE).build());
83  				return serverInfoJsonParser.parse(serverInfoResource.get(JSONObject.class));
84  			}
85  		});
86  	}
87  }