001: package ch.ethz.ssh2;
002:
003: /**
004: * A <code>SFTPv3FileAttributes</code> object represents detail information
005: * about a file on the server. Not all fields may/must be present.
006: *
007: * @author Christian Plattner, plattner@inf.ethz.ch
008: * @version $Id: SFTPv3FileAttributes.java,v 1.3 2006/09/04 07:41:46 cplattne Exp $
009: */
010:
011: public class SFTPv3FileAttributes {
012: /**
013: * The SIZE attribute. <code>NULL</code> if not present.
014: */
015: public Long size = null;
016:
017: /**
018: * The UID attribute. <code>NULL</code> if not present.
019: */
020: public Integer uid = null;
021:
022: /**
023: * The GID attribute. <code>NULL</code> if not present.
024: */
025: public Integer gid = null;
026:
027: /**
028: * The POSIX permissions. <code>NULL</code> if not present.
029: * <p>
030: * Here is a list:
031: * <p>
032: * <pre>Note: these numbers are all OCTAL.
033: *
034: * S_IFMT 0170000 bitmask for the file type bitfields
035: * S_IFSOCK 0140000 socket
036: * S_IFLNK 0120000 symbolic link
037: * S_IFREG 0100000 regular file
038: * S_IFBLK 0060000 block device
039: * S_IFDIR 0040000 directory
040: * S_IFCHR 0020000 character device
041: * S_IFIFO 0010000 fifo
042: * S_ISUID 0004000 set UID bit
043: * S_ISGID 0002000 set GID bit
044: * S_ISVTX 0001000 sticky bit
045: *
046: * S_IRWXU 00700 mask for file owner permissions
047: * S_IRUSR 00400 owner has read permission
048: * S_IWUSR 00200 owner has write permission
049: * S_IXUSR 00100 owner has execute permission
050: * S_IRWXG 00070 mask for group permissions
051: * S_IRGRP 00040 group has read permission
052: * S_IWGRP 00020 group has write permission
053: * S_IXGRP 00010 group has execute permission
054: * S_IRWXO 00007 mask for permissions for others (not in group)
055: * S_IROTH 00004 others have read permission
056: * S_IWOTH 00002 others have write permisson
057: * S_IXOTH 00001 others have execute permission
058: * </pre>
059: */
060: public Integer permissions = null;
061:
062: /**
063: * The ATIME attribute. Represented as seconds from Jan 1, 1970 in UTC.
064: * <code>NULL</code> if not present.
065: */
066: public Integer atime = null;
067:
068: /**
069: * The MTIME attribute. Represented as seconds from Jan 1, 1970 in UTC.
070: * <code>NULL</code> if not present.
071: */
072: public Integer mtime = null;
073:
074: /**
075: * Checks if this entry is a directory.
076: *
077: * @return Returns true if permissions are available and they indicate
078: * that this entry represents a directory.
079: */
080: public boolean isDirectory() {
081: if (permissions == null)
082: return false;
083:
084: return ((permissions.intValue() & 0040000) != 0);
085: }
086:
087: /**
088: * Checks if this entry is a regular file.
089: *
090: * @return Returns true if permissions are available and they indicate
091: * that this entry represents a regular file.
092: */
093: public boolean isRegularFile() {
094: if (permissions == null)
095: return false;
096:
097: return ((permissions.intValue() & 0100000) != 0);
098: }
099:
100: /**
101: * Checks if this entry is a a symlink.
102: *
103: * @return Returns true if permissions are available and they indicate
104: * that this entry represents a symlink.
105: */
106: public boolean isSymlink() {
107: if (permissions == null)
108: return false;
109:
110: return ((permissions.intValue() & 0120000) != 0);
111: }
112:
113: /**
114: * Turn the POSIX permissions into a 7 digit octal representation.
115: * Note: the returned value is first masked with <code>0177777</code>.
116: *
117: * @return <code>NULL</code> if permissions are not available.
118: */
119: public String getOctalPermissions() {
120: if (permissions == null)
121: return null;
122:
123: String res = Integer.toString(permissions.intValue() & 0177777,
124: 8);
125:
126: StringBuffer sb = new StringBuffer();
127:
128: int leadingZeros = 7 - res.length();
129:
130: while (leadingZeros > 0) {
131: sb.append('0');
132: leadingZeros--;
133: }
134:
135: sb.append(res);
136:
137: return sb.toString();
138: }
139: }
|