package org.springblade.core.mongo.utils; import com.fasterxml.jackson.databind.JsonNode; import lombok.Getter; import org.springframework.util.Assert; import java.util.LinkedList; import java.util.StringJoiner; /** * json tree 节点信息 * * @author L.cm */ public class JsonNodeInfo { /** * mongo keys: class1.class2.item */ private volatile String nodeKeys; /** * jsonPath语法:/class1/class2/item */ private volatile String nodePath; /** * 节点关系 */ @Getter private final LinkedList elements; /** * tree 的 叶子节点,此处为引用 */ @Getter private final JsonNode leafNode; public JsonNodeInfo(LinkedList elements, JsonNode leafNode) { Assert.notNull(elements, "elements can not be null."); this.nodeKeys = null; this.nodePath = null; this.elements = elements; this.leafNode = leafNode; } /** * 获取 mongo db的 key 语法 * @return mongo db的 key 语法 */ public String getNodeKeys() { if (nodeKeys == null) { synchronized (this) { if (nodeKeys == null) { StringJoiner nodeKeysJoiner = new StringJoiner("."); elements.forEach(nodeKeysJoiner::add); nodeKeys = nodeKeysJoiner.toString(); } } } return nodeKeys; } /** * 获取 json path 语法路径 * @return jsonPath 路径 */ public String getNodePath() { if (nodePath == null) { synchronized (this) { if (nodePath == null) { StringJoiner nodePathJoiner = new StringJoiner("/", "/", ""); elements.forEach(nodePathJoiner::add); nodePath = nodePathJoiner.toString(); } } } return nodePath; } /** * 获取第一个元素 * @return element */ public String getFirst() { return elements.getFirst(); } }