View Javadoc

1   /*
2    * Copyright (C) 2011 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.VersionRestClient;
21  import com.atlassian.jira.rest.client.domain.Version;
22  import com.atlassian.jira.rest.client.domain.VersionRelatedIssuesCount;
23  import com.atlassian.jira.rest.client.domain.input.VersionInput;
24  import com.atlassian.jira.rest.client.domain.input.VersionPosition;
25  import com.atlassian.jira.rest.client.internal.json.JsonParser;
26  import com.atlassian.jira.rest.client.internal.json.VersionJsonParser;
27  import com.atlassian.jira.rest.client.internal.json.VersionRelatedIssueCountJsonParser;
28  import com.atlassian.jira.rest.client.internal.json.gen.JsonGenerator;
29  import com.atlassian.jira.rest.client.internal.json.gen.VersionInputJsonGenerator;
30  import com.atlassian.jira.rest.client.internal.json.gen.VersionPositionInputGenerator;
31  import com.sun.jersey.client.apache.ApacheHttpClient;
32  import org.codehaus.jettison.json.JSONException;
33  import org.codehaus.jettison.json.JSONObject;
34  
35  import javax.annotation.Nullable;
36  import javax.ws.rs.core.UriBuilder;
37  import java.net.URI;
38  
39  /**
40   * Jersey-based implementation of VersionRestClient
41   *
42   * @since client 0.3, server 4.4
43   */
44  public class JerseyVersionRestClient extends AbstractJerseyRestClient implements VersionRestClient {
45  
46  	private final URI versionRootUri;
47  
48  	public JerseyVersionRestClient(URI baseUri, ApacheHttpClient client) {
49  		super(baseUri, client);
50  		versionRootUri = UriBuilder.fromUri(baseUri).path("version").build();
51  	}
52  
53  	@Override
54  	public Version createVersion(final VersionInput version, ProgressMonitor progressMonitor) {
55  		return postAndParse(versionRootUri, InputGeneratorCallable.create(new VersionInputJsonGenerator(), version), new VersionJsonParser(), progressMonitor);
56  	}
57  
58  	@Override
59  	public Version updateVersion(URI versionUri, final VersionInput version, ProgressMonitor progressMonitor) {
60  		return putAndParse(versionUri, InputGeneratorCallable.create(new VersionInputJsonGenerator(), version), new VersionJsonParser(), progressMonitor);
61  	}
62  
63  	@Override
64  	public void removeVersion(URI versionUri, @Nullable URI moveFixIssuesToVersionUri,
65  			@Nullable URI moveAffectedIssuesToVersionUri, ProgressMonitor progressMonitor) {
66  		final UriBuilder uriBuilder = UriBuilder.fromUri(versionUri);
67  		if (moveFixIssuesToVersionUri != null) {
68  			uriBuilder.queryParam("moveFixIssuesTo", moveFixIssuesToVersionUri);
69  		}
70  		if (moveAffectedIssuesToVersionUri != null) {
71  			uriBuilder.queryParam("moveAffectedIssuesTo", moveAffectedIssuesToVersionUri);
72  		}
73  		delete(uriBuilder.build(), progressMonitor);
74  	}
75  
76  	@Override
77  	public Version getVersion(URI versionUri, ProgressMonitor progressMonitor) {
78  		return getAndParse(versionUri, new VersionJsonParser(), progressMonitor);
79  	}
80  
81  	@Override
82  	public VersionRelatedIssuesCount getVersionRelatedIssuesCount(URI versionUri, ProgressMonitor progressMonitor) {
83  		final URI relatedIssueCountsUri = UriBuilder.fromUri(versionUri).path("relatedIssueCounts").build();
84  		return getAndParse(relatedIssueCountsUri, new VersionRelatedIssueCountJsonParser(), progressMonitor);
85  	}
86  
87  	@Override
88  	public int getNumUnresolvedIssues(URI versionUri, ProgressMonitor progressMonitor) {
89  		final URI unresolvedIssueCountUri = UriBuilder.fromUri(versionUri).path("unresolvedIssueCount").build();
90  		return getAndParse(unresolvedIssueCountUri, new JsonParser<Integer>() {
91  			@Override
92  			public Integer parse(JSONObject json) throws JSONException {
93  				return json.getInt("issuesUnresolvedCount");
94  			}
95  		}, progressMonitor);
96  	}
97  
98  	@Override
99  	public Version moveVersionAfter(URI versionUri, URI afterVersionUri, ProgressMonitor progressMonitor) {
100 		final URI moveUri = getMoveVersionUri(versionUri);
101 
102 		return postAndParse(moveUri, InputGeneratorCallable.create(new JsonGenerator<URI>() {
103 			@Override
104 			public JSONObject generate(URI uri) throws JSONException {
105 				final JSONObject res = new JSONObject();
106 				res.put("after", uri);
107 				return res;
108 			}
109 		}, afterVersionUri), new VersionJsonParser(), progressMonitor);
110 	}
111 
112 	@Override
113 	public Version moveVersion(URI versionUri, final VersionPosition versionPosition, ProgressMonitor progressMonitor) {
114 		final URI moveUri = getMoveVersionUri(versionUri);
115 		return postAndParse(moveUri, InputGeneratorCallable.create(new VersionPositionInputGenerator(), versionPosition),
116 				new VersionJsonParser(), progressMonitor);
117 	}
118 
119 	private URI getMoveVersionUri(URI versionUri) {
120 		return UriBuilder.fromUri(versionUri).path("move").build();
121 	}
122 }