/*
* Copyright 2014 Artem Chikin
* Copyright 2014 Artem Herasymchuk
* Copyright 2014 Tom Krywitsky
* Copyright 2014 Henry Pabst
* Copyright 2014 Bradley Simons
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ca.ualberta.cmput301w14t08.geochan.helpers;
import android.graphics.Bitmap;
import android.location.Location;
import ca.ualberta.cmput301w14t08.geochan.json.BitmapJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.json.CommentJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.json.CommentOfflineJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.json.LocationJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.json.ThreadCommentJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.json.ThreadCommentOfflineJsonConverter;
import ca.ualberta.cmput301w14t08.geochan.models.Comment;
import ca.ualberta.cmput301w14t08.geochan.models.ThreadComment;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* Genereates and returns Gson objects with the required type converters set.
*
* @author Artem Herasymchuk
*/
public class GsonHelper {
private static Gson offlineGson = null;
private static Gson onlineGson = null;
private static Gson exposeGson = null;
private static GsonHelper instance = null;
private GsonHelper() {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Comment.class, new CommentJsonConverter());
builder.registerTypeAdapter(ThreadComment.class, new ThreadCommentJsonConverter());
builder.registerTypeAdapter(Bitmap.class, new BitmapJsonConverter());
builder.registerTypeAdapter(Location.class, new LocationJsonConverter());
onlineGson = builder.create();
builder = new GsonBuilder();
builder.registerTypeAdapter(Comment.class, new CommentOfflineJsonConverter());
builder.registerTypeAdapter(ThreadComment.class, new ThreadCommentOfflineJsonConverter());
builder.registerTypeAdapter(Location.class, new LocationJsonConverter());
offlineGson = builder.create();
builder = new GsonBuilder();
exposeGson = builder.excludeFieldsWithoutExposeAnnotation().create();
}
public static GsonHelper getInstance() {
if (instance == null) {
instance = new GsonHelper();
}
return instance;
}
public static Gson getOnlineGson() {
if (onlineGson == null) {
getInstance();
}
return onlineGson;
}
public static Gson getOfflineGson() {
if (offlineGson == null) {
getInstance();
}
return offlineGson;
}
public static Gson getExposeGson() {
if (exposeGson == null) {
getInstance();
}
return exposeGson;
}
}