package railo.commons.io.res.util;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import railo.commons.io.res.Resource;
import railo.commons.io.res.ResourceProvider;
import railo.commons.io.res.filter.ResourceFilter;
import railo.commons.io.res.filter.ResourceNameFilter;
public final class FileWrapper extends File implements Resource {
private final Resource res;
/**
* Constructor of the class
* @param res
*/
private FileWrapper(Resource res) {
super(res.getPath());
this.res=res;
}
@Override
public boolean canRead() {
return res.canRead();
}
@Override
public boolean canWrite() {
return res.canWrite();
}
@Override
public int compareTo(File pathname) {
if(res instanceof File) ((File)res).compareTo(pathname);
return res.getPath().compareTo(pathname.getPath());
}
@Override
public boolean createNewFile() {
return res.createNewFile();
}
@Override
public boolean delete() {
return res.delete();
}
@Override
public void deleteOnExit() {
if(res instanceof File) ((File)res).deleteOnExit();
}
@Override
public boolean equals(Object obj) {
return res.equals(obj);
}
@Override
public boolean exists() {
return res.exists();
}
@Override
public File getAbsoluteFile() {
if(res.isAbsolute()) return this;
return new FileWrapper(res.getAbsoluteResource());
}
@Override
public String getAbsolutePath() {
return res.getAbsolutePath();
}
@Override
public File getCanonicalFile() throws IOException {
return new FileWrapper(res.getCanonicalResource());
}
@Override
public String getCanonicalPath() throws IOException {
return res.getCanonicalPath();
}
@Override
public String getName() {
return res.getName();
}
@Override
public String getParent() {
return res.getParent();
}
@Override
public File getParentFile() {
return new FileWrapper(this.getParentResource());
}
@Override
public String getPath() {
return res.getPath();
}
@Override
public int hashCode() {
return res.hashCode();
}
@Override
public boolean isAbsolute() {
return res.isAbsolute();
}
@Override
public boolean isDirectory() {
return res.isDirectory();
}
@Override
public boolean isFile() {
return res.isFile();
}
@Override
public boolean isHidden() {
return res.isHidden();
}
@Override
public long lastModified() {
return res.lastModified();
}
@Override
public long length() {
return res.length();
}
@Override
public String[] list() {
return res.list();
}
@Override
public String[] list(FilenameFilter filter) {
if(res instanceof File) ((File)res).list(filter);
return list((ResourceNameFilter)new FileNameFilterWrapper(filter));
}
@Override
public File[] listFiles() {
//if(res instanceof File) return ((File)res).listFiles();
return toFiles(listResources());
}
private File[] toFiles(Resource[] resources) {
File[] files = new File[resources.length];
for(int i=0;i<resources.length;i++) {
files[i]=new FileWrapper(resources[i]);
}
return files;
}
@Override
public File[] listFiles(FileFilter filter) {
//if(res instanceof File) return ((File)res).listFiles(filter);
return toFiles(listResources(new FileFilterWrapper(filter)));
}
@Override
public File[] listFiles(FilenameFilter filter) {
//if(res instanceof File) return ((File)res).listFiles(filter);
return toFiles(listResources(new FileNameFilterWrapper(filter)));
}
@Override
public boolean mkdir() {
return res.mkdir();
}
@Override
public boolean mkdirs() {
return res.mkdirs();
}
@Override
public boolean renameTo(File dest) {
try {
if(res instanceof File) return ((File)res).renameTo(dest);
if(dest instanceof Resource) return res.renameTo((Resource)dest);
ResourceUtil.moveTo(this, ResourceUtil.toResource(dest),true);
return true;
}
catch(IOException ioe) {
return false;
}
}
@Override
public boolean setLastModified(long time) {
return res.setLastModified(time);
}
@Override
public boolean setReadOnly() {
return res.setReadOnly();
}
@Override
public String toString() {
return res.toString();
}
@Override
public URI toURI() {
if(res instanceof File) return ((File)res).toURI();
return null;
}
@Override
public URL toURL() throws MalformedURLException {
if(res instanceof File) return ((File)res).toURL();
return null;
}
@Override
public void createDirectory(boolean createParentWhenNotExists) throws IOException {
res.createDirectory(createParentWhenNotExists);
}
@Override
public void createFile(boolean createParentWhenNotExists) throws IOException {
res.createFile(createParentWhenNotExists);
}
@Override
public Resource getAbsoluteResource() {
return res.getAbsoluteResource();
}
@Override
public Resource getCanonicalResource() throws IOException {
return res.getCanonicalResource();
}
@Override
public InputStream getInputStream() throws IOException {
return res.getInputStream();
}
@Override
public int getMode() {
return res.getMode();
}
@Override
public OutputStream getOutputStream() throws IOException {
return res.getOutputStream();
}
@Override
public OutputStream getOutputStream(boolean append) throws IOException {
return res.getOutputStream(append);
}
@Override
public Resource getParentResource() {
return res.getParentResource();
}
@Override
public String getReal(String realpath) {
return res.getReal(realpath);
}
@Override
public Resource getRealResource(String realpath) {
return res.getRealResource(realpath);
}
@Override
public ResourceProvider getResourceProvider() {
return res.getResourceProvider();
}
@Override
public boolean isArchive() {
return res.isArchive();
}
@Override
public boolean isReadable() {
return res.isReadable();
}
@Override
public boolean isSystem() {
return res.isSystem();
}
@Override
public boolean isWriteable() {
return res.isWriteable();
}
@Override
public String[] list(ResourceNameFilter filter) {
return res.list(filter);
}
@Override
public String[] list(ResourceFilter filter) {
return res.list(filter);
}
@Override
public Resource[] listResources() {
return res.listResources();
}
@Override
public Resource[] listResources(ResourceFilter filter) {
return res.listResources(filter);
}
@Override
public Resource[] listResources(ResourceNameFilter filter) {
return res.listResources(filter);
}
@Override
public void moveTo(Resource dest) throws IOException {
res.moveTo(dest);
}
@Override
public void remove(boolean force) throws IOException {
res.remove(force);
}
@Override
public boolean renameTo(Resource dest) {
return res.renameTo(dest);
}
@Override
public void setMode(int mode) throws IOException {
res.setMode(mode);
}
/**
* @param res
* @return
*/
public static File toFile(Resource res) {
if(res instanceof File) return (File)res;
return new FileWrapper(res);
}
@Override
public void setArchive(boolean value) throws IOException {
res.setArchive(value);
}
@Override
public void setHidden(boolean value) throws IOException {
res.setHidden(value);
}
@Override
public void setSystem(boolean value) throws IOException {
res.setSystem(value);
}
@Override
public boolean getAttribute(short attribute) {
return res.getAttribute(attribute);
}
@Override
public void setAttribute(short attribute, boolean value) throws IOException {
res.setAttribute(attribute, value);
}
@Override
public boolean setReadable(boolean value) {
return res.setReadable(value);
}
@Override
public boolean setWritable(boolean value) {
return res.setWritable(value);
}
public void copyFrom(Resource res, boolean append) throws IOException {
res.copyFrom(res, append);
}
public void copyTo(Resource res, boolean append) throws IOException {
res.copyTo(res, append);
}
}