001    package railo.runtime.functions.file;
002    
003    import railo.commons.io.res.Resource;
004    import railo.runtime.PageContext;
005    import railo.runtime.exp.PageException;
006    import railo.runtime.op.Caster;
007    import railo.runtime.type.Struct;
008    import railo.runtime.type.StructImpl;
009    import railo.runtime.type.dt.DateTimeImpl;
010    
011    public class GetFileInfo {
012    
013            public static Struct call(PageContext pc, Object oSrc) throws PageException {
014                    Resource src = Caster.toResource(oSrc,true);
015                    pc.getConfig().getSecurityManager().checkFileLocation(src);
016                    
017                    Struct sct=new StructImpl();
018    
019                    sct.set("canRead", Caster.toBoolean(src.isReadable()));
020                    sct.set("canWrite", Caster.toBoolean(src.isWriteable()));
021                    sct.set("isHidden", Caster.toBoolean(src.getAttribute(Resource.ATTRIBUTE_HIDDEN)));
022                    sct.set("lastmodified",new DateTimeImpl(pc,src.lastModified(),false) );
023                    sct.set("name",src.getName() );
024                    sct.set("parent",src.getParent() );
025                    sct.set("path",src.getAbsolutePath() );
026                    sct.set("size", Caster.toDouble(src.length()));
027                    if(src.isDirectory())sct.set("type", "directory");
028                    else if(src.isFile())sct.set("type", "file");
029                    else sct.set("type", "");
030                    
031                    // supported only by railo
032                    sct.set("isArchive", Caster.toBoolean(src.getAttribute(Resource.ATTRIBUTE_ARCHIVE)));
033                    sct.set("isSystem", Caster.toBoolean(src.getAttribute(Resource.ATTRIBUTE_SYSTEM)));
034                    sct.set("scheme", src.getResourceProvider().getScheme());
035                    sct.set("isCaseSensitive", Caster.toBoolean(src.getResourceProvider().isCaseSensitive()));
036                    sct.set("isAttributesSupported", Caster.toBoolean(src.getResourceProvider().isAttributesSupported()));
037                    sct.set("isModeSupported", Caster.toBoolean(src.getResourceProvider().isModeSupported()));
038                    
039                    return sct;
040            }
041    }