in src/main/java/org/apache/commons/net/ftp/parser/VMSFTPEntryParser.java [123:197]
public FTPFile parseFTPEntry(final String entry) {
// one block in VMS equals 512 bytes
final long longBlock = 512;
if (matches(entry)) {
final FTPFile f = new FTPFile();
f.setRawListing(entry);
String name = group(1);
final String size = group(2);
final String datestr = group(3) + " " + group(4);
final String owner = group(5);
final String[] permissions = new String[3];
permissions[0] = group(9);
permissions[1] = group(10);
permissions[2] = group(11);
try {
f.setTimestamp(super.parseTimestamp(datestr));
} catch (final ParseException e) {
// intentionally do nothing
}
final String grp;
final String user;
final StringTokenizer t = new StringTokenizer(owner, ",");
switch (t.countTokens()) {
case 1:
grp = null;
user = t.nextToken();
break;
case 2:
grp = t.nextToken();
user = t.nextToken();
break;
default:
grp = null;
user = null;
}
if (name.lastIndexOf(".DIR") != -1) {
f.setType(FTPFile.DIRECTORY_TYPE);
} else {
f.setType(FTPFile.FILE_TYPE);
}
// set FTPFile name
// Check also for versions to be returned or not
if (!isVersioning()) {
name = name.substring(0, name.lastIndexOf(';'));
}
f.setName(name);
// size is retreived in blocks and needs to be put in bytes
// for us humans and added to the FTPFile array
final long sizeInBytes = Long.parseLong(size) * longBlock;
f.setSize(sizeInBytes);
f.setGroup(grp);
f.setUser(user);
// set group and owner
// Set file permission.
// VMS has (SYSTEM,OWNER,GROUP,WORLD) users that can contain
// R (read) W (write) E (execute) D (delete)
// iterate for OWNER GROUP WORLD permissions
for (int access = 0; access < 3; access++) {
final String permission = permissions[access];
f.setPermission(access, FTPFile.READ_PERMISSION, permission.indexOf('R') >= 0);
f.setPermission(access, FTPFile.WRITE_PERMISSION, permission.indexOf('W') >= 0);
f.setPermission(access, FTPFile.EXECUTE_PERMISSION, permission.indexOf('E') >= 0);
}
return f;
}
return null;
}