xiejun
2024-11-01 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a
Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/JsonNodeInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
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<String> elements;
   /**
    * tree çš„ å¶å­èŠ‚ç‚¹ï¼Œæ­¤å¤„ä¸ºå¼•ç”¨
    */
   @Getter
   private final JsonNode leafNode;
   public JsonNodeInfo(LinkedList<String> 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();
   }
}