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

org.hibernate.search.elasticsearch.impl.JsonBuilder Maven / Gradle / Ivy

The newest version!
/*
 * Hibernate Search, full-text search for your domain model
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.search.elasticsearch.impl;

import java.util.Calendar;
import java.util.Date;

import org.hibernate.search.elasticsearch.client.impl.URLEncodedString;
import org.hibernate.search.elasticsearch.util.impl.ElasticsearchDateHelper;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

/**
 * Builder used to make the Gson API chainable.
 *
 * @author Guillaume Smet
 */
public class JsonBuilder {

	private JsonBuilder() {
	}

	public static JsonBuilder.Array array() {
		return new JsonBuilder.Array();
	}

	public static JsonBuilder.Array array(JsonArray jsonArray) {
		return new JsonBuilder.Array( jsonArray );
	}

	public static JsonBuilder.Object object() {
		return new JsonBuilder.Object();
	}

	public static JsonBuilder.Object object(JsonObject jsonObject) {
		return new JsonBuilder.Object( jsonObject );
	}

	/**
	 * An interface for reusable objects that append data to a JSON object.
	 * 

Eases the use of conditional statements within this chainable API. * @author Yoann Rodiere */ public interface JsonAppender { void append(T appendable); } public static class Array { private JsonArray jsonArray = new JsonArray(); private Array() { } private Array(JsonArray jsonArray) { this.jsonArray = jsonArray; } public Array add(JsonElement element) { jsonArray.add( element ); return this; } public Array add(JsonBuilder.Array element) { jsonArray.add( element.build() ); return this; } public Array add(JsonBuilder.Object element) { jsonArray.add( element.build() ); return this; } public Array append(JsonAppender appender) { appender.append( this ); return this; } public JsonArray build() { return jsonArray; } @Override public String toString() { return jsonArray.toString(); } public int size() { return jsonArray.size(); } } public static class Object { private JsonObject jsonObject = new JsonObject(); private Object() { } private Object(JsonObject jsonObject) { this.jsonObject = jsonObject; } public JsonBuilder.Object add( String property, JsonElement element) { jsonObject.add( property, element ); return this; } public JsonBuilder.Object add( String property, JsonBuilder.Array element) { jsonObject.add( property, element.build() ); return this; } public JsonBuilder.Object add( String property, JsonBuilder.Object element) { jsonObject.add( property, element.build() ); return this; } public JsonBuilder.Object addProperty(String property, java.lang.Object value) { if ( value instanceof String || value == null ) { jsonObject.addProperty( property, (String) value ); } if ( value instanceof URLEncodedString ) { addProperty( property, (URLEncodedString) value ); } else if ( value instanceof Number ) { jsonObject.addProperty( property, (Number) value ); } else if ( value instanceof Boolean ) { jsonObject.addProperty( property, (Boolean) value ); } else if ( value instanceof Character ) { jsonObject.addProperty( property, (Character) value ); } else if ( value instanceof Date ) { jsonObject.addProperty( property, ElasticsearchDateHelper.dateToString( (Date) value ) ); } else if ( value instanceof Calendar ) { jsonObject.addProperty( property, ElasticsearchDateHelper.calendarToString( (Calendar) value ) ); } return this; } public JsonBuilder.Object addProperty(String property, Boolean value) { jsonObject.addProperty( property, value ); return this; } public JsonBuilder.Object addProperty(String property, Number value) { jsonObject.addProperty( property, value ); return this; } public JsonBuilder.Object addProperty(String property, Character value) { jsonObject.addProperty( property, value ); return this; } public JsonBuilder.Object addProperty(String property, String value) { jsonObject.addProperty( property, value ); return this; } public JsonBuilder.Object addProperty(String property, URLEncodedString value) { jsonObject.addProperty( property, value.original ); return this; } public Object append(JsonAppender appender) { appender.append( this ); return this; } public JsonObject build() { return jsonObject; } @Override public String toString() { return jsonObject.toString(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy