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.ProgressMonitor;
20  import com.atlassian.jira.rest.client.ProjectRestClient;
21  import com.atlassian.jira.rest.client.domain.BasicProject;
22  import com.atlassian.jira.rest.client.domain.Project;
23  import com.atlassian.jira.rest.client.internal.json.BasicProjectsJsonParser;
24  import com.atlassian.jira.rest.client.internal.json.JsonParser;
25  import com.atlassian.jira.rest.client.internal.json.ProjectJsonParser;
26  import com.sun.jersey.api.client.WebResource;
27  import com.sun.jersey.client.apache.ApacheHttpClient;
28  import org.codehaus.jettison.json.JSONException;
29  import org.codehaus.jettison.json.JSONObject;
30  
31  import javax.ws.rs.core.UriBuilder;
32  import java.net.URI;
33  import java.util.concurrent.Callable;
34  
35  /**
36   * Jersey-based implementation of ProjectRestClient
37   *
38   * @since v0.1
39   */
40  public class JerseyProjectRestClient extends AbstractJerseyRestClient implements ProjectRestClient {
41  	private static final String PROJECT_URI_PREFIX = "project";
42  	private final ProjectJsonParser projectJsonParser = new ProjectJsonParser();
43  	private final BasicProjectsJsonParser basicProjectsJsonParser = new BasicProjectsJsonParser();
44  
45  	public JerseyProjectRestClient(URI baseUri, ApacheHttpClient client) {
46  		super(baseUri, client);
47  	}
48  
49  	@Override
50  	public Project getProject(final URI projectUri, ProgressMonitor progressMonitor) {
51  		return invoke(new Callable<Project>() {
52  			@Override
53  			public Project call() throws Exception {
54  				final WebResource projectResource = client.resource(projectUri);
55  				final JSONObject jsonObject = projectResource.get(JSONObject.class);
56  				return projectJsonParser.parse(jsonObject);
57  			}
58  		});
59  
60  	}
61  
62  	@Override
63  	public Project getProject(final String key, ProgressMonitor progressMonitor) {
64  		final URI uri = UriBuilder.fromUri(baseUri).path(PROJECT_URI_PREFIX).path(key).build();
65  		return getProject(uri, progressMonitor);
66  	}
67  
68  	@Override
69  	public Iterable<BasicProject> getAllProjects(ProgressMonitor progressMonitor) {
70  		final URI uri = UriBuilder.fromUri(baseUri).path(PROJECT_URI_PREFIX).build();
71  		return getAndParse(uri, basicProjectsJsonParser, progressMonitor);
72  	}
73  }