Package railo.runtime.functions.system

Source Code of railo.runtime.functions.system.ExpandPath

/**
* Implements the CFML Function expandpath
*/
package railo.runtime.functions.system;

import java.io.IOException;

import railo.commons.io.SystemUtil;
import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.PageContextImpl;
import railo.runtime.PageSource;
import railo.runtime.config.ConfigWeb;
import railo.runtime.config.ConfigWebImpl;
import railo.runtime.config.ConfigWebUtil;
import railo.runtime.exp.PageException;
import railo.runtime.ext.function.Function;
import railo.runtime.type.util.ArrayUtil;

public final class ExpandPath implements Function {

  private static final long serialVersionUID = 6192659914120397912L;

  public static String call(PageContext pc , String realPath) throws PageException {
    ConfigWeb config=pc.getConfig();
    realPath=realPath.replace('\\','/');

        String contextPath = pc.getHttpServletRequest().getContextPath();
        if ( !StringUtil.isEmpty( contextPath ) && realPath.startsWith( contextPath ) ) {
            boolean sws=StringUtil.startsWith(realPath, '/');
          realPath = realPath.substring( contextPath.length() );
            if(sws && !StringUtil.startsWith(realPath, '/'))
              realPath="/"+realPath;
        }

        Resource res;
       
        if(StringUtil.startsWith(realPath,'/')) {
          PageContextImpl pci=(PageContextImpl) pc;
          ConfigWebImpl cwi=(ConfigWebImpl) config;
          PageSource[] sources = cwi.getPageSources(pci, pc.getApplicationContext().getMappings(), realPath,
              false, pci.useSpecialMappings(), true);
         
          if(!ArrayUtil.isEmpty(sources)) {
            // first check for existing
            for(int i=0;i<sources.length;i++){
              if(sources[i].exists()) {
                return toReturnValue(realPath,sources[i].getResource());
              }
            }
           
            // no expand needed
            if(!SystemUtil.isWindows() && !sources[0].exists()) {
              res=pc.getConfig().getResource(realPath);
                  if(res.exists()) {
                    return toReturnValue(realPath,res);
                  }
            }
            for(int i=0;i<sources.length;i++){
              res=sources[i].getResource();
              if(res!=null) {
                return toReturnValue(realPath,res);
              }
            }
          }

          // no expand needed
          else if(!SystemUtil.isWindows()) {
            res=pc.getConfig().getResource(realPath);
                if(res.exists()) {
                  return toReturnValue(realPath,res);
                }
          }
         
         
          //Resource[] reses = cwi.getPhysicalResources(pc,pc.getApplicationContext().getMappings(),realPath,false,pci.useSpecialMappings(),true);
         
        }
        realPath=ConfigWebUtil.replacePlaceholder(realPath, config);
        res=pc.getConfig().getResource(realPath);
        if(res.isAbsolute()) return toReturnValue(realPath,res);
       
        res=ResourceUtil.getResource(pc,pc.getBasePageSource());
        if(!res.isDirectory())res=res.getParentResource();
        res = res.getRealResource(realPath);
        return toReturnValue(realPath,res);
       
  }

    private static String toReturnValue(String realPath,Resource res) {
        String path;
        char pathChar='/';
        try {
            path=res.getCanonicalPath();
            pathChar=ResourceUtil.FILE_SEPERATOR;
        } catch (IOException e) {
            path= res.getAbsolutePath();
        }
        boolean pathEndsWithSep=StringUtil.endsWith(path,pathChar);
        boolean realEndsWithSep=StringUtil.endsWith(realPath,'/');
       
        if(realEndsWithSep) {
            if(!pathEndsWithSep)path=path+pathChar;
        }
        else if(pathEndsWithSep) {
            path=path.substring(0,path.length()-1);
        }
       
        return path;
    }
}
TOP

Related Classes of railo.runtime.functions.system.ExpandPath

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.