8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #import "com_apple_eio_FileManager.h"
27
28 #import <Cocoa/Cocoa.h>
29 #import <JavaNativeFoundation/JavaNativeFoundation.h>
30
31 #import "ThreadUtilities.h"
32
33
34 /*
35 * Class: com_apple_eio_FileManager
36 * Method: _setFileTypeAndCreator
37 * Signature: (Ljava/lang/String;II)V
38 */
39 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator
40 (JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)
41 {
42 JNF_COCOA_ENTER(env);
43 NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
44 NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
45 [NSNumber numberWithInt:type], NSFileHFSTypeCode,
46 [NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];
47 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
48 JNF_COCOA_EXIT(env);
49 }
50
51 /*
52 * Class: com_apple_eio_FileManager
53 * Method: _setFileType
54 * Signature: (Ljava/lang/String;I)V
55 */
56 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType
57 (JNIEnv *env, jclass ckz, jstring javaFilename, jint type)
58 {
59 JNF_COCOA_ENTER(env);
60 NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
61 NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];
62 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
63 JNF_COCOA_EXIT(env);
64 }
65
66 /*
67 * Class: com_apple_eio_FileManager
68 * Method: _setFileCreator
69 * Signature: (Ljava/lang/String;I)V
70 */
71 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator
72 (JNIEnv *env, jclass clz, jstring javaFilename, jint creator)
73 {
74 JNF_COCOA_ENTER(env);
75 NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
76 NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];
77 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
78 JNF_COCOA_EXIT(env);
79 }
80
81 /*
82 * Class: com_apple_eio_FileManager
83 * Method: _getFileType
84 * Signature: (Ljava/lang/String;)I
85 */
86 JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType
87 (JNIEnv *env, jclass clz, jstring javaFilename)
88 {
89 jint type = 0;
90 JNF_COCOA_ENTER(env);
91 NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
92 NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
93 NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];
94 type = [val intValue];
95 JNF_COCOA_EXIT(env);
96 return type;
97 }
98
99 /*
100 * Class: com_apple_eio_FileManager
101 * Method: _getFileCreator
102 * Signature: (Ljava/lang/String;)I
103 */
104 JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator
105 (JNIEnv *env, jclass clz, jstring javaFilename)
106 {
107 jint creator = 0;
108 JNF_COCOA_ENTER(env);
109 NSString *filename = JNFNormalizedNSStringForPath(env, javaFilename);
110 NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
111 NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];
112 creator = [val intValue];
113 JNF_COCOA_EXIT(env);
114 return creator;
115 }
116
117 /*
118 * Class: com_apple_eio_FileManager
119 * Method: _findFolder
120 * Signature: (SIZ)Ljava/lang/String;
121 */
122 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ
123 (JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)
124 {
125 jstring filename = nil;
126 JNF_COCOA_ENTER(env);
127
128 FSRef foundRef;
129 createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);
130 if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {
131 char path[PATH_MAX];
132 if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {
133 NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
134 filename = JNFNormalizedJavaStringForPath(env, filenameString);
135 }
136 }
137
138 JNF_COCOA_EXIT(env);
139 return filename;
140 }
141
142
143 /*
144 * Class: com_apple_eio_FileManager
145 * Method: _openURL
146 * Signature: (Ljava/lang/String;)V
147 */
148 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL
149 (JNIEnv *env, jclass clz, jstring urlString)
150 {
151 JNF_COCOA_ENTER(env);
152
153 NSURL *url = [NSURL URLWithString:JNFNormalizedNSStringForPath(env, urlString)];
154
155 // Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.
156 [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
157 [[NSWorkspace sharedWorkspace] openURL:url];
158 }];
159
160 JNF_COCOA_EXIT(env);
161 }
162
163
164 /*
165 * Class: com_apple_eio_FileManager
166 * Method: getNativeResourceFromBundle
167 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
168 */
169 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle
170 (JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)
171 {
172 jstring filename = NULL;
173 JNF_COCOA_ENTER(env);
174
175 NSString *resourceName = JNFNormalizedNSStringForPath(env, javaResourceName);
176 NSString *subDirectory = JNFNormalizedNSStringForPath(env, javaSubDirName);
177 NSString *typeName = JNFNormalizedNSStringForPath(env, javaTypeName);
178
179 NSString *path = [[NSBundle mainBundle] pathForResource:resourceName
180 ofType:typeName
181 inDirectory:subDirectory];
182
183 filename = JNFNormalizedJavaStringForPath(env, path);
184
185 JNF_COCOA_EXIT(env);
186 return filename;
187 }
188
189
190 /*
191 * Class: com_apple_eio_FileManager
192 * Method: getNativePathToApplicationBundle
193 * Signature: ()Ljava/lang/String;
194 */
195 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle
196 (JNIEnv *env, jclass clazz)
197 {
198 jstring filename = nil;
199 JNF_COCOA_ENTER(env);
200
201 NSBundle *mainBundle = [NSBundle mainBundle];
202 filename = JNFNormalizedJavaStringForPath(env, [mainBundle bundlePath]);
203
204 JNF_COCOA_EXIT(env);
205 return filename;
206 }
207
208
209 /*
210 * Class: com_apple_eio_FileManager
211 * Method: __moveToTrash
212 * Signature: (Ljava/lang/String;)V
213 */
214
215 JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash
216 (JNIEnv *env, jclass clz, jstring fileName)
217 {
218 __block BOOL returnValue = NO;
219 JNF_COCOA_ENTER(env);
220
221 NSString * path = JNFNormalizedNSStringForPath(env, fileName);
222 NSURL *url = [NSURL fileURLWithPath:path];
223 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
224
225 returnValue = [[NSFileManager defaultManager] trashItemAtURL:url
226 resultingItemURL:nil
227 error:nil];
228 }];
229
230 JNF_COCOA_EXIT(env);
231
232 return returnValue ? JNI_TRUE: JNI_FALSE;
233 }
234
235 /*
236 * Class: com_apple_eio_FileManager
237 * Method: __revealInFinder
238 * Signature: (Ljava/lang/String;)V
239 */
240
241 JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder
242 (JNIEnv *env, jclass clz, jstring url)
243 {
244 __block jboolean returnValue = JNI_FALSE;
245 JNF_COCOA_ENTER(env);
246
247 NSString *path = JNFNormalizedNSStringForPath(env, url);
248 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
249 returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];
250 }];
251
252 JNF_COCOA_EXIT(env);
253
254 return returnValue;
255 }
|
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #import "com_apple_eio_FileManager.h"
27
28 #import "JNIUtilities.h"
29 #import "ThreadUtilities.h"
30
31 #import <Cocoa/Cocoa.h>
32
33 /*
34 * Class: com_apple_eio_FileManager
35 * Method: _setFileTypeAndCreator
36 * Signature: (Ljava/lang/String;II)V
37 */
38 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileTypeAndCreator
39 (JNIEnv *env, jclass clz, jstring javaFilename, jint type, jint creator)
40 {
41 JNI_COCOA_ENTER(env);
42 NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);
43 NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
44 [NSNumber numberWithInt:type], NSFileHFSTypeCode,
45 [NSNumber numberWithInt:creator], NSFileHFSCreatorCode, nil];
46 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
47 JNI_COCOA_EXIT(env);
48 }
49
50 /*
51 * Class: com_apple_eio_FileManager
52 * Method: _setFileType
53 * Signature: (Ljava/lang/String;I)V
54 */
55 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileType
56 (JNIEnv *env, jclass ckz, jstring javaFilename, jint type)
57 {
58 JNI_COCOA_ENTER(env);
59 NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);
60 NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:type] forKey:NSFileHFSTypeCode];
61 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
62 JNI_COCOA_EXIT(env);
63 }
64
65 /*
66 * Class: com_apple_eio_FileManager
67 * Method: _setFileCreator
68 * Signature: (Ljava/lang/String;I)V
69 */
70 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1setFileCreator
71 (JNIEnv *env, jclass clz, jstring javaFilename, jint creator)
72 {
73 JNI_COCOA_ENTER(env);
74 NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);
75 NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:creator] forKey:NSFileHFSCreatorCode];
76 [[NSFileManager defaultManager] changeFileAttributes:attr atPath:filename];
77 JNI_COCOA_EXIT(env);
78 }
79
80 /*
81 * Class: com_apple_eio_FileManager
82 * Method: _getFileType
83 * Signature: (Ljava/lang/String;)I
84 */
85 JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileType
86 (JNIEnv *env, jclass clz, jstring javaFilename)
87 {
88 jint type = 0;
89 JNI_COCOA_ENTER(env);
90 NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);
91 NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
92 NSNumber *val = [attributes objectForKey:NSFileHFSTypeCode];
93 type = [val intValue];
94 JNI_COCOA_EXIT(env);
95 return type;
96 }
97
98 /*
99 * Class: com_apple_eio_FileManager
100 * Method: _getFileCreator
101 * Signature: (Ljava/lang/String;)I
102 */
103 JNIEXPORT jint JNICALL Java_com_apple_eio_FileManager__1getFileCreator
104 (JNIEnv *env, jclass clz, jstring javaFilename)
105 {
106 jint creator = 0;
107 JNI_COCOA_ENTER(env);
108 NSString *filename = NormalizedPathNSStringFromJavaString(env, javaFilename);
109 NSDictionary *attributes = [[NSFileManager defaultManager] fileAttributesAtPath:filename traverseLink:YES];
110 NSNumber *val = [attributes objectForKey:NSFileHFSCreatorCode];
111 creator = [val intValue];
112 JNI_COCOA_EXIT(env);
113 return creator;
114 }
115
116 /*
117 * Class: com_apple_eio_FileManager
118 * Method: _findFolder
119 * Signature: (SIZ)Ljava/lang/String;
120 */
121 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager__1findFolder__SIZ
122 (JNIEnv *env, jclass clz, jshort domain, jint folderType, jboolean createIfNeeded)
123 {
124 jstring filename = nil;
125 JNI_COCOA_ENTER(env);
126
127 FSRef foundRef;
128 createIfNeeded = createIfNeeded || (folderType == kTemporaryFolderType) || (folderType == kChewableItemsFolderType);
129 if (FSFindFolder((SInt16)domain, (OSType)folderType, (Boolean)createIfNeeded, &foundRef) == noErr) {
130 char path[PATH_MAX];
131 if (FSRefMakePath(&foundRef, (UInt8 *)path, sizeof(path)) == noErr) {
132 NSString *filenameString = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:path length:strlen(path)];
133 filename = NormalizedPathJavaStringFromNSString(env, filenameString);
134 }
135 }
136
137 JNI_COCOA_EXIT(env);
138 return filename;
139 }
140
141
142 /*
143 * Class: com_apple_eio_FileManager
144 * Method: _openURL
145 * Signature: (Ljava/lang/String;)V
146 */
147 JNIEXPORT void JNICALL Java_com_apple_eio_FileManager__1openURL
148 (JNIEnv *env, jclass clz, jstring urlString)
149 {
150 JNI_COCOA_ENTER(env);
151
152 NSURL *url = [NSURL URLWithString:NormalizedPathNSStringFromJavaString(env, urlString)];
153
154 // Radar 3208005: Run this on the main thread; file:// style URLs will hang otherwise.
155 [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
156 [[NSWorkspace sharedWorkspace] openURL:url];
157 }];
158
159 JNI_COCOA_EXIT(env);
160 }
161
162
163 /*
164 * Class: com_apple_eio_FileManager
165 * Method: getNativeResourceFromBundle
166 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
167 */
168 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativeResourceFromBundle
169 (JNIEnv *env, jclass clz, jstring javaResourceName, jstring javaSubDirName, jstring javaTypeName)
170 {
171 jstring filename = NULL;
172 JNI_COCOA_ENTER(env);
173
174 NSString *resourceName = NormalizedPathNSStringFromJavaString(env, javaResourceName);
175 NSString *subDirectory = NormalizedPathNSStringFromJavaString(env, javaSubDirName);
176 NSString *typeName = NormalizedPathNSStringFromJavaString(env, javaTypeName);
177
178 NSString *path = [[NSBundle mainBundle] pathForResource:resourceName
179 ofType:typeName
180 inDirectory:subDirectory];
181
182 filename = NormalizedPathJavaStringFromNSString(env, path);
183
184 JNI_COCOA_EXIT(env);
185 return filename;
186 }
187
188
189 /*
190 * Class: com_apple_eio_FileManager
191 * Method: getNativePathToApplicationBundle
192 * Signature: ()Ljava/lang/String;
193 */
194 JNIEXPORT jstring JNICALL Java_com_apple_eio_FileManager_getNativePathToApplicationBundle
195 (JNIEnv *env, jclass clazz)
196 {
197 jstring filename = nil;
198 JNI_COCOA_ENTER(env);
199
200 NSBundle *mainBundle = [NSBundle mainBundle];
201 filename = NormalizedPathJavaStringFromNSString(env, [mainBundle bundlePath]);
202
203 JNI_COCOA_EXIT(env);
204 return filename;
205 }
206
207
208 /*
209 * Class: com_apple_eio_FileManager
210 * Method: __moveToTrash
211 * Signature: (Ljava/lang/String;)V
212 */
213
214 JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1moveToTrash
215 (JNIEnv *env, jclass clz, jstring fileName)
216 {
217 __block BOOL returnValue = NO;
218 JNI_COCOA_ENTER(env);
219
220 NSString * path = NormalizedPathNSStringFromJavaString(env, fileName);
221 NSURL *url = [NSURL fileURLWithPath:path];
222 [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
223
224 returnValue = [[NSFileManager defaultManager] trashItemAtURL:url
225 resultingItemURL:nil
226 error:nil];
227 }];
228
229 JNI_COCOA_EXIT(env);
230
231 return returnValue ? JNI_TRUE: JNI_FALSE;
232 }
233
234 /*
235 * Class: com_apple_eio_FileManager
236 * Method: __revealInFinder
237 * Signature: (Ljava/lang/String;)V
238 */
239
240 JNIEXPORT jboolean JNICALL Java_com_apple_eio_FileManager__1revealInFinder
241 (JNIEnv *env, jclass clz, jstring url)
242 {
243 __block jboolean returnValue = JNI_FALSE;
244 JNI_COCOA_ENTER(env);
245
246 NSString *path = NormalizedPathNSStringFromJavaString(env, url);
247 [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
248 returnValue = [[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];
249 }];
250
251 JNI_COCOA_EXIT(env);
252
253 return returnValue;
254 }
|