/** * Copyright 2015 Palantir Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.palantir.giraffe.ssh.internal; import java.nio.file.attribute.FileTime; import java.nio.file.attribute.GroupPrincipal; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.UserPrincipal; import java.util.Set; import java.util.concurrent.TimeUnit; import com.palantir.giraffe.file.base.attribute.AnnotatedPosixFileAttributes; import com.palantir.giraffe.file.base.attribute.ChmodFilePermissions; import com.palantir.giraffe.file.base.attribute.GroupIdPrincipal; import com.palantir.giraffe.file.base.attribute.UserIdPrincipal; import net.schmizz.sshj.sftp.FileAttributes; import net.schmizz.sshj.sftp.FileMode.Type; import net.schmizz.sshj.xfer.FilePermission; final class SshPosixFileAttributes implements AnnotatedPosixFileAttributes { private final FileAttributes attrs; private final String inode; SshPosixFileAttributes(FileAttributes attrs, String inode) { this.attrs = attrs; this.inode = inode; } @Override public FileTime lastModifiedTime() { return FileTime.from(attrs.getMtime(), TimeUnit.SECONDS); } @Override public FileTime lastAccessTime() { return FileTime.from(attrs.getAtime(), TimeUnit.SECONDS); } @Override public FileTime creationTime() { return lastModifiedTime(); } @Override public boolean isRegularFile() { return attrs.getMode().getType() == Type.REGULAR; } @Override public boolean isDirectory() { return attrs.getMode().getType() == Type.DIRECTORY; } @Override public boolean isSymbolicLink() { return attrs.getMode().getType() == Type.SYMKLINK; } @Override public boolean isOther() { return !isRegularFile() && !isDirectory() && !isSymbolicLink(); } @Override public long size() { return attrs.getSize(); } @Override public Object fileKey() { return inode; } @Override public UserPrincipal owner() { if (attrs.getUID() == 0) { return new UserIdPrincipal(-1); } else { return new UserIdPrincipal(attrs.getUID()); } } @Override public GroupPrincipal group() { if (attrs.getGID() == 0) { return new GroupIdPrincipal(-1); } else { return new GroupIdPrincipal(attrs.getGID()); } } @Override public Set<PosixFilePermission> permissions() { return ChmodFilePermissions.toPermissions(FilePermission.toMask(attrs.getPermissions())); } }