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.jira.rest.client.api.ProjectRolesRestClient;
19 import com.atlassian.jira.rest.client.api.domain.BasicProjectRole;
20 import com.atlassian.jira.rest.client.api.domain.ProjectRole;
21 import com.atlassian.jira.rest.client.internal.json.BasicProjectRoleJsonParser;
22 import com.atlassian.jira.rest.client.internal.json.ProjectRoleJsonParser;
23 import com.atlassian.httpclient.api.HttpClient;
24 import com.atlassian.util.concurrent.Promise;
25 import com.atlassian.util.concurrent.Promises;
26 import com.google.common.base.Function;
27 import com.google.common.collect.Iterables;
28
29 import javax.ws.rs.core.UriBuilder;
30 import java.net.URI;
31 import java.util.Collection;
32
33
34
35
36
37
38 public class AsynchronousProjectRolesRestClient extends AbstractAsynchronousRestClient implements ProjectRolesRestClient {
39
40 private final ProjectRoleJsonParser projectRoleJsonParser;
41 private final BasicProjectRoleJsonParser basicRoleJsonParser;
42
43 public AsynchronousProjectRolesRestClient(final URI serverUri, final HttpClient client) {
44 super(client);
45 this.projectRoleJsonParser = new ProjectRoleJsonParser(serverUri);
46 this.basicRoleJsonParser = new BasicProjectRoleJsonParser();
47 }
48
49 @Override
50 public Promise<ProjectRole> getRole(URI uri) {
51 return getAndParse(uri, projectRoleJsonParser);
52 }
53
54 @Override
55 public Promise<ProjectRole> getRole(final URI projectUri, final Long roleId) {
56 final URI roleUri = UriBuilder
57 .fromUri(projectUri)
58 .path("role")
59 .path(String.valueOf(roleId))
60 .build();
61 return getAndParse(roleUri, projectRoleJsonParser);
62 }
63
64 @Override
65 public Promise<Iterable<ProjectRole>> getRoles(final URI projectUri) {
66 final URI rolesUris = UriBuilder
67 .fromUri(projectUri)
68 .path("role")
69 .build();
70 final Promise<Collection<BasicProjectRole>> basicProjectRoles = getAndParse(rolesUris, basicRoleJsonParser);
71
72 return Promises.promise(Iterables.transform(basicProjectRoles.claim(), new Function<BasicProjectRole, ProjectRole>() {
73 @Override
74 public ProjectRole apply(final BasicProjectRole basicProjectRole) {
75 return getRole(basicProjectRole.getSelf()).claim();
76 }
77 }));
78 }
79 }