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.IssueLink;
20 import com.atlassian.jira.rest.client.domain.IssueLinkType;
21 import com.atlassian.jira.rest.client.domain.IssuelinksType;
22 import org.codehaus.jettison.json.JSONException;
23 import org.codehaus.jettison.json.JSONObject;
24
25 import java.net.URI;
26
27 public class IssueLinkJsonParserV5 implements JsonObjectParser<IssueLink> {
28 private final IssuelinksTypeJsonParserV5 issuelinksTypeJsonParserV5 = new IssuelinksTypeJsonParserV5();
29
30 @Override
31 public IssueLink parse(JSONObject json) throws JSONException {
32 final IssuelinksType issuelinksType = issuelinksTypeJsonParserV5.parse(json.getJSONObject("type"));
33 final IssueLinkType.Direction direction;
34 final JSONObject link;
35 if (json.has("inwardIssue")) {
36 link = json.getJSONObject("inwardIssue");
37 direction = IssueLinkType.Direction.INBOUND;
38 } else {
39 link = json.getJSONObject("outwardIssue");
40 direction = IssueLinkType.Direction.OUTBOUND;
41 }
42
43 final String key = link.getString("key");
44 final URI targetIssueUri = JsonParseUtil.parseURI(link.getString("self"));
45 final IssueLinkType issueLinkType = new IssueLinkType(issuelinksType.getName(),
46 direction.equals(IssueLinkType.Direction.INBOUND) ? issuelinksType.getInward() : issuelinksType.getOutward(), direction);
47 return new IssueLink(key, targetIssueUri, issueLinkType);
48 }
49 }