@Override public BasicProject parse(JSONObject json) throws JSONException { final URI selfUri = JsonParseUtil.getSelfUri(json); final String key = json.getString("key"); final Long id = JsonParseUtil.getOptionalLong(json, "id"); final String name = JsonParseUtil.getOptionalString(json, "name"); return new BasicProject(selfUri, key, id, name); } }
@Override public OperationGroup parse(final JSONObject json) throws JSONException { final String id = JsonParseUtil.getOptionalString(json, "id"); final Iterable<OperationLink> links = JsonParseUtil.parseJsonArray(json.getJSONArray("links"), linkJsonParser); final Iterable<OperationGroup> groups = JsonParseUtil.parseJsonArray(json.getJSONArray("groups"), this); final OperationHeader header = JsonParseUtil.parseOptionalJsonObject(json, "header", headerJsonParser); final Integer weight = JsonParseUtil.parseOptionInteger(json, "weight"); return new OperationGroup(id, links, groups, header, weight); } }
@Nullable private <T> T getOptionalNestedField(final JSONObject s, final String fieldId, final JsonObjectParser<T> jsonParser) throws JSONException { final JSONObject fieldJson = JsonParseUtil.getNestedOptionalObject(s, FIELDS, fieldId); // for fields like assignee (when unassigned) value attribute may be missing completely if (fieldJson != null) { return jsonParser.parse(fieldJson); } return null; }
@Nullable public static DateTime parseOptionalDateTime(final JSONObject jsonObject, final String attributeName) throws JSONException { final String s = getOptionalString(jsonObject, attributeName); return s != null ? parseDateTime(s) : null; }
@Nullable public static URI parseOptionalURI(JSONObject jsonObject, String attributeName) { final String s = getOptionalString(jsonObject, attributeName); return s != null ? parseURI(s) : null; }
@Override public FieldSchema parse(JSONObject json) throws JSONException { final String type = JsonParseUtil.getOptionalString(json, "type"); final String items = JsonParseUtil.getOptionalString(json, "items"); final String system = JsonParseUtil.getOptionalString(json, "system"); final String custom = JsonParseUtil.getOptionalString(json, "custom"); final Long customId = JsonParseUtil.getOptionalLong(json, "customId"); return new FieldSchema(type, items, system, custom, customId); } }
@Override public Comment parse(JSONObject json) throws JSONException { final URI selfUri = JsonParseUtil.getSelfUri(json); final Long id = JsonParseUtil.getOptionalLong(json, "id"); final String body = json.getString("body"); final BasicUser author = JsonParseUtil.parseBasicUser(json.optJSONObject("author")); final BasicUser updateAuthor = JsonParseUtil.parseBasicUser(json.optJSONObject("updateAuthor")); final Visibility visibility = visibilityJsonParser.parseVisibility(json); return new Comment(selfUri, body, author, updateAuthor, JsonParseUtil.parseDateTime(json.getString("created")), JsonParseUtil.parseDateTime(json.getString("updated")), visibility, id); } }
final DateTime creationDate = JsonParseUtil.parseDateTime(getFieldStringUnisex(s, CREATED_FIELD.id)); final DateTime updateDate = JsonParseUtil.parseDateTime(getFieldStringUnisex(s, UPDATED_FIELD.id)); final DateTime dueDate = dueDateString == null ? null : JsonParseUtil.parseDateTimeOrDate(dueDateString); if (JsonParseUtil.getNestedOptionalObject(s, FIELDS, WORKLOG_FIELD.id) != null) { worklogs = parseOptionalArray(shouldUseNestedValueAttribute, s, new JsonWeakParserForJsonObject<Worklog>(new WorklogJsonParserV5(JsonParseUtil.getSelfUri(s))), FIELDS, WORKLOG_FIELD.id, WORKLOGS_FIELD.id); } else { return new Issue(summary, JsonParseUtil.getSelfUri(s), s.getString("key"), project, issueType, status, description, priority, resolution, attachments, reporter, assignee, creationDate, updateDate, dueDate, affectedVersions, fixVersions, components, timeTracking, fields, comments, transitionsUri != null ? JsonParseUtil.parseURI(transitionsUri) : null, issueLinks, votes, worklogs, watchers, expandos, subtasks, changelog, labels);
@Override public BasicPriority parse(JSONObject json) throws JSONException { final String name = json.getString("name"); final Long id = JsonParseUtil.getOptionalLong(json, "id"); final URI selfUri = JsonParseUtil.getSelfUri(json); return new BasicPriority(selfUri, id, name); } }
@Override public Status parse(JSONObject json) throws JSONException { final URI self = JsonParseUtil.getSelfUri(json); final Long id = JsonParseUtil.getOptionalLong(json, "id"); final String name = json.getString("name"); final String description = json.getString("description"); final URI iconUrl = JsonParseUtil.parseURI(json.getString("iconUrl")); return new Status(self, id, name, description, iconUrl); } }
final DateTime creationDate = JsonParseUtil.parseDateTime(getFieldStringUnisex(issueJson, CREATED_FIELD.id)); final DateTime updateDate = JsonParseUtil.parseDateTime(getFieldStringUnisex(issueJson, UPDATED_FIELD.id)); final DateTime dueDate = dueDateString == null ? null : JsonParseUtil.parseDateTimeOrDate(dueDateString); if (JsonParseUtil.getNestedOptionalObject(issueJson, FIELDS, WORKLOG_FIELD.id) != null) { worklogs = parseOptionalArray(issueJson, new JsonWeakParserForJsonObject<Worklog>(new WorklogJsonParserV5(selfUri)), final Operations operations = parseOptionalJsonObject(issueJson, "operations", operationsJsonParser);
@Override public IssueType parse(JSONObject json) throws JSONException { final URI selfUri = JsonParseUtil.getSelfUri(json); final long id = json.getLong("id"); final String name = json.getString("name"); final boolean isSubtask = json.getBoolean("subtask"); final String iconUrl = JsonParseUtil.getOptionalString(json, "iconUrl"); final URI iconUri = iconUrl == null ? null : JsonParseUtil.parseURI(iconUrl); final String description = JsonParseUtil.getOptionalString(json, "description"); return new IssueType(selfUri, id, name, isSubtask, description, iconUri); } }
@Override public Sprint parse(final JSONObject json) throws JSONException { // https://docs.atlassian.com/jira-software/REST/latest/#agile/1.0/board/{boardId}/sprint // {"id":4786,"self":"https://issues.jboss.org/rest/agile/1.0/sprint/4786","state":"closed","name":"EAP 7.0.1","startDate":"2016-05-11T02:48:59.548-04:00","endDate":"2016-07-20T02:48:00.000-04:00","completeDate":"2016-07-26T03:41:18.239-04:00","originBoardId":3466} final Long id = JsonParseUtil.getOptionalLong(json, "id"); final URI self = JsonParseUtil.getSelfUri(json); final String state = json.getString("state"); final String name = json.getString("name"); final Date startDate = parseDateTime(json.getString("startDate")); final Date endDate = parseDateTime(json.getString("endDate")); final Date completeDate = parseDateTime(json.optString("completeDate", null)); final Integer originBoardId = JsonParseUtil.parseOptionInteger(json, "originBoardId"); return new Sprint(self, id, state, name, startDate, endDate, completeDate, originBoardId); }
@Override public ProjectRole parse(final JSONObject json) throws JSONException { final URI self = JsonParseUtil.getSelfUri(json); final long id = json.getLong("id"); final String name = json.getString("name"); final String description = json.getString("description"); final Optional<JSONArray> roleActorsOpt = JsonParseUtil.getOptionalArray(json, "actors"); final Collection<RoleActor> roleActors = roleActorsOpt.isPresent() ? JsonParseUtil.parseJsonArray(roleActorsOpt.get(), roleActorJsonParser) : ImmutableSet.<RoleActor>of(); return new ProjectRole(id, self, name, description, roleActors); }
@Override public ChangelogItem parse(JSONObject json) throws JSONException { final String fieldTypeStr = JsonParseUtil.getNestedString(json, "fieldtype"); final FieldType fieldType; if ("jira".equalsIgnoreCase(fieldTypeStr)) { fieldType = FieldType.JIRA; } else if ("custom".equalsIgnoreCase(fieldTypeStr)) { fieldType = FieldType.CUSTOM; } else { throw new JSONException("[" + fieldTypeStr + "] does not represent a valid field type. Expected [jira] or [custom]."); } final String field = JsonParseUtil.getNestedString(json, "field"); final String from = JsonParseUtil.getNullableString(json, "from"); final String fromString = JsonParseUtil.getNullableString(json, "fromString"); final String to = JsonParseUtil.getNullableString(json, "to"); final String toString = JsonParseUtil.getNullableString(json, "toString"); return new ChangelogItem(fieldType, field, from, fromString, to, toString); } }
@Override public TimeTracking parse(JSONObject json) throws JSONException { final Integer originalEstimateMinutes = JsonParseUtil.parseOptionInteger(json, "originalEstimateSeconds"); final Integer timeRemainingMinutes = JsonParseUtil.parseOptionInteger(json, "remainingEstimateSeconds"); final Integer timeSpentMinutes = JsonParseUtil.parseOptionInteger(json, "timeSpentSeconds"); return new TimeTracking(originalEstimateMinutes != null ? originalEstimateMinutes / 60 : null, timeRemainingMinutes != null ? timeRemainingMinutes / 60 : null, timeSpentMinutes != null ? timeSpentMinutes / 60 : null); }
@Override public BasicProject parse(JSONObject json) throws JSONException { final URI selfUri = JsonParseUtil.getSelfUri(json); final String key = json.getString("key"); final String name = JsonParseUtil.getOptionalString(json, "name"); return new BasicProject(selfUri, key, name); } }
@Override public OperationLink parse(final JSONObject json) throws JSONException { final String id = JsonParseUtil.getOptionalString(json, "id"); final String styleClass = JsonParseUtil.getOptionalString(json, "styleClass"); final String label = json.getString("label"); final String title = JsonParseUtil.getOptionalString(json, "title"); final String href = json.getString("href"); final Integer weight = JsonParseUtil.parseOptionInteger(json, "weight"); final String iconClass = JsonParseUtil.getOptionalString(json, "iconClass"); return new OperationLink(id, styleClass, label, title, href, weight, iconClass); } }
@Override public BasicStatus parse(JSONObject json) throws JSONException { final URI self = JsonParseUtil.getSelfUri(json); final String name = json.getString("name"); return new BasicStatus(self, name); } }
@Override public String parse(JSONObject jsonObject) throws JSONException { return JsonParseUtil.getNullableString(jsonObject, VALUE_ATTRIBUTE); } }