diff options
Diffstat (limited to 'sched/src/com/android/sched/vfs/CachedDirectFS.java')
-rw-r--r-- | sched/src/com/android/sched/vfs/CachedDirectFS.java | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sched/src/com/android/sched/vfs/CachedDirectFS.java b/sched/src/com/android/sched/vfs/CachedDirectFS.java index 83512be..ce1f605 100644 --- a/sched/src/com/android/sched/vfs/CachedDirectFS.java +++ b/sched/src/com/android/sched/vfs/CachedDirectFS.java @@ -111,6 +111,11 @@ public class CachedDirectFS extends BaseVFS<CachedParentVDir, CachedParentVFile> public Collection<? extends BaseVElement> list() { return vfs.list(this); } + + @CheckForNull + public CachedParentVDir getParent() { + return parent; + } } static class CachedParentVFile extends ParentVFile { @@ -405,4 +410,29 @@ public class CachedDirectFS extends BaseVFS<CachedParentVDir, CachedParentVFile> private File getNativeFile(@Nonnull VPath path, @Nonnull String name) { return new File(new File(dir.getFile(), path.getPathAsString(File.separatorChar)), name); } + + @Override + @Nonnull + VPath getPathFromDir(@Nonnull CachedParentVDir parent, @Nonnull CachedParentVFile file) { + StringBuffer path = getPathFromDirInternal(parent, (CachedParentVDir) file.getParent()) + .append(file.getName()); + return new VPath(path.toString(), '/'); + } + + @Nonnull + private static StringBuffer getPathFromDirInternal(@Nonnull CachedParentVDir baseDir, + @Nonnull CachedParentVDir currentDir) { + if (baseDir == currentDir) { + return new StringBuffer(); + } + CachedParentVDir currentParent = currentDir.getParent(); + assert currentParent != null; + return getPathFromDirInternal(baseDir, currentParent).append(currentDir.getName()).append('/'); + } + + @Override + @Nonnull + public VPath getPathFromRoot(@Nonnull CachedParentVFile file) { + return getPathFromDir(root, file); + } } |