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    }