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

io.searchbox.cloning.CloneUtils Maven / Gradle / Ivy

package io.searchbox.cloning;

import com.google.gson.*;

import java.util.Map;

/**
 * This class is just a workaround for the non-public deepCopy methods in Gson.
 */
public class CloneUtils {
    public static JsonElement deepClone(JsonElement jsonElement) {
        if (jsonElement instanceof JsonObject) {
            return deepCloneObject(jsonElement);
        } else if (jsonElement instanceof JsonArray) {
            return deepCloneArray(jsonElement);
        } else if (jsonElement instanceof JsonPrimitive) {
            return jsonElement;
        }

        return JsonNull.INSTANCE;
    }

    private static JsonElement deepCloneObject(JsonElement jsonElement) {
        JsonObject jsonObject = (JsonObject) jsonElement;
        JsonObject result = new JsonObject();

        for (Map.Entry entry : jsonObject.entrySet()) {
            result.add(entry.getKey(), deepClone(entry.getValue()));
        }

        return result;
    }

    private static JsonElement deepCloneArray(JsonElement jsonElement) {
        JsonArray jsonArray = (JsonArray) jsonElement;
        JsonArray result = new JsonArray();

        for (JsonElement element : jsonArray) {
            result.add(deepClone(element));
        }

        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy