package org.test4j.json.encoder; import java.io.File; import java.math.BigDecimal; import java.math.BigInteger; import java.net.InetAddress; import java.net.SocketAddress; import java.net.URI; import java.net.URL; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicIntegerArray; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLongArray; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReferenceArray; import java.util.regex.Pattern; import org.test4j.json.encoder.single.FixedTypeEncoder; import org.test4j.json.encoder.single.SpecTypeEncoder; import org.test4j.json.encoder.single.fixed.BigDecimalEncoder; import org.test4j.json.encoder.single.fixed.BigIntegerEncoder; import org.test4j.json.encoder.single.fixed.BooleanEncoder; import org.test4j.json.encoder.single.fixed.ByteEncoder; import org.test4j.json.encoder.single.fixed.CharEncoder; import org.test4j.json.encoder.single.fixed.CharsetEncoder; import org.test4j.json.encoder.single.fixed.ClazzEncoder; import org.test4j.json.encoder.single.fixed.DoubleEncoder; import org.test4j.json.encoder.single.fixed.EnumEncoder; import org.test4j.json.encoder.single.fixed.FloatEncoder; import org.test4j.json.encoder.single.fixed.InetAddressEncoder; import org.test4j.json.encoder.single.fixed.IntegerEncoder; import org.test4j.json.encoder.single.fixed.LocaleEncoder; import org.test4j.json.encoder.single.fixed.LongEncoder; import org.test4j.json.encoder.single.fixed.PatternEncoder; import org.test4j.json.encoder.single.fixed.ShortEncoder; import org.test4j.json.encoder.single.fixed.SocketAddressEncoder; import org.test4j.json.encoder.single.fixed.StringEncoder; import org.test4j.json.encoder.single.fixed.TimeZoneEncoder; import org.test4j.json.encoder.single.fixed.URIEncoder; import org.test4j.json.encoder.single.fixed.URLEncoder; import org.test4j.json.encoder.single.fixed.UUIDEncoder; import org.test4j.json.encoder.single.spec.AppendableEncoder; import org.test4j.json.encoder.single.spec.AtomicBooleanEncoder; import org.test4j.json.encoder.single.spec.AtomicIntegerArrayEncoder; import org.test4j.json.encoder.single.spec.AtomicIntegerEncoder; import org.test4j.json.encoder.single.spec.AtomicLongArrayEncoder; import org.test4j.json.encoder.single.spec.AtomicLongEncoder; import org.test4j.json.encoder.single.spec.AtomicReferenceArrayEncoder; import org.test4j.json.encoder.single.spec.AtomicReferenceEncoder; import org.test4j.json.encoder.single.spec.DateEncoder; import org.test4j.json.encoder.single.spec.FileEncoder; import org.test4j.json.encoder.single.spec.SimpleDateFormatEncoder; @SuppressWarnings("rawtypes") public abstract class SingleEncoder<T> extends JSONEncoder<T> { protected SingleEncoder(Class clazz) { super(clazz); } public static FixedTypeEncoder isFinalTypeEncoder(Class type) { if (type == String.class) { return StringEncoder.instance; } if (type.isEnum()) { return EnumEncoder.instance; } if (type == boolean.class || type == Boolean.class) { return BooleanEncoder.instance; } if (type == byte.class || type == Byte.class) { return ByteEncoder.instance; } if (type == char.class || type == Character.class) { return CharEncoder.instance; } if (type == Class.class) { return ClazzEncoder.instance; } // ====number decoder if (type == double.class || type == Double.class) { return DoubleEncoder.instance; } if (type == float.class || type == Float.class) { return FloatEncoder.instance; } if (type == int.class || type == Integer.class) { return IntegerEncoder.instance; } if (type == long.class || type == Long.class) { return LongEncoder.instance; } if (type == short.class || type == Short.class) { return ShortEncoder.instance; } if (type == Locale.class) { return LocaleEncoder.instance; } if (type == Pattern.class) { return PatternEncoder.instance; } if (type == URI.class) { return URIEncoder.instance; } if (type == URL.class) { return URLEncoder.instance; } if (type == UUID.class) { return UUIDEncoder.instance; } // not final type if (TimeZone.class.isAssignableFrom(type)) { return TimeZoneEncoder.instance; } if (InetAddress.class.isAssignableFrom(type)) { return InetAddressEncoder.instance; } if (BigDecimal.class.isAssignableFrom(type)) { return BigDecimalEncoder.instance; } if (BigInteger.class.isAssignableFrom(type)) { return BigIntegerEncoder.instance; } if (Charset.class.isAssignableFrom(type)) { return CharsetEncoder.instance; } if (SocketAddress.class.isAssignableFrom(type)) { return SocketAddressEncoder.instance; } return null; } public static SpecTypeEncoder isSpecTypeEncoder(Class type) { if (Appendable.class.isAssignableFrom(type)) { return AppendableEncoder.instance; } if (Date.class.isAssignableFrom(type)) { return DateEncoder.instance; } if (File.class.isAssignableFrom(type)) { return FileEncoder.instance; } if (AtomicBoolean.class.isAssignableFrom(type)) { return AtomicBooleanEncoder.instance; } if (AtomicInteger.class.isAssignableFrom(type)) { return AtomicIntegerEncoder.instance; } if (AtomicIntegerArray.class.isAssignableFrom(type)) { return AtomicIntegerArrayEncoder.instance; } if (AtomicLong.class.isAssignableFrom(type)) { return AtomicLongEncoder.instance; } if (AtomicLongArray.class.isAssignableFrom(type)) { return AtomicLongArrayEncoder.instance; } if (AtomicReference.class.isAssignableFrom(type)) { return AtomicReferenceEncoder.instance; } if (AtomicReferenceArray.class.isAssignableFrom(type)) { return AtomicReferenceArrayEncoder.instance; } if (SimpleDateFormat.class.isAssignableFrom(type)) { return SimpleDateFormatEncoder.instance; } return null; } }