package com.sromku.simple.storage;
import android.graphics.Bitmap;
import com.sromku.simple.storage.SimpleStorage.StorageType;
import com.sromku.simple.storage.helpers.OrderType;
import com.sromku.simple.storage.helpers.SizeUnit;
import java.io.File;
import java.util.List;
/**
* Interface of CRUD methods on the file system
*
* @author Roman Kushnarenko - sromku (sromku@gmail.com)
*/
public interface Storage {
/**
* Get the type of the storage
*
* @return {@link StorageType}
*/
StorageType getStorageType();
/**
* Create directory with given path. <br>
* If the directory with given name <b>exists</b>, then
* {@link StorageException} will be thrown. <br>
* <br>
*
* <b>For External Storage:</b> The name should be as following format:
* Directory_Name_0/Directory_Name_1/Directory_Name_2<br>
* <br>
* <b>For Internal Storage:</b> No separators are acceptable
*
* @param name
* The name of the directory.
* @return <code>True</code> if directory was created, otherwise return
* <code>False</code>
* @throws StorageException
*/
boolean createDirectory(String name);
/**
* Create directory with given path. <br>
* If the directory with given name exists and the <code>override</code>
* parameter is <code>True</code> then it will be removed and a new
* directory will be created instead. <br>
* <br>
*
* <b>Note:</b> if <code>override=false</code>, then it do nothing and
* return true.
*
* @param name
* The name of the directory.
* @param override
* Set <code>True</code> if you want to override the directory if
* such exists. The default is <code>False</code>.<br>
* Set <code>False</code> then it checks if directory already
* exist, if yes then do nothing and return true, otherwise it
* creates a new directory
* @return <code>True</code> if directory was created, otherwise return
* <code>False</code>.
*
* @throws StorageException
*/
boolean createDirectory(String name, boolean override);
/**
* Delete the directory and all sub content.
*
* @param name
* The name of the directory.
* @return <code>True</code> if the directory was deleted, otherwise return
* <code>False</code>
*/
boolean deleteDirectory(String name);
/**
* Check if the directory is already exist.
*
* @param name
* The name of the directory.
* @return <code>True</code> if exists, otherwise return <code>False</code>
*/
boolean isDirectoryExists(String name);
/**
* Creating file with given name and with content in string format. <br>
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param content
* The content which will filled the file
*/
boolean createFile(String directoryName, String fileName, String content);
/**
* Creating file with given name and by using Storable format. <br>
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param content
* The content which will filled the file
*/
boolean createFile(String directoryName, String fileName, Storable storable);
/**
* Creating file with given name and by using Bitmap format. <br>
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param content
* The content which will filled the file
*/
boolean createFile(String directoryName, String fileName, Bitmap bitmap);
/**
* Creating the file with given name and with content in byte array format.<br>
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param content
* The content which will filled the file
*/
boolean createFile(String directoryName, String fileName, byte[] content);
/**
* Delete file
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @return
*/
boolean deleteFile(String directoryName, String fileName);
/**
* Is file exists
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @return
*/
boolean isFileExist(String directoryName, String fileName);
/**
* Read file from storage
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @return
*/
byte[] readFile(String directoryName, String fileName);
/**
* Read string from external storage
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @return
*/
String readTextFile(String directoryName, String fileName);
/**
* Append content to the existing file
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param content
*/
void appendFile(String directoryName, String fileName, String content);
/**
* Append content to the existing file
*
* @param directoryName
* The directory name
* @param fileName
* The file name
* @param bytes
*/
void appendFile(String directoryName, String fileName, byte[] bytes);
/**
* Get list of all nested files only (without directories) under the
* directories.
*/
List<File> getNestedFiles(String directoryName);
/**
* Get all files and directories under the directory that match the regex pattern on their full names.<br><br>
* For example, we want to get only image files. And this our directory status:
* <pre>
* my_dir
* |- image1.jpg
* |- image2.png
* |- not_image1.txt
* |- not_image2.psd
* |- dir1
* |- image3.gif
* </pre>
* The code:
* <pre>
* String IMAGE_PATTERN = "([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)";
* List{@code <}File> files = storage.getFiles("my_dir", IMAGE_PATTERN);
* </pre>
* The result:
* <pre>
* my_dir
* |- image1.jpg
* |- image2.png
* |- image3.gif
* </pre>
*
* @param directoryName
* @param matchRegex Set regular expression to match files you need.
* Or set <code>null</code> to get all files.
*/
List<File> getFiles(String directoryName, String matchRegex);
/**
* Get files from directory ordered.
* @param directoryName
* @param orderType
* @return
*/
List<File> getFiles(String directoryName, OrderType orderType);
/**
* Get {@link File} object by name of directory or file
*
* @param name
* @return
*/
File getFile(String name);
/**
* Get {@link File}
*
* @param directoryName
* @param fileName
* @return
*/
File getFile(String directoryName, String fileName);
/**
* Rename file. Get the file you want to change.
*
* @param file
* The file you want to change. You can get the {@link File} by
* calling to one of the {@link #getFile(String)} methods
* @param newName
*/
void rename(File file, String newName);
/**
* Get size of the file in units you need.
*
* @param file
* @param unit
* @return
*/
double getSize(File file, SizeUnit unit);
/**
* Get free space on disk.
*
* @param sizeUnit
* The units you want the returned value to be.
* @return The free space in units you selected.
*/
long getFreeSpace(SizeUnit sizeUnit);
/**
* Get already used space on disk.
*
* @param sizeUnit
* The units you want the returned value to be.
* @return The used space in units you selected.
*/
long getUsedSpace(SizeUnit sizeUnit);
/**
* Copy file (only) to another destination.
*
* @param file
* The file you want to copy
* @param directoryName
* The destination directory
* @param fileName
* The destination file name
* @throws StorageException
*/
void copy(File file, String directoryName, String fileName);
/**
* Move file to another destination.
*
* @param file
* The file you want to move
* @param directoryName
* The destination directory
* @param fileName
* The destination file name
* @throws StorageException
*/
void move(File file, String directoryName, String fileName);
}