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

com.balajeetm.mystique.core.module.GsonSerialiser Maven / Gradle / Ivy

/*
 * Copyright (c) Balajee TM 2016.
 * All rights reserved.
 * License -  @see 
 */

/*
 * Created on 9 Oct, 2016 by balajeetm
 */
package com.balajeetm.mystique.core.module;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Map.Entry;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.balajeetm.mystique.util.gson.bean.lever.JsonLever;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.internal.LazilyParsedNumber;

/**
 * The Class GsonSerialiser.
 *
 * @author balajeetm
 */
@Component
public class GsonSerialiser extends StdSerializer {

	/** The json lever. */
	@Autowired
	private JsonLever jsonLever;

	/**
	 * Instantiates a new gson serialiser.
	 */
	public GsonSerialiser() {
		this(JsonElement.class);
	}

	/**
	 * Instantiates a new gson serialiser.
	 *
	 * @param t the t
	 */
	public GsonSerialiser(Class t) {
		super(t, true);
	}

	/* (non-Javadoc)
	 * @see com.fasterxml.jackson.databind.ser.std.StdSerializer#serialize(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)
	 */
	@Override
	public void serialize(JsonElement value, JsonGenerator gen, SerializerProvider provider) throws IOException {
		if (jsonLever.isNull(value)) {
			gen.writeNull();
		}
		else if (jsonLever.isJsonObject(value)) {
			gen.writeStartObject();
			JsonObject jsonObject = value.getAsJsonObject();
			for (Entry entry : jsonObject.entrySet()) {
				gen.writeFieldName(entry.getKey());
				serialize(entry.getValue(), gen, provider);
			}
			gen.writeEndObject();
		}
		else if (jsonLever.isJsonArray(value)) {
			gen.writeStartArray();
			JsonArray jsonArray = value.getAsJsonArray();
			for (JsonElement jsonElement : jsonArray) {
				serialize(jsonElement, gen, provider);
			}
			gen.writeEndArray();
		}
		else if (jsonLever.isJsonPrimitive(value)) {
			JsonPrimitive jsonPrimitive = value.getAsJsonPrimitive();
			if (jsonPrimitive.isBoolean()) {
				gen.writeBoolean(jsonPrimitive.getAsBoolean());
			}
			if (jsonPrimitive.isNumber()) {
				Number nnode = jsonPrimitive.getAsNumber();
				if (nnode instanceof LazilyParsedNumber) {
					gen.writeNumber(nnode.toString());
				}
				else if (nnode instanceof Integer) {
					gen.writeNumber(nnode.intValue());
				}
				else if (nnode instanceof Short) {
					gen.writeNumber(nnode.shortValue());
				}
				else if (nnode instanceof BigInteger || nnode instanceof Long) {
					gen.writeNumber(nnode.longValue());
				}
				else if (nnode instanceof Float) {
					gen.writeNumber(nnode.floatValue());
				}
				else if (nnode instanceof Double || nnode instanceof BigDecimal) {
					gen.writeNumber(nnode.doubleValue());
				}
			}
			if (jsonPrimitive.isString()) {
				gen.writeString(jsonPrimitive.getAsString());
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy