1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.atlassian.jira.rest.client.internal.json;
18
19 import com.atlassian.jira.rest.client.api.domain.BasicUser;
20 import com.atlassian.jira.rest.client.api.domain.User;
21 import com.atlassian.jira.rest.client.api.ExpandableProperty;
22 import com.google.common.base.Preconditions;
23 import com.google.common.collect.Maps;
24 import org.codehaus.jettison.json.JSONException;
25 import org.codehaus.jettison.json.JSONObject;
26
27 import java.net.URI;
28 import java.util.Iterator;
29 import java.util.Map;
30
31 public class UserJsonParser implements JsonObjectParser<User> {
32 @Override
33 public User parse(JSONObject json) throws JSONException {
34 final BasicUser basicUser = Preconditions.checkNotNull(JsonParseUtil.parseBasicUser(json));
35 final String timezone = JsonParseUtil.getOptionalString(json, "timeZone");
36 final String avatarUrl = JsonParseUtil.getOptionalString(json, "avatarUrl");
37 Map<String, URI> avatarUris = Maps.newHashMap();
38 if (avatarUrl != null) {
39
40 final URI avatarUri = JsonParseUtil.parseURI(avatarUrl);
41 avatarUris.put(User.S48_48, avatarUri);
42 } else {
43
44 final JSONObject avatarUrlsJson = json.getJSONObject("avatarUrls");
45 @SuppressWarnings("unchecked")
46 final Iterator<String> iterator = avatarUrlsJson.keys();
47 while (iterator.hasNext()) {
48 final String key = iterator.next();
49 avatarUris.put(key, JsonParseUtil.parseURI(avatarUrlsJson.getString(key)));
50 }
51 }
52
53 final String emailAddress = JsonParseUtil.getOptionalString(json, "emailAddress");
54
55 final ExpandableProperty<String> groups = JsonParseUtil.parseOptionalExpandableProperty(json
56 .optJSONObject("groups"), new JsonObjectParser<String>() {
57 @Override
58 public String parse(JSONObject json) throws JSONException {
59 return json.getString("name");
60 }
61 });
62 return new User(basicUser.getSelf(), basicUser.getName(), basicUser
63 .getDisplayName(), emailAddress, groups, avatarUris, timezone);
64 }
65 }