001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.runtime.net.ftp;
020
021import org.apache.commons.net.ftp.FTPFile;
022
023
024/**
025 * 
026 */
027public final class FTPConstant {
028
029
030    /**
031     * Field <code>TRANSFER_MODE_AUTO</code>
032     */
033    public static final short TRANSFER_MODE_AUTO=0;
034    /**
035     * Field <code>TRANSFER_MODE_BINARY</code>
036     */
037    public static final short TRANSFER_MODE_BINARY=1;
038    /**
039     * Field <code>TRANSFER_MODE_ASCCI</code>
040     */
041    public static final short TRANSFER_MODE_ASCCI=2;
042
043    /**
044     * Field <code>PERMISSION_READ</code>
045     */
046    public static final short PERMISSION_READ=4;
047    /**
048     * Field <code>PERMISSION_WRITE</code>
049     */
050    public static final short PERMISSION_WRITE=2;
051    
052    /**
053     * Field <code>PERMISSION_EXECUTE</code>
054     */
055    public static final short PERMISSION_EXECUTE=1;
056
057    /**
058     * Field <code>ACCESS_WORLD</code>
059     */
060    public static final short ACCESS_WORLD=1;
061    /**
062     * Field <code>ACCESS_GROUP</code>
063     */
064    public static final short ACCESS_GROUP=10;
065    /**
066     * Field <code>ACCESS_USER</code>
067     */
068    public static final short ACCESS_USER=100;
069
070    
071    
072    
073    /**
074     * @param type
075     * @return file type as String
076     */
077    public static String getTypeAsString(int type) {
078        if(type==FTPFile.DIRECTORY_TYPE)return "directory";
079        else if(type==FTPFile.SYMBOLIC_LINK_TYPE)return "link";
080        else if(type==FTPFile.UNKNOWN_TYPE)return "unknown";
081        else if(type==FTPFile.FILE_TYPE)return "file";
082        
083        return "unknown";
084    }
085
086    /**
087     * @param file
088     * @return permission as integer
089     */
090    public static Integer getPermissionASInteger(FTPFile file) {
091        int rtn=0;
092        // world
093        if(file.hasPermission(FTPFile.WORLD_ACCESS,FTPFile.READ_PERMISSION))rtn+=ACCESS_WORLD*PERMISSION_READ;
094        if(file.hasPermission(FTPFile.WORLD_ACCESS,FTPFile.WRITE_PERMISSION))rtn+=ACCESS_WORLD*PERMISSION_WRITE;
095        if(file.hasPermission(FTPFile.WORLD_ACCESS,FTPFile.EXECUTE_PERMISSION))rtn+=ACCESS_WORLD*PERMISSION_EXECUTE;
096
097        // group
098        if(file.hasPermission(FTPFile.GROUP_ACCESS,FTPFile.READ_PERMISSION))rtn+=ACCESS_GROUP*PERMISSION_READ;
099        if(file.hasPermission(FTPFile.GROUP_ACCESS,FTPFile.WRITE_PERMISSION))rtn+=ACCESS_GROUP*PERMISSION_WRITE;
100        if(file.hasPermission(FTPFile.GROUP_ACCESS,FTPFile.EXECUTE_PERMISSION))rtn+=ACCESS_GROUP*PERMISSION_EXECUTE;
101
102        // user
103        if(file.hasPermission(FTPFile.USER_ACCESS,FTPFile.READ_PERMISSION))rtn+=ACCESS_USER*PERMISSION_READ;
104        if(file.hasPermission(FTPFile.USER_ACCESS,FTPFile.WRITE_PERMISSION))rtn+=ACCESS_USER*PERMISSION_WRITE;
105        if(file.hasPermission(FTPFile.USER_ACCESS,FTPFile.EXECUTE_PERMISSION))rtn+=ACCESS_USER*PERMISSION_EXECUTE;
106        
107        return Integer.valueOf(rtn);
108    }
109    public static void setPermission(FTPFile file, int mode) {
110
111        // world
112        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION, (1&mode)>0);
113        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION, (2&mode)>0);
114        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION, (4&mode)>0);
115        
116        // group
117        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION, (8&mode)>0);
118        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION, (16&mode)>0);
119        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION, (32&mode)>0);
120        
121        // user
122        file.setPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION, (64&mode)>0);
123        file.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, (128&mode)>0);
124        file.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, (256&mode)>0);
125    }
126    
127    public static void setPermissionOld(FTPFile file, int mode) {
128        int mu=mode/100;
129        mode=mode-mu*100;
130        
131        int mg=mode/10;
132        mode=mode-mg*10;
133        
134        //print.e(mu+"-"+mg+"-"+mode);
135        
136        // world
137        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION, ((PERMISSION_READ)&mode)>0);
138        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION, ((PERMISSION_WRITE)&mode)>0);
139        file.setPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION, ((PERMISSION_EXECUTE)&mode)>0);
140        
141        // group
142        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION, ((PERMISSION_READ)&mg)>0);
143        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION, ((PERMISSION_WRITE)&mg)>0);
144        file.setPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION, ((PERMISSION_EXECUTE)&mg)>0);
145        
146        // user
147        file.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, ((PERMISSION_READ)&mu)>0);
148        file.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, ((PERMISSION_WRITE)&mu)>0);
149        file.setPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION, ((PERMISSION_EXECUTE)&mu)>0);
150    }
151}