View Javadoc

1   /*
2    * Copyright (C) 2012 Atlassian
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.atlassian.jira.rest.client.internal.json;
18  
19  import com.atlassian.jira.rest.client.api.domain.CustomFieldOption;
20  import org.codehaus.jettison.json.JSONArray;
21  import org.codehaus.jettison.json.JSONException;
22  import org.codehaus.jettison.json.JSONObject;
23  
24  import java.net.URI;
25  import java.util.Collections;
26  
27  /**
28   * JSON parser for CustomFieldOption
29   *
30   * @since v1.0
31   */
32  public class CustomFieldOptionJsonParser implements JsonObjectParser<CustomFieldOption> {
33  
34      private final JsonArrayParser<Iterable<CustomFieldOption>> childrenParser = GenericJsonArrayParser.create(this);
35  
36      @Override
37      public CustomFieldOption parse(JSONObject json) throws JSONException {
38          final URI selfUri = JsonParseUtil.getSelfUri(json);
39          final long id = json.getLong("id");
40          final String value = json.getString("value");
41  
42          final JSONArray childrenArray = json.optJSONArray("children");
43          final Iterable<CustomFieldOption> children = (childrenArray != null)
44                  ? childrenParser.parse(childrenArray)
45                  : Collections.<CustomFieldOption>emptyList();
46  
47          final JSONObject childObject = json.optJSONObject("child");
48          final CustomFieldOption child = (childObject != null) ? parse(childObject) : null;
49  
50          return new CustomFieldOption(id, selfUri, value, children, child);
51      }
52  }