package com.owlike.genson.ext.jsr353;
import javax.json.*;
import java.util.*;
class GensonJsonArray extends AbstractList<JsonValue> implements JsonArray {
private final List<JsonValue> values;
GensonJsonArray(List<JsonValue> values) {
this.values = values;
}
@Override
public JsonObject getJsonObject(int index) {
return JsonObject.class.cast(values.get(index));
}
@Override
public JsonArray getJsonArray(int index) {
return JsonArray.class.cast(values.get(index));
}
@Override
public JsonNumber getJsonNumber(int index) {
return JsonNumber.class.cast(values.get(index));
}
@Override
public JsonString getJsonString(int index) {
return JsonString.class.cast(values.get(index));
}
@Override
public <T extends JsonValue> List<T> getValuesAs(Class<T> clazz) {
return (List<T>) values;
}
@Override
public String getString(int index) {
return getJsonString(index).getString();
}
@Override
public String getString(int index, String defaultValue) {
if (isNull(index)) return defaultValue;
return getString(index);
}
@Override
public int getInt(int index) {
return getJsonNumber(index).intValue();
}
@Override
public int getInt(int index, int defaultValue) {
if (isNull(index)) return defaultValue;
return getInt(index);
}
@Override
public boolean getBoolean(int index) {
JsonValue value = values.get(index);
if (JsonValue.TRUE.equals(value)) return true;
if (JsonValue.FALSE.equals(value)) return false;
throw new ClassCastException();
}
@Override
public boolean getBoolean(int index, boolean defaultValue) {
if (isNull(index)) return defaultValue;
return getBoolean(index);
}
@Override
public boolean isNull(int index) {
return JsonValue.NULL.equals(values.get(index));
}
@Override
public JsonValue get(int index) {
return values.get(index);
}
@Override
public int size() {
return values.size();
}
@Override
public ValueType getValueType() {
return ValueType.ARRAY;
}
@Override
public int hashCode() {
return values.hashCode();
}
@Override
public boolean equals(Object o) {
return values.equals(o);
}
@Override
public String toString() {
return JSR353Bundle.toString(this);
}
}