package fr.prcaen.externalresources.model; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.gson.internal.LazilyParsedNumber; public final class Resource { private final Object value; public Resource(Boolean value) { this.value = value; } public Resource(Number value) { this.value = value; } public Resource(String value) { this.value = value; } public Resource(Resource[] value) { this.value = value; } public boolean isBoolean() { return value instanceof Boolean; } public boolean isNumber() { return value instanceof Number; } public boolean isString() { return value instanceof String; } public boolean isArray() { return value instanceof Resource[]; } public boolean getAsBoolean() { if (isBoolean() && null != getAsNonPrimitiveBoolean()) { return getAsNonPrimitiveBoolean(); } else { return Boolean.parseBoolean(getAsString()); } } @Nullable public String getAsString() { if (isNumber() && null != getAsNumber()) { return getAsNumber().toString(); } else if (isBoolean() && null != getAsNonPrimitiveBoolean()) { return getAsNonPrimitiveBoolean().toString(); } else if (isString()) { return (String) value; } else { return null; } } @Nullable public Float getAsFloat() { if (isNumber() && null != getAsNumber()) { return getAsNumber().floatValue(); } else if (null != getAsString()) { try { return Float.parseFloat(getAsString()); } catch (NumberFormatException e) { return null; } } else { return null; } } @Nullable public Integer getAsInt() { if (isNumber() && null != getAsNumber()) { return getAsNumber().intValue(); } else if (null != getAsString()) { try { return Integer.parseInt(getAsString()); } catch (NumberFormatException e) { return null; } } else { return null; } } public int[] getAsIntegerArray() { if (isArray()) { Resource[] resources = getAsArray(); int[] integers = new int[resources.length]; for (int i = 0; i < resources.length; i++) { Resource resource = resources[i]; if (null != resource.getAsInt()) { integers[i] = resource.getAsInt(); } } return integers; } else { return new int[] {}; } } @NonNull public String[] getAsStringArray() { if (isArray()) { Resource[] resources = getAsArray(); String[] strings = new String[resources.length]; for (int i = 0; i < resources.length; i++) { Resource resource = resources[i]; strings[i] = resource.getAsString(); } return strings; } else if (null != getAsString()) { return getAsString().split("(?!^)"); } else { return new String[] {}; } } @Nullable protected Number getAsNumber() { if (isString()) { return new LazilyParsedNumber((String) value); } else if (isNumber()) { return (Number) value; } else { return null; } } @NonNull protected Resource[] getAsArray() { try { return (Resource[]) value; } catch (ClassCastException e) { return new Resource[] {}; } } @Nullable protected Boolean getAsNonPrimitiveBoolean() { try { return (Boolean) value; } catch (ClassCastException e) { return null; } } }