package com.google.gson;
import com.google.gson.internal..Gson.Preconditions;
import com.google.gson.internal.Excluder;
import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class GsonBuilder
{
private Excluder excluder = Excluder.DEFAULT;
private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT;
private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
private final Map<Type, InstanceCreator<?>> instanceCreators = new HashMap();
private final List<TypeAdapterFactory> factories = new ArrayList();
private final List<TypeAdapterFactory> hierarchyFactories = new ArrayList();
private boolean serializeNulls;
private String datePattern;
private int dateStyle = 2;
private int timeStyle = 2;
private boolean complexMapKeySerialization;
private boolean serializeSpecialFloatingPointValues;
private boolean escapeHtmlChars = true;
private boolean prettyPrinting;
private boolean generateNonExecutableJson;
public GsonBuilder enableComplexMapKeySerialization()
{
this.complexMapKeySerialization = true;
return this;
}
public GsonBuilder setPrettyPrinting()
{
this.prettyPrinting = true;
return this;
}
public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter)
{
.Gson.Preconditions.checkArgument(((typeAdapter instanceof JsonSerializer)) || ((typeAdapter instanceof JsonDeserializer)) || ((typeAdapter instanceof InstanceCreator)) || ((typeAdapter instanceof TypeAdapter)));
if ((typeAdapter instanceof InstanceCreator)) {
this.instanceCreators.put(type, (InstanceCreator)typeAdapter);
}
if (((typeAdapter instanceof JsonSerializer)) || ((typeAdapter instanceof JsonDeserializer))) {
TypeToken typeToken = TypeToken.get(type);
this.factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(typeToken, typeAdapter));
}
if ((typeAdapter instanceof TypeAdapter)) {
this.factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter));
}
return this;
}
public GsonBuilder registerTypeAdapterFactory(TypeAdapterFactory factory)
{
this.factories.add(factory);
return this;
}
public Gson create()
{
List factories = new ArrayList();
factories.addAll(this.factories);
Collections.reverse(factories);
factories.addAll(this.hierarchyFactories);
addTypeAdaptersForDate(this.datePattern, this.dateStyle, this.timeStyle, factories);
return new Gson(this.excluder, this.fieldNamingPolicy, this.instanceCreators, this.serializeNulls, this.complexMapKeySerialization, this.generateNonExecutableJson, this.escapeHtmlChars, this.prettyPrinting, this.serializeSpecialFloatingPointValues, this.longSerializationPolicy, factories);
}
private void addTypeAdaptersForDate(String datePattern, int dateStyle, int timeStyle, List<TypeAdapterFactory> factories)
{
DefaultDateTypeAdapter dateTypeAdapter;
if ((datePattern != null) && (!"".equals(datePattern.trim()))) {
dateTypeAdapter = new DefaultDateTypeAdapter(datePattern);
}
else
{
DefaultDateTypeAdapter dateTypeAdapter;
if ((dateStyle != 2) && (timeStyle != 2))
dateTypeAdapter = new DefaultDateTypeAdapter(dateStyle, timeStyle);
else
return;
}
DefaultDateTypeAdapter dateTypeAdapter;
factories.add(TreeTypeAdapter.newFactory(TypeToken.get(java.util.Date.class), dateTypeAdapter));
factories.add(TreeTypeAdapter.newFactory(TypeToken.get(Timestamp.class), dateTypeAdapter));
factories.add(TreeTypeAdapter.newFactory(TypeToken.get(java.sql.Date.class), dateTypeAdapter));
}
}