code: package com.beijunyi.parallelgit.utils.io;
  
  import javax.annotation.Nonnull;
  import javax.annotation.Nullable;
  
  import com.beijunyi.parallelgit.utils.exceptions.NoSuchCacheEntryException;
  import org.eclipse.jgit.dircache.DirCacheEntry;
  
  public final class CacheNode {
  
    private final String path;
    private final DirCacheEntry entry;
    private String childrenPrefix;
  
    private CacheNode(String path, @Nullable DirCacheEntry entry) {
      this.path = path;
      this.entry = entry;
    }
  
    @Nonnull
    public static CacheNode file(String pathStr, DirCacheEntry entry) {
      return new CacheNode(pathStr, entry);
    }
  
    @Nonnull
    public static CacheNode directory(String pathStr) {
      return new CacheNode(pathStr, null);
    }
  
    @Nonnull
    public String getPath() {
      return path;
    }
  
    public boolean isFile() {
      return entry != null;
    }
  
    public boolean isDirectory() {
      return entry == null;
    }
  
    @Nonnull
    public DirCacheEntry getEntry() {
      if(entry == null)
        throw new NoSuchCacheEntryException(path);
      return entry;
    }
  
    boolean hasChild(String childPath) {
      return isDirectory() && childPath.startsWith(getChildrenPrefix());
    }
  
    @Nonnull
    private String getChildrenPrefix() {
      if(childrenPrefix == null)
        childrenPrefix = path + "/";
      return childrenPrefix;
    }
  
  }
  