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; } }