/* * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.elasticsearch.gson.impl; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; public abstract class JsonElementType<T extends JsonElement> { public static final JsonElementType<JsonObject> OBJECT = new JsonElementType<JsonObject>() { @Override public JsonObject newInstance() { return new JsonObject(); } @Override public JsonObject cast(JsonElement element) { return element == null || element.isJsonNull() ? null : element.getAsJsonObject(); } @Override public boolean isInstance(JsonElement element) { return element != null && element.isJsonObject(); } @Override public String toString() { return JsonObject.class.getSimpleName(); } }; public static final JsonElementType<JsonArray> ARRAY = new JsonElementType<JsonArray>() { @Override public JsonArray newInstance() { return new JsonArray(); } @Override public JsonArray cast(JsonElement element) { return element == null || element.isJsonNull() ? null : element.getAsJsonArray(); } @Override public boolean isInstance(JsonElement element) { return element != null && element.isJsonArray(); } @Override public String toString() { return JsonArray.class.getSimpleName(); } }; public static final JsonElementType<JsonPrimitive> PRIMITIVE = new JsonElementType<JsonPrimitive>() { @Override public JsonPrimitive newInstance() { throw new UnsupportedOperationException(); } @Override public JsonPrimitive cast(JsonElement element) { return element == null || element.isJsonNull() ? null : element.getAsJsonPrimitive(); } @Override public boolean isInstance(JsonElement element) { return element != null && element.isJsonPrimitive(); } @Override public String toString() { return JsonPrimitive.class.getSimpleName(); } }; public static final JsonElementType<JsonNull> NULL = new JsonElementType<JsonNull>() { @Override public JsonNull newInstance() { return JsonNull.INSTANCE; } @Override public JsonNull cast(JsonElement element) { return element == null ? null : element.getAsJsonNull(); } @Override public boolean isInstance(JsonElement element) { return element != null && element.isJsonNull(); } @Override public String toString() { return JsonNull.class.getSimpleName(); } }; private JsonElementType() { // Not allowed } public abstract T newInstance(); public abstract T cast(JsonElement element); public abstract boolean isInstance(JsonElement element); }