/****************************************************************************** * Copyright (c) 2011 GitHub Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Kevin Sawicki (GitHub Inc.) - initial API and implementation *****************************************************************************/ package org.eclipse.egit.github.core.client; import static com.google.gson.FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.Reader; import java.lang.reflect.Type; import java.util.Date; import org.eclipse.egit.github.core.event.Event; /** * Gson utilities. */ public abstract class GsonUtils { private static final Gson GSON = createGson(true); private static final Gson GSON_NO_NULLS = createGson(false); /** * Create the standard {@link Gson} configuration * * @return created gson, never null */ public static final Gson createGson() { return createGson(true); } /** * Create the standard {@link Gson} configuration * * @param serializeNulls * whether nulls should be serialized * * @return created gson, never null */ public static final Gson createGson(final boolean serializeNulls) { final GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new DateFormatter()); builder.registerTypeAdapter(Event.class, new EventFormatter()); builder.setFieldNamingPolicy(LOWER_CASE_WITH_UNDERSCORES); if (serializeNulls) builder.serializeNulls(); return builder.create(); } /** * Get reusable pre-configured {@link Gson} instance * * @return Gson instance */ public static final Gson getGson() { return GSON; } /** * Get reusable pre-configured {@link Gson} instance * * @param serializeNulls * @return Gson instance */ public static final Gson getGson(final boolean serializeNulls) { return serializeNulls ? GSON : GSON_NO_NULLS; } /** * Convert object to json * * @param object * @return json string */ public static final String toJson(final Object object) { return toJson(object, true); } /** * Convert object to json * * @param object * @param includeNulls * @return json string */ public static final String toJson(final Object object, final boolean includeNulls) { return includeNulls ? GSON.toJson(object) : GSON_NO_NULLS .toJson(object); } /** * Convert string to given type * * @param json * @param type * @return instance of type */ public static final <V> V fromJson(String json, Class<V> type) { return GSON.fromJson(json, type); } /** * Convert string to given type * * @param json * @param type * @return instance of type */ public static final <V> V fromJson(String json, Type type) { return GSON.fromJson(json, type); } /** * Convert content of reader to given type * * @param reader * @param type * @return instance of type */ public static final <V> V fromJson(Reader reader, Class<V> type) { return GSON.fromJson(reader, type); } /** * Convert content of reader to given type * * @param reader * @param type * @return instance of type */ public static final <V> V fromJson(Reader reader, Type type) { return GSON.fromJson(reader, type); } }