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 /** 027 * @see railo.commons.io.res.ResourceProvider#init(java.lang.String, java.util.Map) 028 */ 029 public ResourceProvider init(String scheme, Map arguments) { 030 if(!StringUtil.isEmpty(scheme))this.scheme=scheme; 031 this.arguments=arguments; 032 if(arguments!=null) { 033 // lock-timeout 034 String strTimeout = (String) arguments.get("lock-timeout"); 035 if(strTimeout!=null) { 036 lockTimeout=Caster.toLongValue(arguments.get("lock-timeout"),lockTimeout); 037 } 038 } 039 lock.setLockTimeout(lockTimeout); 040 041 return this; 042 } 043 /** 044 * Constructor of the class 045 */ 046 public FileResourceProvider() {} 047 048 /** 049 * @see res.ResourceProvider#getResource(java.lang.String) 050 */ 051 public Resource getResource(String path) { 052 return new FileResource(this,ResourceUtil.removeScheme("file",path)); 053 } 054 055 /** 056 * @see res.ResourceProvider#getScheme() 057 */ 058 public String getScheme() { 059 return scheme; 060 } 061 062 /** 063 * @see railo.commons.io.res.ResourceProvider#setResources(railo.commons.io.res.Resources) 064 */ 065 public void setResources(Resources resources) { 066 //this.resources=resources; 067 } 068 069 070 /** 071 * @throws IOException 072 * @see railo.commons.io.res.ResourceProvider#lock(railo.commons.io.res.Resource) 073 */ 074 public void lock(Resource res) throws IOException { 075 lock.lock(res); 076 } 077 078 /** 079 * @see railo.commons.io.res.ResourceProvider#unlock(railo.commons.io.res.Resource) 080 */ 081 public void unlock(Resource res) { 082 lock.unlock(res); 083 } 084 085 /** 086 * @throws IOException 087 * @see railo.commons.io.res.ResourceProvider#read(railo.commons.io.res.Resource) 088 */ 089 public void read(Resource res) throws IOException { 090 lock.read(res); 091 } 092 093 /** 094 * @see railo.commons.io.res.ResourceProvider#isAttributesSupported() 095 */ 096 public boolean isAttributesSupported() { 097 return SystemUtil.isWindows(); 098 } 099 100 /** 101 * @see railo.commons.io.res.ResourceProvider#isCaseSensitive() 102 */ 103 public boolean isCaseSensitive() { 104 return caseSensitive; 105 } 106 107 /** 108 * @see railo.commons.io.res.ResourceProvider#isModeSupported() 109 */ 110 public boolean isModeSupported() { 111 return false;//SystemUtil.isUnix(); FUTURE add again 112 } 113 /** 114 * @see railo.runtime.type.Sizeable#sizeOf() 115 */ 116 public long sizeOf() { 117 return SizeOf.size(lock); 118 } 119 120 public Map getArguments() { 121 return arguments; 122 } 123 }