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.domain.AssigneeType;
20 import com.atlassian.jira.rest.client.domain.BasicComponent;
21 import com.atlassian.jira.rest.client.domain.BasicUser;
22 import com.atlassian.jira.rest.client.domain.Component;
23 import com.atlassian.jira.rest.client.internal.domain.AssigneeTypeConstants;
24 import org.codehaus.jettison.json.JSONException;
25 import org.codehaus.jettison.json.JSONObject;
26
27 public class ComponentJsonParser implements JsonParser<Component> {
28 @Override
29 public Component parse(JSONObject json) throws JSONException {
30 final BasicComponent basicComponent = BasicComponentJsonParser.parseBasicComponent(json);
31 final JSONObject leadJson = json.optJSONObject("lead");
32 final BasicUser lead = leadJson != null ? JsonParseUtil.parseBasicUser(leadJson) : null;
33 final String assigneeTypeStr = JsonParseUtil.getOptionalString(json, "assigneeType");
34 final Component.AssigneeInfo assigneeInfo;
35 if (assigneeTypeStr != null) {
36 final AssigneeType assigneeType = parseAssigneeType(assigneeTypeStr);
37 final JSONObject assigneeJson = json.optJSONObject("assignee");
38 final BasicUser assignee = assigneeJson != null ? JsonParseUtil.parseBasicUser(assigneeJson) : null;
39 final AssigneeType realAssigneeType = parseAssigneeType(json.getString("realAssigneeType"));
40 final JSONObject realAssigneeJson = json.optJSONObject("realAssignee");
41 final BasicUser realAssignee = realAssigneeJson != null ? JsonParseUtil.parseBasicUser(realAssigneeJson) : null;
42 final boolean isAssigneeTypeValid = json.getBoolean("isAssigneeTypeValid");
43 assigneeInfo = new Component.AssigneeInfo(assignee, assigneeType, realAssignee, realAssigneeType, isAssigneeTypeValid);
44 } else {
45 assigneeInfo = null;
46 }
47
48 return new Component(basicComponent.getSelf(), basicComponent.getName(), basicComponent.getDescription(), lead, assigneeInfo);
49 }
50
51 AssigneeType parseAssigneeType(String str) throws JSONException {
52
53 if (AssigneeTypeConstants.COMPONENT_LEAD.equals(str)) {
54 return AssigneeType.COMPONENT_LEAD;
55 }
56 if (AssigneeTypeConstants.PROJECT_DEFAULT.equals(str)) {
57 return AssigneeType.PROJECT_DEFAULT;
58 }
59 if (AssigneeTypeConstants.PROJECT_LEAD.equals(str)) {
60 return AssigneeType.PROJECT_LEAD;
61 }
62 if (AssigneeTypeConstants.UNASSIGNED.equals(str)) {
63 return AssigneeType.UNASSIGNED;
64 }
65 throw new JSONException("Unexpected value of assignee type [" + str + "]");
66 }
67 }