package railo.commons.io.res.util; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import railo.commons.io.IOUtil; import railo.commons.io.res.Resource; import railo.commons.io.res.filter.ResourceFilter; import railo.commons.io.res.filter.ResourceNameFilter; /** * Helper class to build resources */ public abstract class ResourceSupport implements Resource { @Override public void copyFrom(Resource res,boolean append) throws IOException { IOUtil.copy(res, this.getOutputStream(append),true); } @Override public void copyTo(Resource res,boolean append) throws IOException { IOUtil.copy(this, res.getOutputStream(append),true); } @Override public Resource getAbsoluteResource() { return this; } @Override public String getAbsolutePath() { return getPath(); } @Override public OutputStream getOutputStream() throws IOException { return getOutputStream(false); } @Override public Resource getCanonicalResource() throws IOException { return this; } @Override public String getCanonicalPath() throws IOException { return getPath(); } @Override public void moveTo(Resource dest) throws IOException { ResourceUtil.moveTo(this, dest,false); } @Override public String[] list(ResourceFilter filter) { String[] files = list(); if(files==null) return null; List list=new ArrayList(); Resource res; for(int i=0;i<files.length;i++) { res=getRealResource(files[i]); if(filter.accept(res))list.add(files[i]); } return (String[]) list.toArray(new String[list.size()]); } @Override public String[] list(ResourceNameFilter filter) { String[] lst=list(); if(lst==null) return null; List list=new ArrayList(); for(int i=0;i<lst.length;i++) { if(filter.accept(getParentResource(),lst[i]))list.add(lst[i]); } if(list.size()==0) return new String[0]; if(list.size()==lst.length) return lst; return (String[]) list.toArray(new String[list.size()]); } @Override public Resource[] listResources(ResourceNameFilter filter) { String[] files = list(); if(files==null) return null; List list=new ArrayList(); for(int i=0;i<files.length;i++) { if(filter.accept(this,files[i]))list.add(getRealResource(files[i])); } return (Resource[]) list.toArray(new Resource[list.size()]); } @Override public Resource[] listResources(ResourceFilter filter) { String[] files = list(); if(files==null) return null; List list=new ArrayList(); Resource res; for(int i=0;i<files.length;i++) { res=this.getRealResource(files[i]); if(filter.accept(res))list.add(res); } return (Resource[]) list.toArray(new Resource[list.size()]); } @Override public String getReal(String realpath) { return getRealResource(realpath).getPath(); } @Override public String[] list() { Resource[] children = listResources(); if(children==null) return null; String[] rtn=new String[children.length]; for(int i=0;i<children.length;i++) { rtn[i]=children[i].getName(); } return rtn; } @Override public boolean canRead() { return isReadable(); } @Override public boolean canWrite() { return isWriteable(); } @Override public boolean renameTo(Resource dest) { try { moveTo(dest); return true; } catch (IOException e) { return false; } } @Override public boolean createNewFile() { try { createFile(false); return true; } catch (IOException e) {} return false; } @Override public boolean mkdir() { try { createDirectory(false); return true; } catch (IOException e) {} return false; } @Override public boolean mkdirs() { try { createDirectory(true); return true; } catch (IOException e) { return false; } } @Override public boolean delete() { try { remove(false); return true; } catch (IOException e) {} return false; } @Override public boolean isArchive() { return getAttribute(Resource.ATTRIBUTE_ARCHIVE); } @Override public boolean isSystem() { return getAttribute(Resource.ATTRIBUTE_SYSTEM); } @Override public boolean isHidden() { return getAttribute(Resource.ATTRIBUTE_HIDDEN); } @Override public void setArchive(boolean value) throws IOException { setAttribute(ATTRIBUTE_ARCHIVE, value); } @Override public void setHidden(boolean value) throws IOException { setAttribute(ATTRIBUTE_HIDDEN, value); } @Override public boolean setReadOnly() { return setWritable(false); } @Override public void setSystem(boolean value) throws IOException { setAttribute(ATTRIBUTE_SYSTEM, value); } @Override public boolean equals(Object obj) { if(this==obj) return true; if(!(obj instanceof Resource)) return false; Resource other=(Resource) obj; if(getResourceProvider()!=other.getResourceProvider()) return false; if(getResourceProvider().isCaseSensitive()) { if(getPath().equals(other.getPath())) return true; return ResourceUtil.getCanonicalPathEL(this).equals(ResourceUtil.getCanonicalPathEL(other)); } if(getPath().equalsIgnoreCase(other.getPath())) return true; return ResourceUtil.getCanonicalPathEL(this).equalsIgnoreCase(ResourceUtil.getCanonicalPathEL(other)); } @Override public String toString() { return getPath(); } @Override public boolean getAttribute(short attribute) { return false; } @Override public void setAttribute(short attribute, boolean value) throws IOException { throw new IOException("the resource ["+getPath()+"] does not support attributes"); } }