All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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