package railo.runtime.net.ftp; import railo.runtime.PageContext; import railo.runtime.dump.DumpData; import railo.runtime.dump.DumpProperties; import railo.runtime.dump.DumpTable; import railo.runtime.dump.Dumpable; import railo.runtime.dump.SimpleDumpData; import railo.runtime.exp.PageException; import railo.runtime.functions.arrays.ArrayMerge; import railo.runtime.type.Array; import railo.runtime.type.util.ListUtil; /** * represent a ftp path */ public final class FTPPath implements Dumpable{ private String path; private String name; //private Array arrPath; /** * @param current * @param realpath * @throws PageException */ public FTPPath(String current, String realpath) throws PageException { realpath=realpath.replace('\\','/'); //if(realpath.startsWith("./")) realpath=realpath.substring(2); //if(realpath.startsWith(".")) realpath=realpath.substring(1); Array realpathArr=ListUtil.listToArrayTrim(realpath,'/'); // realpath is absolute if(realpath.startsWith("/")) { init(realpathArr); return; } if(current==null)current=""; else current=current.replace('\\','/'); Array parentArr=ListUtil.listToArrayTrim(current,'/'); // Single Dot . if(realpathArr.size()>0&&realpathArr.get(1,"").equals(".")) { realpathArr.removeEL(1); } // Double Dot .. while(realpathArr.size()>0&&realpathArr.get(1,"").equals("..")) { realpathArr.removeEL(1); if(parentArr.size()>0) { parentArr.removeEL(parentArr.size()); } else { parentArr.prepend(".."); } } ArrayMerge.append(parentArr,realpathArr); init(parentArr); } private void init(Array arr) throws PageException { if(arr.size()>0) { this.name=(String)arr.get(arr.size(),""); arr.removeEL(arr.size()); this.path='/'+ListUtil.arrayToList(arr,"/")+'/'; } else { this.path="/"; this.name=""; } //this.arrPath=arr; } /** * @return Returns the name. */ public String getName() { return name; } /** * @return Returns the path. */ public String getPath() { return path; } @Override public String toString() { return path+name;//+" - "+"path("+getPath()+");"+"name("+getName()+");"+"parent("+getParentPath()+");"; } @Override public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) { DumpTable table = new DumpTable("string","#ff6600","#ffcc99","#000000"); table.appendRow(1,new SimpleDumpData("FTPPath"),new SimpleDumpData(toString())); return table; } }