/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.fs.physical;
import gw.fs.IDirectory;
import gw.fs.IDirectoryUtil;
import gw.fs.IFile;
import gw.fs.ResourcePath;
import gw.lang.UnstableAPI;
import gw.fs.IResource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@UnstableAPI
public class PhysicalDirectoryImpl extends PhysicalResourceImpl implements IDirectory {
public PhysicalDirectoryImpl(ResourcePath path, IPhysicalFileSystem backingFileSystem) {
super(path, backingFileSystem);
}
@Override
public void clearCaches() {
// No-op at this level
}
@Override
public IDirectory dir(String relativePath) {
ResourcePath absolutePath = _path.join(relativePath);
return new PhysicalDirectoryImpl(absolutePath, _backingFileSystem);
}
@Override
public IFile file(String path) {
ResourcePath absolutePath = _path.join(path);
return new PhysicalFileImpl(absolutePath, _backingFileSystem);
}
@Override
public boolean mkdir() throws IOException {
return _backingFileSystem.mkdir(_path);
}
@Override
public List<? extends IDirectory> listDirs() {
List<IDirectory> dirs = new ArrayList<IDirectory>();
for (IFileMetadata fm : _backingFileSystem.listFiles(_path)) {
if (fm.isDir()) {
dirs.add(new PhysicalDirectoryImpl(_path.join(fm.name()), _backingFileSystem));
}
}
return dirs;
}
@Override
public List<? extends IFile> listFiles() {
List<IFile> files = new ArrayList<IFile>();
for (IFileMetadata fm : _backingFileSystem.listFiles(_path)) {
if (fm.isFile()) {
files.add(new PhysicalFileImpl(_path.join(fm.name()), _backingFileSystem));
}
}
return files;
}
@Override
public String relativePath(IResource resource) {
return IDirectoryUtil.relativePath(this, resource);
}
}