1 package com.atlassian.jira.rest.client.internal.json;
2
3 import com.atlassian.jira.rest.client.api.OptionalIterable;
4 import com.atlassian.jira.rest.client.api.domain.AuditAssociatedItem;
5 import com.atlassian.jira.rest.client.api.domain.AuditChangedValue;
6 import com.atlassian.jira.rest.client.api.domain.AuditRecord;
7 import com.atlassian.jira.rest.client.api.domain.AuditRecordsData;
8 import org.codehaus.jettison.json.JSONException;
9 import org.codehaus.jettison.json.JSONObject;
10 import org.joda.time.DateTime;
11
12
13
14
15 public class AuditRecordsJsonParser implements JsonObjectParser<AuditRecordsData> {
16
17 private final AuditAssociatedItemJsonParser associatedItemJsonParser = new AuditAssociatedItemJsonParser();
18 private final AuditChangedValueJsonParser changedValueJsonParser = new AuditChangedValueJsonParser();
19 private final SingleAuditRecordJsonParser singleAuditRecordJsonParser = new SingleAuditRecordJsonParser();
20
21 @Override
22 public AuditRecordsData parse(final JSONObject json) throws JSONException {
23 final Integer offset = json.getInt("offset");
24 final Integer limit = json.getInt("limit");
25 final Integer total = json.getInt("total");
26 final OptionalIterable<AuditRecord> records = JsonParseUtil.parseOptionalJsonArray(json.optJSONArray("records"), singleAuditRecordJsonParser);
27
28 return new AuditRecordsData(offset, limit, total, records);
29 }
30
31 class SingleAuditRecordJsonParser implements JsonObjectParser<AuditRecord> {
32 @Override
33 public AuditRecord parse(final JSONObject json) throws JSONException {
34 final Long id = json.getLong("id");
35 final String summary = json.getString("summary");
36
37 final String createdString = json.getString("created");
38 final DateTime created = JsonParseUtil.parseDateTime(json, "created");
39 final String category = json.getString("category");
40 final String eventSource = json.getString("eventSource");
41 final String authorKey = JsonParseUtil.getOptionalString(json, "authorKey");
42 final String remoteAddress = JsonParseUtil.getOptionalString(json, "remoteAddress");
43 final AuditAssociatedItem objectItem = JsonParseUtil.getOptionalJsonObject(json, "objectItem", associatedItemJsonParser);
44 final OptionalIterable<AuditAssociatedItem> associatedItem = JsonParseUtil.parseOptionalJsonArray(json.optJSONArray("associatedItems"), associatedItemJsonParser);
45 final OptionalIterable<AuditChangedValue> changedValues = JsonParseUtil.parseOptionalJsonArray(json.optJSONArray("changedValues"), changedValueJsonParser);
46
47 return new AuditRecord(id, summary, remoteAddress, created, category, eventSource, authorKey, objectItem, associatedItem, changedValues);
48 }
49
50 }
51 }