Package railo.runtime.op

Source Code of railo.runtime.op.CreationImpl

package railo.runtime.op;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

import railo.commons.date.DateTimeUtil;
import railo.commons.io.IOUtil;
import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.Pair;
import railo.loader.engine.CFMLEngine;
import railo.runtime.CFMLFactoryImpl;
import railo.runtime.Component;
import railo.runtime.PageContext;
import railo.runtime.config.Config;
import railo.runtime.config.RemoteClient;
import railo.runtime.db.DatasourceConnection;
import railo.runtime.db.SQL;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.exp.DatabaseException;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.functions.system.ContractPath;
import railo.runtime.net.http.HttpServletRequestDummy;
import railo.runtime.net.http.HttpServletResponseDummy;
import railo.runtime.spooler.ExecutionPlan;
import railo.runtime.spooler.SpoolerTask;
import railo.runtime.spooler.remote.RemoteClientTask;
import railo.runtime.text.xml.XMLUtil;
import railo.runtime.type.Array;
import railo.runtime.type.ArrayImpl;
import railo.runtime.type.Collection;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Query;
import railo.runtime.type.QueryImpl;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.dt.Date;
import railo.runtime.type.dt.DateImpl;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.dt.DateTimeImpl;
import railo.runtime.type.dt.Time;
import railo.runtime.type.dt.TimeImpl;
import railo.runtime.type.dt.TimeSpan;
import railo.runtime.type.dt.TimeSpanImpl;
import railo.runtime.type.scope.ClusterEntry;
import railo.runtime.type.scope.ClusterEntryImpl;
import railo.runtime.type.util.ListUtil;
import railo.runtime.util.Creation;

/**
* implemention of the ctration object
*/
public final class CreationImpl implements Creation,Serializable {

    private static CreationImpl singelton;

    private CreationImpl(CFMLEngine engine) {
      // !!! do not store engine Object, the engine is not serializable
  }

  /**
     * @return singleton instance
     */
    public static Creation getInstance(CFMLEngine engine) {
        if(singelton==null)singelton=new CreationImpl(engine);
        return singelton;
    }

    @Override
    public Array createArray() {
        return new ArrayImpl();
    }

  @Override
  public Array createArray(String list, String delimiter,boolean removeEmptyItem, boolean trim) {
    if(removeEmptyItem)return ListUtil.listToArrayRemoveEmpty(list, delimiter);
    if(trim)return ListUtil.listToArrayTrim(list, delimiter);
    return ListUtil.listToArray(list, delimiter);
  }
 
    @Override
    public Array createArray(int dimension) throws PageException {
        return new ArrayImpl(dimension);
    }

    @Override
    public Struct createStruct() {
        return new StructImpl();
    }

    @Override
    public Struct createStruct(int type) {
        return new StructImpl(type);
    }

    @Override
    public Query createQuery(String[] columns, int rows, String name) {
        return new QueryImpl(columns,rows,name);
    }

    @Override
    public Query createQuery(Collection.Key[] columns, int rows, String name) throws DatabaseException {
        return new QueryImpl(columns,rows,name);
    }
   
    @Override
    public Query createQuery(DatasourceConnection dc, SQL sql, int maxrow, String name) throws PageException {
    return new QueryImpl(ThreadLocalPageContext.get(),dc,sql,maxrow,-1,-1,name);
  }
   
    public Query createQuery(DatasourceConnection dc, SQL sql, int maxrow, int fetchsize, int timeout, String name) throws PageException {
    return new QueryImpl(ThreadLocalPageContext.get(),dc,sql,maxrow,fetchsize,timeout,name);
  }
   
    @Override
    public DateTime createDateTime(long time) {
        return new DateTimeImpl(time,false);
    }

    @Override
    public TimeSpan createTimeSpan(int day,int hour,int minute,int second) {
        return new TimeSpanImpl(day,hour,minute,second);
    }

    @Override
    public Date createDate(long time) {
        return new DateImpl(time);
    }

    @Override
    public Time createTime(long time) {
        return new TimeImpl(time,false);
    }

    @Override
    public DateTime createDateTime(int year, int month, int day, int hour, int minute, int second, int millis) throws ExpressionException {
        return DateTimeUtil.getInstance().toDateTime(ThreadLocalPageContext.getTimeZone(),year,month,day,hour,minute,second,millis);
    }

    @Override
    public Date createDate(int year, int month, int day) throws ExpressionException {
        return new DateImpl(DateTimeUtil.getInstance().toDateTime(null,year,month,day, 0, 0, 0,0));
    }

