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