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