    @Override
    public Time createTime(int hour, int minute, int second, int millis) {
        return new TimeImpl(
            DateTimeUtil.getInstance().toTime(null,1899,12,30,hour,minute,second,millis,0),false);
    }

    @Override
    public Document createDocument() throws PageException {
        try {
            return XMLUtil.newDocument();
        } catch (Exception e) {
            throw Caster.toPageException(e);
        }
    }

    @Override
    public Document createDocument(Resource res, boolean isHTML) throws PageException {
        InputStream is=null;
      try {
            return XMLUtil.parse(new InputSource(is=res.getInputStream()),null,isHTML);
        } catch (Exception e) {
            throw Caster.toPageException(e);
        }
        finally {
          IOUtil.closeEL(is);
        }
    }

    @Override
    public Document createDocument(String xml, boolean isHTML) throws PageException {
        try {
            return XMLUtil.parse(XMLUtil.toInputSource(null, xml),null,isHTML);
        } catch (Exception e) {
            throw Caster.toPageException(e);
        }
    }

    @Override
    public Document createDocument(InputStream is, boolean isHTML) throws PageException {
        try {
            return XMLUtil.parse(new InputSource(is),null,isHTML);
        } catch (Exception e) {
            throw Caster.toPageException(e);
        }
    }

  @Override
  public Key createKey(String key) {
    return KeyImpl.init(key);
  }

  public SpoolerTask createRemoteClientTask(ExecutionPlan[] plans,RemoteClient remoteClient,Struct attrColl,String callerId, String type) {
    return new RemoteClientTask(plans,remoteClient,attrColl,callerId, type);
  }

  public ClusterEntry createClusterEntry(Key key,Serializable value, int offset) {
    return new ClusterEntryImpl(key,value,offset);
  }

  public Resource createResource(String path, boolean existing) throws PageException {
    if(existing)return ResourceUtil.toResourceExisting(ThreadLocalPageContext.get(), path);
    return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), path);
  }

  public HttpServletRequest createHttpServletRequest(File contextRoot,String serverName, String scriptName,String queryString,
      Cookie[] cookies, Map<String,Object> headers, Map<String, String> parameters, Map<String,Object> attributes, HttpSession session) {

    // header
    Pair<String,Object>[] _headers=new Pair[headers.size()];
    {
      int index=0;
      Iterator<Entry<String, Object>> it = headers.entrySet().iterator();
      Entry<String, Object> entry;
      while(it.hasNext()){
        entry = it.next();
        _headers[index++]=new Pair<String,Object>(entry.getKey(), entry.getValue());
      }
    }
    // parameters
    Pair<String,Object>[] _parameters=new Pair[headers.size()];
    {
      int index=0;
      Iterator<Entry<String, String>> it = parameters.entrySet().iterator();
      Entry<String, String> entry;
      while(it.hasNext()){
        entry = it.next();
        _parameters[index++]=new Pair<String,Object>(entry.getKey(), entry.getValue());
      }
    }
   
    return new HttpServletRequestDummy(ResourceUtil.toResource(contextRoot), serverName, scriptName, queryString, cookies,
        _headers, _parameters, Caster.toStruct(attributes,null), session);
  }

  public HttpServletResponse createHttpServletResponse(OutputStream io) {
    return new HttpServletResponseDummy(io);
  }

  @Override
  public PageContext createPageContext(HttpServletRequest req, HttpServletResponse rsp, OutputStream out) {
    Config config = ThreadLocalPageContext.getConfig();
    return (PageContext) ((CFMLFactoryImpl)config.getFactory()).getPageContext(config.getFactory().getServlet(), req, rsp, null, false, -1, false);
  }

  @Override
  public Component createComponentFromName(PageContext pc, String fullName) throws PageException {
    return pc.loadComponent(fullName);
  }

  @Override
  public Component createComponentFromPath(PageContext pc, String path) throws PageException
    path=path.trim();
    String pathContracted=ContractPath.call(pc, path);
     
    if(pathContracted.toLowerCase().endsWith(".cfc"))
      pathContracted=pathContracted.substring(0,pathContracted.length()-4);
   
      pathContracted=pathContracted
      .replace(File.pathSeparatorChar, '.')
      .replace('/', '.')
      .replace('\\', '.');
     
      while(pathContracted.toLowerCase().startsWith("."))
      pathContracted=pathContracted.substring(1);
     
    return createComponentFromName(pc, pathContracted);
  }


}
TOP

Related Classes of railo.runtime.op.CreationImpl

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.