package railo.runtime.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import railo.commons.io.res.Resource;
import railo.commons.io.res.filter.ResourceFilter;
import railo.commons.io.res.filter.ResourceNameFilter;
import railo.runtime.PageContext;
import railo.runtime.exp.PageException;
public interface ResourceUtil {
/**
* Field <code>FILE_SEPERATOR</code>
*/
public static final char FILE_SEPERATOR=File.separatorChar;
/**
* Field <code>FILE_ANTI_SEPERATOR</code>
*/
public static final char FILE_ANTI_SEPERATOR=(FILE_SEPERATOR=='/')?'\\':'/';
/**
* Field <code>TYPE_DIR</code>
*/
public static final short TYPE_DIR=0;
/**
* Field <code>TYPE_FILE</code>
*/
public static final short TYPE_FILE=1;
/**
* Field <code>LEVEL_FILE</code>
*/
public static final short LEVEL_FILE=0;
/**
* Field <code>LEVEL_PARENT_FILE</code>
*/
public static final short LEVEL_PARENT_FILE=1;
/**
* Field <code>LEVEL_GRAND_PARENT_FILE</code>
*/
public static final short LEVEL_GRAND_PARENT_FILE=2;
/**
* cast a String (argument destination) to a File Object,
* if destination is not a absolute, file object will be relative to current position (get from PageContext)
* file must exist otherwise throw exception
* @param pc Page Context to et actuell position in filesystem
* @param path relative or absolute path for file object
* @return file object from destination
* @throws ExpressionException
*/
public Resource toResourceExisting(PageContext pc ,String path) throws PageException;
/**
* cast a String (argument destination) to a File Object,
* if destination is not a absolute, file object will be relative to current position (get from PageContext)
* at least parent must exist
* @param pc Page Context to et actuell position in filesystem
* @param destination relative or absolute path for file object
* @return file object from destination
* @throws ExpressionException
*/
public Resource toResourceExistingParent(PageContext pc ,String destination) throws PageException;
/**
* cast a String (argument destination) to a File Object,
* if destination is not a absolute, file object will be relative to current position (get from PageContext)
* existing file is prefered but dont must exist
* @param pc Page Context to et actuell position in filesystem
* @param destination relative or absolute path for file object
* @return file object from destination
*/
public Resource toResourceNotExisting(PageContext pc ,String destination);
/**
* create a file if possible, return file if ok, otherwise return null
* @param res file to touch
* @param level touch also parent and grand parent
* @param type is file or directory
* @return file if exists, otherwise null
*/
public Resource createResource(Resource res, short level, short type);
/**
* sets a attribute to the resource
* @param res
* @param attributes
* @throws IOException
*/
public void setAttribute(Resource res,String attributes) throws IOException;
/**
* return the mime type of a file, does not check the extension of the file, it checks the header
* @param res
* @param defaultValue
* @return mime type of the file
*/
public String getMimeType(Resource res, String defaultValue);
/**
* return the mime type of a byte array
* @param barr
* @param defaultValue
* @return mime type of the file
*/
public String getMimeType(byte[] barr, String defaultValue);
/**
* check if file is a child of given directory
* @param file file to search
* @param dir directory to search
* @return is inside or not
*/
public boolean isChildOf(Resource file, Resource dir);
/**
* return diffrents of one file to a other if first is child of second otherwise return null
* @param file file to search
* @param dir directory to search
*/
public String getPathToChild(Resource file, Resource dir);
/**
* get the Extension of a file resource
* @param res
* @return extension of file
* @deprecated use instead <code>getExtension(Resource res, String defaultValue);</code>
*/
public String getExtension(Resource res);
/**
* get the Extension of a file resource
* @param res
* @return extension of file
*/
public String getExtension(Resource res, String defaultValue);
/**
* get the Extension of a file
* @param strFile
* @return extension of file
* @deprecated use instead <code>getExtension(String strFile, String defaultValue);</code>
*/
public String getExtension(String strFile);
/**
* get the Extension of a file resource
* @param res
* @return extension of file
*/
public String getExtension(String strFile, String defaultValue);
/**
* copy a file or directory recursive (with his content)
* @param file file or directory to delete
* @throws IOException
* @throws FileNotFoundException
*/
public void copyRecursive(Resource src,Resource trg) throws IOException;
/**
* copy a file or directory recursive (with his content)
* @param src
* @param trg
* @param filter
* @throws IOException
* @throws FileNotFoundException
*/
public void copyRecursive(Resource src,Resource trg,ResourceFilter filter) throws IOException;
public void removeChildren(Resource res) throws IOException;
public void removeChildren(Resource res,ResourceNameFilter filter) throws IOException;
public void removeChildren(Resource res,ResourceFilter filter) throws IOException;
public void moveTo(Resource src, Resource dest) throws IOException;
/**
* return if Resource is empty, means is directory and has no children or a empty file,
* if not exist return false.
* @param res
*/
public boolean isEmpty(Resource res);
public boolean isEmptyDirectory(Resource res);
public boolean isEmptyFile(Resource res);
public String translatePath(String path, boolean slashAdBegin, boolean slashAddEnd);
public String[] translatePathName(String path);
public String merge(String parent, String child);
public String removeScheme(String scheme, String path);
/**
* check if directory creation is ok with the rules for the Resource interface, to not change this rules.
* @param resource
* @param createParentWhenNotExists
* @throws IOException
*/
public void checkCreateDirectoryOK(Resource resource, boolean createParentWhenNotExists) throws IOException;
/**
* check if file creating is ok with the rules for the Resource interface, to not change this rules.
* @param resource
* @param createParentWhenNotExists
* @throws IOException
*/
public void checkCreateFileOK(Resource resource, boolean createParentWhenNotExists) throws IOException;
/**
* check if copying a file is ok with the rules for the Resource interface, to not change this rules.
* @param source
* @param target
* @throws IOException
*/
public void checkCopyToOK(Resource source, Resource target) throws IOException;
/**
* check if moveing a file is ok with the rules for the Resource interface, to not change this rules.
* @param source
* @param target
* @throws IOException
*/
public void checkMoveToOK(Resource source, Resource target) throws IOException;
/**
* check if getting a inputstream of the file is ok with the rules for the Resource interface, to not change this rules.
* @param resource
* @throws IOException
*/
public void checkGetInputStreamOK(Resource resource) throws IOException;
/**
* check if getting a outputstream of the file is ok with the rules for the Resource interface, to not change this rules.
* @param resource
* @throws IOException
*/
public void checkGetOutputStreamOK(Resource resource) throws IOException;
/**
* check if removing the file is ok with the rules for the Resource interface, to not change this rules.
* @param resource
* @throws IOException
*/
public void checkRemoveOK(Resource resource) throws IOException;
public String toString(Resource r, String charset) throws IOException;
public String contractPath(PageContext pc, String path);
}