
syncloud.filesystem.FSFolder Maven / Gradle / Ivy
The newest version!
package syncloud.filesystem;
import org.apache.commons.io.FileUtils;
import syncloud.core.log.Logger;
import syncloud.storage.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FSFolder extends IFolder {
private NodeKey key;
private File file;
private static Logger logger = Logger.getLogger(FSFolder.class);
public FSFolder(NodeKey key) {
this.key = key;
this.file = new File(key.getNativePath());
}
@Override
public NodeKey getKey() {
return key;
}
@Override
public List getFolders() {
File[] children = this.file.listFiles();
List foldersList = new ArrayList();
for (File child : children)
if (child.isDirectory())
foldersList.add(new FSFolder(key.child(child.getName())));
return foldersList;
}
@Override
public List getContents() {
File[] children = this.file.listFiles();
List foldersList = new ArrayList();
if (children != null) {
for (File child : children)
if (child.isDirectory())
foldersList.add(new FSFolder(key.child(child.getName())));
else
foldersList.add(new FSFile(key.child(child.getName())));
}
return foldersList;
}
@Override
public FSFolder createFolder(String name) {
mkdir(name);
return new FSFolder(key.child(name));
}
private void mkdir(String name) {
File newFolder = new File(file, name);
boolean created = newFolder.mkdir();
if (!created)
throw new StorageException(ErrorCode.UnableToCreateFolder, UNABLE_TO_ADD_FOLDER(name, key.getNativePath()));
}
@Override
public void delete() {
try {
if(!file.exists())
throw new IOException();
FileUtils.deleteDirectory(file);
} catch (IOException e) {
String message = UNABLE_TO_DELETE_FOLDER(key.getNativePath());
logger.error(message);
throw new StorageException(message);
}
}
@Override
public IFile createFile(String name, InputStreamProvider inputStreamProvider, long length) throws StorageException {
FSFile fsFile = new FSFile(key.child(name));
fsFile.createNewFile();
try {
fsFile.save(inputStreamProvider, length);
} catch (StorageException e) {
return null;
}
return fsFile;
}
@Override
public String getName() {
List components = key.getPathKey().getPathComponents();
return components.get(components.size() - 1);
}
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!(obj instanceof FSFolder))
return false;
FSFolder other = (FSFolder) obj;
return file.equals(other.file);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy