001package org.unix4j.unix.ls; 002 003import java.io.File; 004import java.io.IOException; 005import java.nio.file.Files; 006import java.nio.file.attribute.PosixFileAttributeView; 007import java.nio.file.attribute.PosixFilePermission; 008import java.util.Set; 009 010import org.unix4j.util.StringUtil; 011 012/** 013 * Long format for java 7. 014 */ 015/* NOTE: must be public for reflection */ 016public class LsFormatterLong7 extends LsFormatterLong { 017 018 public LsFormatterLong7() { 019 //force loading the java7 Files class here to provoke an error if it is a jdk < 7 020 if (Files.class.getName().length() == 0) { 021 throw new NoClassDefFoundError("internal error: " + getClass().getName()); 022 } 023 } 024 025 @Override 026 protected String getOwner(File file, LsArguments args) { 027 try { 028 final String owner = Files.getOwner(file.toPath()).getName(); 029 return StringUtil.fixSizeString(7, true, owner); 030 } catch (IOException e) { 031 return super.getOwner(file, args); 032 } 033 } 034 035 @Override 036 protected String getGroup(File file, LsArguments args) { 037 try { 038 final PosixFileAttributeView view = Files.getFileAttributeView(file.toPath(), PosixFileAttributeView.class); 039 final String group = view.readAttributes().group().getName(); 040 return StringUtil.fixSizeString(7, true, group); 041 } catch (Exception e) { 042 return super.getGroup(file, args); 043 } 044 } 045 046 @Override 047 protected String getFilePermissions(File file, LsArguments args) { 048 try { 049 final Set<PosixFilePermission> perms = Files.getPosixFilePermissions(file.toPath()); 050 return (file.isDirectory() ? "d" : "-") + 051 (perms.contains(PosixFilePermission.OWNER_READ) ? 'r' : '-') + 052 (perms.contains(PosixFilePermission.OWNER_WRITE) ? 'w' : '-') + 053 (perms.contains(PosixFilePermission.OWNER_EXECUTE) ? 'x' : '-') + 054 (perms.contains(PosixFilePermission.GROUP_READ) ? 'r' : '-') + 055 (perms.contains(PosixFilePermission.GROUP_WRITE) ? 'w' : '-') + 056 (perms.contains(PosixFilePermission.GROUP_EXECUTE) ? 'x' : '-') + 057 (perms.contains(PosixFilePermission.OTHERS_READ) ? 'r' : '-') + 058 (perms.contains(PosixFilePermission.OTHERS_WRITE) ? 'w' : '-') + 059 (perms.contains(PosixFilePermission.OTHERS_EXECUTE) ? 'x' : '-'); 060 } catch (Exception e) { 061 return super.getFilePermissions(file, args); 062 } 063 } 064 065 @Override 066 protected long getLastModifiedMS(File file, LsArguments args) { 067 try { 068 return Files.getLastModifiedTime(file.toPath()).toMillis(); 069 } catch (Exception e) { 070 return super.getLastModifiedMS(file, args); 071 } 072 } 073 074 @Override 075 protected String getSize(File file, LsArguments args) { 076 final long size; 077 try { 078 size = Files.size(file.toPath()); 079 } catch (Exception e) { 080 return super.getSize(file, args); 081 } 082 final String sizeString = LsCommand.getSizeString(args, size); 083 return StringUtil.fixSizeString(maxSizeStringLength.get(), false, sizeString); 084 } 085}