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.GenericJsonArrayParser;
28  import com.atlassian.jira.rest.client.internal.json.IssueLinkTypesJsonParser;
29  import com.atlassian.jira.rest.client.internal.json.IssueTypeJsonParser;
30  import com.atlassian.jira.rest.client.internal.json.PriorityJsonParser;
31  import com.atlassian.jira.rest.client.internal.json.ResolutionJsonParser;
32  import com.atlassian.jira.rest.client.internal.json.ServerInfoJsonParser;
33  import com.atlassian.jira.rest.client.internal.json.StatusJsonParser;
34  import com.sun.jersey.api.client.WebResource;
35  import com.sun.jersey.client.apache.ApacheHttpClient;
36  import org.codehaus.jettison.json.JSONObject;
37  
38  import javax.ws.rs.core.UriBuilder;
39  import java.net.URI;
40  import java.util.concurrent.Callable;
41  
42  /**
43   * Jersey-based implementation of MetadataRestClient
44   *
45   * @since v0.1
46   */
47  public class JerseyMetadataRestClient extends AbstractJerseyRestClient implements MetadataRestClient {
48  	private 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 PriorityJsonParser priorityJsonParser = new PriorityJsonParser();
54  	private final GenericJsonArrayParser<Priority> prioritiesJsonParser = GenericJsonArrayParser.create(priorityJsonParser);
55  	private final ResolutionJsonParser resolutionJsonParser = new ResolutionJsonParser();
56  	private final GenericJsonArrayParser<Resolution> resolutionsJsonParser = GenericJsonArrayParser.create(resolutionJsonParser);
57  	private final IssueLinkTypesJsonParser issueLinkTypesJsonParser = new IssueLinkTypesJsonParser();
58  
59  	public JerseyMetadataRestClient(URI baseUri, ApacheHttpClient client) {
60  		super(baseUri, client);
61  	}
62  
63  	@Override
64  	public IssueType getIssueType(final URI uri, ProgressMonitor progressMonitor) {
65  		return getAndParse(uri, issueTypeJsonParser, progressMonitor);
66  	}
67  
68  	@Override
69  	public Iterable<IssueType> getIssueTypes(ProgressMonitor progressMonitor) {
70  		final URI uri = UriBuilder.fromUri(baseUri).path("issuetype").build();
71  		return getAndParse(uri, issueTypesJsonParser, progressMonitor);
72  	}
73  
74  	@Override
75  	public Iterable<IssuelinksType> getIssueLinkTypes(ProgressMonitor progressMonitor) {
76  		final URI uri = UriBuilder.fromUri(baseUri).path("issueLinkType").build();
77  		return getAndParse(uri, issueLinkTypesJsonParser, progressMonitor);
78  	}
79  
80  	@Override
81  	public Status getStatus(final URI uri, ProgressMonitor progressMonitor) {
82  		return getAndParse(uri, statusJsonParser, progressMonitor);
83  	}
84  
85  	@Override
86  	public Priority getPriority(final URI uri, ProgressMonitor progressMonitor) {
87  		return getAndParse(uri, priorityJsonParser, progressMonitor);
88  	}
89  
90  	@Override
91  	public Iterable<Priority> getPriorities(ProgressMonitor progressMonitor) {
92  		final URI uri = UriBuilder.fromUri(baseUri).path("priority").build();
93  		return getAndParse(uri, prioritiesJsonParser, progressMonitor);
94  	}
95  
96  	@Override
97  	public Resolution getResolution(URI uri, ProgressMonitor progressMonitor) {
98  		return getAndParse(uri, resolutionJsonParser, progressMonitor);
99  	}
100 
101 	@Override
102 	public Iterable<Resolution> getResolutions(ProgressMonitor progressMonitor) {
103 		final URI uri = UriBuilder.fromUri(baseUri).path("resolution").build();
104 		return getAndParse(uri, resolutionsJsonParser, progressMonitor);
105 	}
106 
107 	@Override
108 	public ServerInfo getServerInfo(ProgressMonitor progressMonitor) {
109 		return invoke(new Callable<ServerInfo>() {
110 			@Override
111 			public ServerInfo call() throws Exception {
112 				final WebResource serverInfoResource = client.resource(UriBuilder.fromUri(baseUri)
113 						.path(SERVER_INFO_RESOURCE).build());
114 				return serverInfoJsonParser.parse(serverInfoResource.get(JSONObject.class));
115 			}
116 		});
117 	}
118 }