1*e8959efdSJim Jagielski /**************************************************************
2*e8959efdSJim Jagielski *
3*e8959efdSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*e8959efdSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*e8959efdSJim Jagielski * distributed with this work for additional information
6*e8959efdSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*e8959efdSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*e8959efdSJim Jagielski * "License"); you may not use this file except in compliance
9*e8959efdSJim Jagielski * with the License. You may obtain a copy of the License at
10*e8959efdSJim Jagielski *
11*e8959efdSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*e8959efdSJim Jagielski *
13*e8959efdSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*e8959efdSJim Jagielski * software distributed under the License is distributed on an
15*e8959efdSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*e8959efdSJim Jagielski * KIND, either express or implied. See the License for the
17*e8959efdSJim Jagielski * specific language governing permissions and limitations
18*e8959efdSJim Jagielski * under the License.
19*e8959efdSJim Jagielski *
20*e8959efdSJim Jagielski *************************************************************/
21*e8959efdSJim Jagielski
22*e8959efdSJim Jagielski
23*e8959efdSJim Jagielski
24*e8959efdSJim Jagielski #ifndef _NSSTRING_OOOADDITIONS_HXX_
25*e8959efdSJim Jagielski #include "NSString_OOoAdditions.hxx"
26*e8959efdSJim Jagielski #endif
27*e8959efdSJim Jagielski
28*e8959efdSJim Jagielski #include "NSURL_OOoAdditions.hxx"
29*e8959efdSJim Jagielski
30*e8959efdSJim Jagielski @implementation NSURL (OOoAdditions)
31*e8959efdSJim Jagielski - (rtl::OUString) OUStringForInfo:(InfoType)info
32*e8959efdSJim Jagielski {
33*e8959efdSJim Jagielski NSAutoreleasePool *pool = [NSAutoreleasePool new];
34*e8959efdSJim Jagielski
35*e8959efdSJim Jagielski NSString *sURLString = nil;
36*e8959efdSJim Jagielski
37*e8959efdSJim Jagielski switch(info) {
38*e8959efdSJim Jagielski case FULLPATH:
39*e8959efdSJim Jagielski OSL_TRACE("Extracting the full path of an item");
40*e8959efdSJim Jagielski sURLString = [self absoluteString];
41*e8959efdSJim Jagielski [sURLString retain];
42*e8959efdSJim Jagielski break;
43*e8959efdSJim Jagielski case FILENAME: {
44*e8959efdSJim Jagielski OSL_TRACE("Extracting the file name of an item");
45*e8959efdSJim Jagielski NSString* path = [self path];
46*e8959efdSJim Jagielski if (path == nil) {
47*e8959efdSJim Jagielski sURLString = @"";
48*e8959efdSJim Jagielski }
49*e8959efdSJim Jagielski else {
50*e8959efdSJim Jagielski sURLString = [path lastPathComponent];
51*e8959efdSJim Jagielski }
52*e8959efdSJim Jagielski [sURLString retain];
53*e8959efdSJim Jagielski } break;
54*e8959efdSJim Jagielski case PATHWITHOUTLASTCOMPONENT: {
55*e8959efdSJim Jagielski OSL_TRACE("Extracting the last but one component of an item's path");
56*e8959efdSJim Jagielski NSString* path = [self absoluteString];
57*e8959efdSJim Jagielski if (path == nil) {
58*e8959efdSJim Jagielski sURLString = @"";
59*e8959efdSJim Jagielski }
60*e8959efdSJim Jagielski else {
61*e8959efdSJim Jagielski NSString* lastComponent = [path lastPathComponent];
62*e8959efdSJim Jagielski unsigned int lastLength = [lastComponent length];
63*e8959efdSJim Jagielski sURLString = [path substringToIndex:([path length] - lastLength)];
64*e8959efdSJim Jagielski }
65*e8959efdSJim Jagielski [sURLString retain];
66*e8959efdSJim Jagielski } break;
67*e8959efdSJim Jagielski default:
68*e8959efdSJim Jagielski break;
69*e8959efdSJim Jagielski }
70*e8959efdSJim Jagielski
71*e8959efdSJim Jagielski rtl::OUString sResult = [sURLString OUString];
72*e8959efdSJim Jagielski [sURLString release];
73*e8959efdSJim Jagielski
74*e8959efdSJim Jagielski [pool release];
75*e8959efdSJim Jagielski
76*e8959efdSJim Jagielski return sResult;
77*e8959efdSJim Jagielski }
78*e8959efdSJim Jagielski @end
79*e8959efdSJim Jagielski
resolveAlias(NSString * i_pSystemPath)80*e8959efdSJim Jagielski NSString* resolveAlias( NSString* i_pSystemPath )
81*e8959efdSJim Jagielski {
82*e8959efdSJim Jagielski NSString* pResolvedPath = nil;
83*e8959efdSJim Jagielski CFURLRef rUrl = CFURLCreateWithFileSystemPath( kCFAllocatorDefault,
84*e8959efdSJim Jagielski (CFStringRef)i_pSystemPath,
85*e8959efdSJim Jagielski kCFURLPOSIXPathStyle, false);
86*e8959efdSJim Jagielski if( rUrl != NULL )
87*e8959efdSJim Jagielski {
88*e8959efdSJim Jagielski FSRef rFS;
89*e8959efdSJim Jagielski if( CFURLGetFSRef( rUrl, &rFS ) )
90*e8959efdSJim Jagielski {
91*e8959efdSJim Jagielski Boolean bIsFolder = false;
92*e8959efdSJim Jagielski Boolean bAlias = false;
93*e8959efdSJim Jagielski OSErr err = FSResolveAliasFile( &rFS, true, &bIsFolder, &bAlias);
94*e8959efdSJim Jagielski if( (err == noErr) && bAlias )
95*e8959efdSJim Jagielski {
96*e8959efdSJim Jagielski CFURLRef rResolvedUrl = CFURLCreateFromFSRef( kCFAllocatorDefault, &rFS );
97*e8959efdSJim Jagielski if( rResolvedUrl != NULL )
98*e8959efdSJim Jagielski {
99*e8959efdSJim Jagielski pResolvedPath = (NSString*)CFURLCopyFileSystemPath( rResolvedUrl, kCFURLPOSIXPathStyle );
100*e8959efdSJim Jagielski CFRelease( rResolvedUrl );
101*e8959efdSJim Jagielski }
102*e8959efdSJim Jagielski }
103*e8959efdSJim Jagielski }
104*e8959efdSJim Jagielski CFRelease( rUrl );
105*e8959efdSJim Jagielski }
106*e8959efdSJim Jagielski
107*e8959efdSJim Jagielski return pResolvedPath;
108*e8959efdSJim Jagielski }
109