1e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera/* 2e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. 3e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 5e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * This code is free software; you can redistribute it and/or modify it 6e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * under the terms of the GNU General Public License version 2 only, as 7e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * published by the Free Software Foundation. Oracle designates this 8e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * particular file as subject to the "Classpath" exception as provided 9e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * by Oracle in the LICENSE file that accompanied this code. 10e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 11e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * This code is distributed in the hope that it will be useful, but WITHOUT 12e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * version 2 for more details (a copy is included in the LICENSE file that 15e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * accompanied this code). 16e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 17e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * You should have received a copy of the GNU General Public License version 18e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 2 along with this work; if not, write to the Free Software Foundation, 19e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * 21e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * or visit www.oracle.com if you need additional information or have any 23e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera * questions. 24e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera */ 25e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 26e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmerapackage sun.nio.fs; 27e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 28e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraimport java.nio.file.attribute.*; 29e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraimport java.util.*; 30e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 31e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmeraclass UnixFileModeAttribute { 32e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static final int ALL_PERMISSIONS = 33e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | UnixConstants.S_IXUSR | 34e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IRGRP | UnixConstants.S_IWGRP | UnixConstants.S_IXGRP | 35e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IROTH | UnixConstants.S_IWOTH | UnixConstants. S_IXOTH; 36e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 37e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static final int ALL_READWRITE = 38e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | 39e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IRGRP | UnixConstants.S_IWGRP | 40e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IROTH | UnixConstants.S_IWOTH; 41e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 42e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static final int TEMPFILE_PERMISSIONS = 43e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera UnixConstants.S_IRUSR | UnixConstants.S_IWUSR | UnixConstants.S_IXUSR; 44e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 45e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera private UnixFileModeAttribute() { 46e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 47e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 48e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static int toUnixMode(Set<PosixFilePermission> perms) { 49e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera int mode = 0; 50e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera for (PosixFilePermission perm: perms) { 51e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (perm == null) 52e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera throw new NullPointerException(); 53e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera switch (perm) { 54e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OWNER_READ : mode |= UnixConstants.S_IRUSR; break; 55e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OWNER_WRITE : mode |= UnixConstants.S_IWUSR; break; 56e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OWNER_EXECUTE : mode |= UnixConstants.S_IXUSR; break; 57e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case GROUP_READ : mode |= UnixConstants.S_IRGRP; break; 58e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case GROUP_WRITE : mode |= UnixConstants.S_IWGRP; break; 59e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case GROUP_EXECUTE : mode |= UnixConstants.S_IXGRP; break; 60e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OTHERS_READ : mode |= UnixConstants.S_IROTH; break; 61e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OTHERS_WRITE : mode |= UnixConstants.S_IWOTH; break; 62e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera case OTHERS_EXECUTE : mode |= UnixConstants.S_IXOTH; break; 63e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 64e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 65e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return mode; 66e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 67e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera 68e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera @SuppressWarnings("unchecked") 69e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera static int toUnixMode(int defaultMode, FileAttribute<?>... attrs) { 70e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera int mode = defaultMode; 71e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera for (FileAttribute<?> attr: attrs) { 72e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera String name = attr.name(); 73e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera if (!name.equals("posix:permissions") && !name.equals("unix:permissions")) { 74e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera throw new UnsupportedOperationException("'" + attr.name() + 75e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera "' not supported as initial attribute"); 76e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 77e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera mode = toUnixMode((Set<PosixFilePermission>)attr.value()); 78e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 79e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera return mode; 80e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera } 81e6bac4bf9c85c2454ce22c91da6c654552c268e0Shubham Ajmera} 82