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.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
41
42
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 }