Path: blob/master/src/java.desktop/macosx/native/libosx/CFileManager.m
41149 views
/*1* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#import "com_apple_eio_FileManager.h"2627#import "JNIUtilities.h"28#import "ThreadUtilities.h"2930#import <Cocoa/Cocoa.h>3132/*33* Class: com_apple_eio_FileManager34* Method: _setFileTypeAndCreator35* Signature: (Ljava/lang/String;II)V36*/37JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator38(JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)39{40JNI_COCOA_ENTER(env);41NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);42NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:43[NSNumber numberWithInt:type], NSFileHFSTypeCode,44[NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];45[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];46JNI_COCOA_EXIT(env);47}4849/*50* Class: com_apple_eio_FileManager51* Method: _setFileType52* Signature: (Ljava/lang/String;I)V53*/54JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType55(JNIEnv *env, jclass ckz, jstring javaFilename, jint type)56{57JNI_COCOA_ENTER(env);58NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);59NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];60[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];61JNI_COCOA_EXIT(env);62}6364/*65* Class: com_apple_eio_FileManager66* Method: _setFileCreator67* Signature: (Ljava/lang/String;I)V68*/69JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator70(JNIEnv *env, jclass clz, jstring javaFilename, jint creator)71{72JNI_COCOA_ENTER(env);73NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);74NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];75[[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];76JNI_COCOA_EXIT(env);77}7879/*80* Class: com_apple_eio_FileManager81* Method: _getFileType82* Signature: (Ljava/lang/String;)I83*/84JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType85(JNIEnv *env, jclass clz, jstring javaFilename)86{87jint type = 0;88JNI_COCOA_ENTER(env);89NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);90NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];91NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];92type = [val intValue];93JNI_COCOA_EXIT(env);94return type;95}9697/*98* Class: com_apple_eio_FileManager99* Method: _getFileCreator100* Signature: (Ljava/lang/String;)I101*/102JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator103(JNIEnv *env, jclass clz, jstring javaFilename)104{105jint creator = 0;106JNI_COCOA_ENTER(env);107NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);108NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];109NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];110creator = [val intValue];111JNI_COCOA_EXIT(env);112return creator;113}114115/*116* Class: com_apple_eio_FileManager117* Method: _findFolder118* Signature: (SIZ)Ljava/lang/String;119*/120JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ121(JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)122{123jstring filename = nil;124JNI_COCOA_ENTER(env);125126FSRef foundRef;127createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);128if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {129char path[PATH_MAX];130if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {131NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];132filename = NormalizedPathJavaStringFromNSString(env, filenameString);133}134}135136JNI_COCOA_EXIT(env);137return filename;138}139140141/*142* Class: com_apple_eio_FileManager143* Method: _openURL144* Signature: (Ljava/lang/String;)V145*/146JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL147(JNIEnv *env, jclass clz, jstring urlString)148{149JNI_COCOA_ENTER(env);150151NSURL *url = [NSURL URLWithString:NormalizedPathNSStringFromJavaString(env, urlString)];152153// Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.154[ThreadUtilities performOnMainThreadWaiting:NO block:^(){155[[NSWorkspace sharedWorkspace] openURL:url];156}];157158JNI_COCOA_EXIT(env);159}160161162/*163* Class: com_apple_eio_FileManager164* Method: getNativeResourceFromBundle165* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;166*/167JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle168(JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)169{170jstring filename = NULL;171JNI_COCOA_ENTER(env);172173NSString *resourceName = NormalizedPathNSStringFromJavaString(env, javaResourceName);174NSString *subDirectory = NormalizedPathNSStringFromJavaString(env, javaSubDirName);175NSString *typeName = NormalizedPathNSStringFromJavaString(env, javaTypeName);176177NSString *path = [[NSBundle mainBundle] pathForResource:resourceName178ofType:typeName179inDirectory:subDirectory];180181filename = NormalizedPathJavaStringFromNSString(env, path);182183JNI_COCOA_EXIT(env);184return filename;185}186187188/*189* Class: com_apple_eio_FileManager190* Method: getNativePathToApplicationBundle191* Signature: ()Ljava/lang/String;192*/193JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle194(JNIEnv *env, jclass clazz)195{196jstring filename = nil;197JNI_COCOA_ENTER(env);198199NSBundle *mainBundle = [NSBundle mainBundle];200filename = NormalizedPathJavaStringFromNSString(env, [mainBundle bundlePath]);201202JNI_COCOA_EXIT(env);203return filename;204}205206207/*208* Class: com_apple_eio_FileManager209* Method: __moveToTrash210* Signature: (Ljava/lang/String;)V211*/212213JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash214(JNIEnv *env, jclass clz, jstring fileName)215{216__block BOOL returnValue = NO;217JNI_COCOA_ENTER(env);218219NSString * path = NormalizedPathNSStringFromJavaString(env, fileName);220NSURL *url = [NSURL fileURLWithPath:path];221[ThreadUtilities performOnMainThreadWaiting:YES block:^(){222223returnValue = [[NSFileManager defaultManager] trashItemAtURL:url224resultingItemURL:nil225error:nil];226}];227228JNI_COCOA_EXIT(env);229230return returnValue ? JNI_TRUE: JNI_FALSE;231}232233/*234* Class: com_apple_eio_FileManager235* Method: __revealInFinder236* Signature: (Ljava/lang/String;)V237*/238239JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder240(JNIEnv *env, jclass clz, jstring url)241{242__block jboolean returnValue = JNI_FALSE;243JNI_COCOA_ENTER(env);244245NSString *path = NormalizedPathNSStringFromJavaString(env, url);246[ThreadUtilities performOnMainThreadWaiting:YES block:^(){247returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];248}];249250JNI_COCOA_EXIT(env);251252return returnValue;253}254255256