package com.fasterxml.jackson.jr.ob.impl;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.net.URL;
import java.util.*;
import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.jr.ob.JSON;
abstract class ValueLocatorBase
{
public final static int SER_UNKNOWN = 0;
public final static int SER_MAP = 1;
public final static int SER_LIST = 2;
public final static int SER_COLLECTION = 3;
public final static int SER_OBJECT_ARRAY = 4;
public final static int SER_INT_ARRAY = 5;
public final static int SER_LONG_ARRAY = 6;
public final static int SER_BOOLEAN_ARRAY = 7;
public final static int SER_TREE_NODE = 8;
public final static int SER_STRING = 9;
public final static int SER_CHARACTER_SEQUENCE = 10;
public final static int SER_CHAR_ARRAY = 11;
public final static int SER_BYTE_ARRAY = 12;
public final static int SER_NUMBER_BYTE = 13;
public final static int SER_NUMBER_SHORT = 14;
public final static int SER_NUMBER_INTEGER = 15;
public final static int SER_NUMBER_LONG = 16;
public final static int SER_NUMBER_FLOAT = 17;
public final static int SER_NUMBER_DOUBLE = 18;
public final static int SER_NUMBER_BIG_INTEGER = 19;
public final static int SER_NUMBER_BIG_DECIMAL = 20;
public final static int SER_BOOLEAN = 21;
public final static int SER_CHAR = 22;
public final static int SER_ENUM = 23;
public final static int SER_DATE = 24;
public final static int SER_CALENDAR = 25;
public final static int SER_CLASS = 26;
public final static int SER_FILE = 27;
public final static int SER_UUID = 28;
public final static int SER_URL = 29;
public final static int SER_URI = 30;
public final static int SER_ITERABLE = 31;
protected final static int CACHE_FLAGS = JSON.CACHE_FLAGS;
protected POJODefinition _resolveBeanDef(Class<?> raw) {
return POJODefinition.find(raw);
}
protected int _findSimpleType(Class<?> raw, boolean forSer)
{
if (raw == String.class) {
return SER_STRING;
}
if (raw.isArray()) {
Class<?> elemType = raw.getComponentType();
if (elemType.isPrimitive()) {
if (raw == byte[].class) {
return SER_BYTE_ARRAY;
}
if (raw == char[].class) {
return SER_CHAR_ARRAY;
}
if (raw == int[].class) {
return SER_INT_ARRAY;
}
if (raw == long[].class) {
return SER_LONG_ARRAY;
}
if (raw == boolean[].class) {
return SER_BOOLEAN_ARRAY;
}
return SER_UNKNOWN;
}
return SER_OBJECT_ARRAY;
}
if (raw.isPrimitive()) {
if (raw == Boolean.TYPE) return SER_BOOLEAN;
if (raw == Integer.TYPE) return SER_NUMBER_INTEGER;
if (raw == Long.TYPE) return SER_NUMBER_LONG;
if (raw == Byte.TYPE) return SER_NUMBER_BYTE;
if (raw == Short.TYPE) return SER_NUMBER_SHORT;
if (raw == Double.TYPE) return SER_NUMBER_DOUBLE;
if (raw == Float.TYPE) return SER_NUMBER_FLOAT;
if (raw == Character.TYPE) return SER_CHAR;
throw new IllegalArgumentException("Unrecognized primitive type: "+raw.getName());
}
if (raw == Boolean.class) {
return SER_BOOLEAN;
}
if (Number.class.isAssignableFrom(raw)) {
if (raw == Integer.class) return SER_NUMBER_INTEGER;
if (raw == Long.class) return SER_NUMBER_LONG;
if (raw == Byte.class) return SER_NUMBER_BYTE;
if (raw == Short.class) return SER_NUMBER_SHORT;
if (raw == Double.class) return SER_NUMBER_DOUBLE;
if (raw == Float.class) return SER_NUMBER_FLOAT;
if (raw == BigDecimal.class) return SER_NUMBER_BIG_DECIMAL;
if (raw == BigInteger.class) {
return SER_NUMBER_BIG_INTEGER;
}
return SER_UNKNOWN;
}
if (raw == Character.class) {
return SER_CHAR;
}
if (raw.isEnum()) {
return SER_ENUM;
}
if (Map.class.isAssignableFrom(raw)) {
return SER_MAP;
}
if (Collection.class.isAssignableFrom(raw)) {
if (List.class.isAssignableFrom(raw)) {
if (RandomAccess.class.isAssignableFrom(raw)) {
return SER_LIST;
}
}
return SER_COLLECTION;
}
if (TreeNode.class.isAssignableFrom(raw)) {
return SER_TREE_NODE;
}
if (Calendar.class.isAssignableFrom(raw)) {
return SER_CALENDAR;
}
if (raw == Class.class) {
return SER_CLASS;
}
if (Date.class.isAssignableFrom(raw)) {
return SER_DATE;
}
if (File.class.isAssignableFrom(raw)) {
return SER_FILE;
}
if (URL.class.isAssignableFrom(raw)) {
return SER_URL;
}
if (URI.class.isAssignableFrom(raw)) {
return SER_URI;
}
if (UUID.class.isAssignableFrom(raw)) {
return SER_UUID;
}
if (CharSequence.class.isAssignableFrom(raw)) {
return SER_CHARACTER_SEQUENCE;
}
if (forSer && Iterable.class.isAssignableFrom(raw)) {
return SER_ITERABLE;
}
return SER_UNKNOWN;
}
}