Package railo.commons.io.res.type.compress

Source Code of railo.commons.io.res.type.compress.CompressResourceProvider

package railo.commons.io.res.type.compress;

import java.io.IOException;
import java.util.Map;

import railo.commons.io.res.Resource;
import railo.commons.io.res.ResourceProvider;
import railo.commons.io.res.Resources;
import railo.commons.io.res.util.ResourceLockImpl;
import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.SizeOf;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.op.Caster;
import railo.runtime.type.Sizeable;

public abstract class CompressResourceProvider implements ResourceProvider,Sizeable {
 
  private static final long serialVersionUID = 5930090603192203086L;
 
  private Resources resources;
  protected String scheme=null;
  protected boolean caseSensitive=true;
  boolean async=true;
  private long lockTimeout=10000;
  private final ResourceLockImpl lock=new ResourceLockImpl(lockTimeout,caseSensitive);
  private Map arguments;

  @Override
  public ResourceProvider init(String scheme, Map arguments) {
    if(!StringUtil.isEmpty(scheme))this.scheme=scheme;
    if(arguments!=null) {
      this.arguments=arguments;
      // case-sensitive
      String strCaseSensitive=(String) arguments.get("case-sensitive");
      if(strCaseSensitive!=null) {
        caseSensitive=Caster.toBooleanValue(strCaseSensitive,true);
      }
     
      // sync
      String strASync=(String) arguments.get("asynchronus");
      if(strASync==null)strASync=(String) arguments.get("async");
      if(strASync!=null) {
        async=Caster.toBooleanValue(strASync,true);
      }
     
      // lock-timeout
      String strTimeout = (String) arguments.get("lock-timeout");
      if(strTimeout!=null) {
        lockTimeout=Caster.toLongValue(arguments.get("lock-timeout"),lockTimeout);
      }
    }
    lock.setLockTimeout(lockTimeout);
    lock.setCaseSensitive(caseSensitive);
   
    return this;
  }
 
  public ResourceProvider init(String scheme, boolean caseSensitive, boolean async) {
    if(!StringUtil.isEmpty(scheme))this.scheme=scheme;
    this.caseSensitive=caseSensitive;
    this.async=async;
    return this;
  }

  @Override
  public Resource getResource(String path) {
    path=ResourceUtil.removeScheme(scheme,path);
    int index=path.lastIndexOf('!');
    if(index!=-1) {
     
      Resource file = toResource(path.substring(0,index));//resources.getResource(path.substring(0,index));
      return new CompressResource(this,getCompress(file),path.substring(index+1),caseSensitive);
    }
    Resource file = toResource(path);//resources.getResource(path);
    return new CompressResource(this,getCompress(file),"/",caseSensitive);
  }
 
  private Resource toResource(String path) {
    PageContext pc = ThreadLocalPageContext.get();
    if(pc!=null) {
      return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), path,true);
    }
    return resources.getResource(path);
  }

  public abstract Compress getCompress(Resource file);

  @Override
  public String getScheme() {
    return scheme;
  }



  public void setResources(Resources resources) {
    this.resources=resources;
  }

  @Override
  public void lock(Resource res) throws IOException {
    lock.lock(res);
  }

  @Override
  public void unlock(Resource res) {
    lock.unlock(res);
  }

  @Override
  public void read(Resource res) throws IOException {
    lock.read(res);
  }

  @Override
  public Map getArguments() {
    return arguments;
  }
 
  /*public static void main(String[] args) throws IOException {
    Resources rs=ResourcesImpl.getGlobal();
    rs.registerResourceProvider(new ZipResourceProvider().init("zip", null));
    rs.registerResourceProvider(new RamResourceProvider().init("ram", null));
   
   
    Resource ra = rs.getResource("zip:///Users/mic/temp/test/ras111.zip!/dd/");
    print.ln(ra);
    print.ln(ra.getParent());
   
    ra = rs.getResource("ram:///dd/");
    print.ln(ra);
    print.ln(ra.getParent());
   
   
    Resource org = rs.getResource("/Users/mic/temp/test/org.zip");
    Resource trg = rs.getResource("/Users/mic/temp/test/trg.zip");
    Resource ras = rs.getResource("/Users/mic/temp/test/ras.zip");
   
    ResourceUtil.copy(org, ras);
   
   
   
    Resource res1 = rs.getResource("zip:///Users/mic/temp/test/rasx.zip!/dd");
    Resource res2 = rs.getResource("zip:///Users/mic/temp/test/ras.zip!/ddd"+Math.random()+".txt");

    res1.mkdirs();
    res2.createNewFile();
    ResourceUtil.copy(ras, trg);
    print.ln("copy");
   
    //Resource org2 = rs.getResource("/Users/mic/temp/test/org.zip");
    Resource railotmp = rs.getResource("/Users/mic/temp/railotmp/");
    Resource trg2 = rs.getResource("zip:///Users/mic/temp/railotmp.zip!");
    trg2.delete();
    long start=System.currentTimeMillis();
    ResourceUtil.copyRecursive(railotmp, trg2);
   
    print.ln("ende "+(System.currentTimeMillis()-start));
   
    //print(res3);
   
   
  }

  private static void print(Resource r) {
   
    print.ln("****************************************");
    print.ln(r);
    if(r==null) return;
    print.ln("path:"+r.getPath());
    print.ln("name:"+r.getName());
    print.ln("parent:"+r.getParent());
    print.ln("parent-res:"+r.getParentResource());
    print.ln("exists:"+r.exists());
    print.ln("isDirectory:"+r.isDirectory());
    print.ln("isFile:"+r.isFile());
    print.ln("lastModified:"+r.lastModified());
    if(r.isFile()) {
      //print.ln("->"+IOUtil.toString(r.getI nputStream(),null)+"<-");
    }
    if(r.isDirectory()) {
      print.ln(" - children");
      String[] children = r.list();
      Resource[] ch2 = r.listResources();
      for(int i=0;i<children.length;i++) {
        print.ln("   - "+children[i]);
        print.ln("   - "+ch2[i]);
      }
    }
  }*/

 
  @Override
  public long sizeOf() {
    return SizeOf.size(lock);
  }
}
TOP

Related Classes of railo.commons.io.res.type.compress.CompressResourceProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.