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

com.mokung.pomegranate.jackson.JsonObject Maven / Gradle / Ivy

package com.mokung.pomegranate.jackson;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * json Object 类型
 *
 * @author mokung
 */
public class JsonObject extends AbstractJsonContainer
    implements Map, Cloneable, Serializable {

    public JsonObject() {
        super();
    }

    public JsonObject(ObjectMapper objectMapper) {
        super(objectMapper);
    }

    public JsonObject(ObjectNode hub) {
        super(null, hub);
    }

    public JsonObject(ObjectMapper objectMapper, ObjectNode hub) {
        super(objectMapper, hub);
    }

    /**
     * put value 泛型支持
     * 
     * @param key
     *            key
     * @param value
     *            value
     * @param 
     *            value类型
     * @return 添加成功值
     */
    public  T set(String key, T value) {
        // null
        if (value == null) {
            container.putNull(key);
            return null;
        }

        // 常用类型
        if (value instanceof BigDecimal) {
            container.put(key, (BigDecimal)value);
            return value;
        }
        if (value instanceof BigInteger) {
            container.put(key, (BigInteger)value);
            return value;
        }
        if (value instanceof Boolean) {
            container.put(key, (Boolean)value);
            return value;
        }
        if (value instanceof Byte) {
            container.put(key, (Byte)value);
            return value;
        }
        if (value instanceof Double) {
            container.put(key, (Double)value);
            return value;
        }
        if (value instanceof Float) {
            container.put(key, (Float)value);
            return value;
        }
        if (value instanceof Integer) {
            container.put(key, (Integer)value);
            return value;
        }
        if (value instanceof Long) {
            container.put(key, (Long)value);
            return value;
        }
        if (value instanceof Short) {
            container.put(key, (Short)value);
            return value;
        }
        if (value instanceof String) {
            container.put(key, (String)value);
            return value;
        }

        // 自定义类型
        if (value instanceof AbstractJsonContainer) {
            AbstractJsonContainer abstractJsonContainer = (AbstractJsonContainer)value;
            container.set(key, abstractJsonContainer.getContainer());
            return value;
        }
        // JsonNode 类型
        if (value instanceof JsonNode) {
            container.set(key, (JsonNode)value);
            return value;
        }

        // 默认添加类型
        container.putPOJO(key, value);
        return value;
    }

    @Override
    public Object put(String key, Object value) {
        return set(key, value);
    }

    @Override
    public Object get(Object key) {
        return getInterior((String)key);
    }

    @Override
    public int size() {
        return container.size();
    }

    @Override
    public boolean isEmpty() {
        return container.isEmpty(null);
    }

    @Override
    public boolean containsKey(Object key) {
        return container.has((String)key);
    }

    @Override
    public boolean containsValue(Object value) {
        Set keys = keySet();
        for (String key : keys) {
            Object hubValue = get(key);
            if (Objects.equals(hubValue, value)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public Object remove(Object key) {
        return container.remove((String)key);
    }

    @Override
    public void putAll(Map map) {
        if (map == null || map.size() <= 0) {
            return;
        }
        for (Map.Entry entry : map.entrySet()) {
            put(entry.getKey(), entry.getValue());
        }
    }

    public void putAllMap(Map map) {
        if (map == null || map.size() <= 0) {
            return;
        }
        for (Map.Entry entry : map.entrySet()) {
            put(entry.getKey().toString(), entry.getValue());
        }
    }

    @Override
    public void clear() {
        container.removeAll();
    }

    @Override
    public Set keySet() {
        Iterator fieldNames = container.fieldNames();
        Set keySet = new HashSet<>(container.size());
        while (fieldNames.hasNext()) {
            keySet.add(fieldNames.next());
        }
        return keySet;
    }

    @Override
    public Collection values() {
        List values = new ArrayList<>(container.size());
        for (String key : keySet()) {
            values.add(get(key));
        }
        return values;
    }

    @Override
    public Set> entrySet() {
        Set> entrySet = new HashSet<>(container.size());
        for (String key : keySet()) {
            entrySet.add(new AbstractMap.SimpleEntry<>(key, get(key)));
        }
        return entrySet;
    }

    @Override
    protected ObjectNode createHub(ObjectMapper objectMapper) {
        return objectMapper.createObjectNode();
    }

}