xref: /trunk/main/fpicker/source/aqua/NSURL_OOoAdditions.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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