001 package railo.commons.io.res.type.file; 002 003 import java.io.IOException; 004 import java.util.Map; 005 006 import railo.commons.io.SystemUtil; 007 import railo.commons.io.res.Resource; 008 import railo.commons.io.res.ResourceProvider; 009 import railo.commons.io.res.Resources; 010 import railo.commons.io.res.util.ResourceLockImpl; 011 import railo.commons.io.res.util.ResourceUtil; 012 import railo.commons.lang.SizeOf; 013 import railo.commons.lang.StringUtil; 014 import railo.runtime.op.Caster; 015 import railo.runtime.type.Sizeable; 016 017 public final class FileResourceProvider implements ResourceProvider,Sizeable { 018 019 private String scheme="file"; 020 021 private long lockTimeout=10000; 022 private boolean caseSensitive=SystemUtil.isFSCaseSensitive(); 023 private final ResourceLockImpl lock=new ResourceLockImpl(lockTimeout,caseSensitive); 024 private Map arguments; 025 026 @Override 027 public ResourceProvider init(String scheme, Map arguments) { 028 if(!StringUtil.isEmpty(scheme))this.scheme=scheme; 029 this.arguments=arguments; 030 if(arguments!=null) { 031 // lock-timeout 032 String strTimeout = (String) arguments.get("lock-timeout"); 033 if(strTimeout!=null) { 034 lockTimeout=Caster.toLongValue(arguments.get("lock-timeout"),lockTimeout); 035 } 036 } 037 lock.setLockTimeout(lockTimeout); 038 039 return this; 040 } 041 /** 042 * Constructor of the class 043 */ 044 public FileResourceProvider() {} 045 046 @Override 047 public Resource getResource(String path) { 048 return new FileResource(this,ResourceUtil.removeScheme("file",path)); 049 } 050 051 @Override 052 public String getScheme() { 053 return scheme; 054 } 055 056 @Override 057 public void setResources(Resources resources) { 058 //this.resources=resources; 059 } 060 061 062 @Override 063 public void lock(Resource res) throws IOException { 064 lock.lock(res); 065 } 066 067 @Override 068 public void unlock(Resource res) { 069 lock.unlock(res); 070 } 071 072 @Override 073 public void read(Resource res) throws IOException { 074 lock.read(res); 075 } 076 077 @Override 078 public boolean isAttributesSupported() { 079 return SystemUtil.isWindows(); 080 } 081 082 @Override 083 public boolean isCaseSensitive() { 084 return caseSensitive; 085 } 086 087 @Override 088 public boolean isModeSupported() { 089 return false;//SystemUtil.isUnix(); FUTURE add again 090 } 091 @Override 092 public long sizeOf() { 093 return SizeOf.size(lock); 094 } 095 096 public Map getArguments() { 097 return arguments; 098 } 099 }