Package railo.runtime.functions.file

Source Code of railo.runtime.functions.file.FileStreamWrapper

package railo.runtime.functions.file;

import java.io.IOException;
import java.util.Date;
import java.util.Iterator;

import railo.commons.io.res.Resource;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.type.Collection;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.dt.DateTimeImpl;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.StructSupport;

public abstract class FileStreamWrapper extends StructSupport implements Struct {

  public static final String STATE_OPEN = "open";
  public static final String STATE_CLOSE = "close";
 
  protected Resource res;
  private String status=STATE_OPEN;
  private Struct info;
  private long lastModifed;
  private long length;
 
 
  public FileStreamWrapper(Resource res) {
    this.res=res;
    this.lastModifed=System.currentTimeMillis();
    this.length=res.length();
  }

  public final String getFilename() {
    return res.getName();
  }

  public final String getLabel(){
    return StringUtil.ucFirst(res.getResourceProvider().getScheme())+": "+getFilename();
  }
 
 
  public final String getFilepath() {
    return res.getAbsolutePath();
  }
 

  public final String getStatus() {
    return status;
  }

  public final void setStatus(String status) {
    this.status=status;
  }
 
  public final Date getLastmodified() {
    return new DateTimeImpl(lastModifed,false);
  }
 
  public Object getMetadata() {
    return info();
  }
 
  public Struct info() {
    if(info==null) {
      info=new StructImpl();
      info.setEL(KeyConstants._mode, getMode());
      info.setEL(KeyConstants._name, res.getName());
      info.setEL(KeyConstants._path, res.getParent());
      info.setEL(KeyConstants._status, getStatus());
      info.setEL(KeyConstants._size, getSize()+" bytes");
      info.setEL(KeyConstants._lastmodified, getLastmodified());
    }
   
    return info;
  }
 
  public boolean isEndOfFile() {
    return false;
  }
 
  public long getSize() {
    return length;
  }
 
 
  public void write(Object obj) throws IOException {
    throw notSupported("write");
  }

  public String readLine() throws IOException {
    throw notSupported("readLine");
  }
 
  public Object read(int len) throws IOException{
    throw notSupported("read");
  }
 
  public abstract String getMode();
  public abstract void close() throws IOException;
 
  private IOException notSupported(String method) {
    return new IOException(method+" can't be called when the file is opened in ["+getMode()+"] mode");
  }

  public Resource getResource() {
    return res;
  }

  @Override
  public String toString() {
    return res.getAbsolutePath();
  }

  @Override
  public void clear() {
    throw new RuntimeException("can't clear struct, struct is readonly");
   
  }
 
  @Override
  public boolean containsKey(Key key) {
    return info().containsKey(key);
  }

  @Override
  public Collection duplicate(boolean deepCopy) {
    throw new RuntimeException("can't duplicate File Object, Object depends on File Stream");
  }
 
 
  @Override
  public Object get(Key key) throws PageException {
    return info().get(key);
  }

  @Override
  public Object get(Key key, Object defaultValue) {
    return info().get(key, defaultValue);
  }

  @Override
  public Key[] keys() {
    return info().keys();
  }

  public Object remove(Key key) throws PageException {
    throw new PageRuntimeException("can't remove key ["+key.getString()+"] from struct, struct is readonly");
  }

  @Override
  public Object removeEL(Key key) {
    throw new PageRuntimeException("can't remove key ["+key.getString()+"] from struct, struct is readonly");
  }

  @Override
  public Object set(Key key, Object value) throws PageException {
    throw new ExpressionException("can't set key ["+key.getString()+"] to struct, struct is readonly");
  }

  @Override
  public Object setEL(Key key, Object value) {
    throw new PageRuntimeException("can't set key ["+key.getString()+"] to struct, struct is readonly");
  }

  @Override
  public int size() {
    return info().size();
  }

  @Override
  public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
    return info().toDumpData(pageContext, maxlevel,dp);
  }

  @Override
  public Iterator<Collection.Key> keyIterator() {
    return info().keyIterator();
  }
   
    @Override
  public Iterator<String> keysAsStringIterator() {
      return info().keysAsStringIterator();
    }
 
  @Override
  public Iterator<Entry<Key, Object>> entryIterator() {
    return info().entryIterator();
  }
 
  @Override
  public Iterator<Object> valueIterator() {
    return info().valueIterator();
  }

  @Override
  public boolean castToBooleanValue() throws PageException {
    return info().castToBooleanValue();
  }
   
    @Override
    public Boolean castToBoolean(Boolean defaultValue) {
        return info().castToBoolean(defaultValue);
    }

  @Override
  public DateTime castToDateTime() throws PageException {
    return info().castToDateTime();
  }
   
    @Override
    public DateTime castToDateTime(DateTime defaultValue) {
        return info().castToDateTime(defaultValue);
    }

  @Override
  public double castToDoubleValue() throws PageException {
    return info().castToDoubleValue();
  }
   
    @Override
    public double castToDoubleValue(double defaultValue) {
        return info().castToDoubleValue(defaultValue);
    }

  @Override
  public String castToString() throws PageException {
    return info().castToString();
  }
  @Override
  public String castToString(String defaultValue) {
    return info().castToString(defaultValue);
  }

  @Override
  public int compareTo(String str) throws PageException {
    return info().compareTo(str);
  }

  @Override
  public int compareTo(boolean b) throws PageException {
    return info().compareTo(b);
  }

  @Override
  public int compareTo(double d) throws PageException {
    return info().compareTo(d);
  }

  @Override
  public int compareTo(DateTime dt) throws PageException {
    return info.compareTo(dt);
  }

  @Override
  public boolean containsValue(Object value) {
    return info().containsValue(value);
  }

  @Override
  public java.util.Collection values() {
    return info().values();
  }

  public abstract void skip(int len) throws PageException;

  public abstract void seek(long pos) throws PageException;
}
TOP

Related Classes of railo.runtime.functions.file.FileStreamWrapper

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.