All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.balajeetm.mystique.util.gson.GsonFactory Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) Balajee TM 2017.
 * All rights reserved.
 * License -  @see 
 */

/*
 * Created on 20 Oct, 2017 by balajeemohan
 * http://www.balajeetm.com
 */
package com.balajeetm.mystique.util.gson;

import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.datatype.XMLGregorianCalendar;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

/**
 * A factory for creating Gson objects.
 *
 * @author balajeemohan
 */
public class GsonFactory {

  /** The gson. */
  private Gson gson;

  /** The gson builder. */
  private GsonBuilder gsonBuilder;

  /**
   * Gets the single instance of GsonFactory.
   *
   * @return single instance of GsonFactory
   */
  public static GsonFactory getInstance() {
    return Creator.INSTANCE;
  }

  // Efficient Thread safe Lazy Initialization
  // works only if the singleton constructor is non parameterized
  /** The Class Creator. */
  private static class Creator {

    /** The instance. */
    private static GsonFactory INSTANCE = new GsonFactory();
  }

  /** Instantiates a new gson factory. */
  private GsonFactory() {}

  /**
   * Gets the gson.
   *
   * @return the gson
   */
  public Gson getGson() {
    if (null == gson) {
      gson = getGsonBuilder().create();
    }
    return gson;
  }

  /**
   * Gets the gson builder.
   *
   * @return the gson builder
   */
  public GsonBuilder getGsonBuilder() {
    if (null == gsonBuilder) {
      gsonBuilder = new GsonBuilder();
      gsonBuilder.setDateFormat(DateFormat.LONG, DateFormat.LONG);
      gsonBuilder.registerTypeAdapter(
          Date.class,
          new JsonDeserializer() {

            @Override
            public Date deserialize(
                JsonElement json, Type typeOfT, JsonDeserializationContext context)
                throws JsonParseException {
              Date date = null;
              if (null != json && json.isJsonPrimitive()) {
                date = new Date(json.getAsJsonPrimitive().getAsLong());
              }
              return date;
            }
          });
      gsonBuilder.registerTypeAdapter(
          XMLGregorianCalendar.class,
          new JsonSerializer() {

            @Override
            public JsonElement serialize(
                XMLGregorianCalendar src, Type typeOfSrc, JsonSerializationContext context) {
              Date date = null;
              if (null != src) {
                date = src.toGregorianCalendar().getTime();
              }
              return new JsonPrimitive(
                  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(date));
            }
          });
    }
    return gsonBuilder;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy