Files
kraken/KRWorldBuilder/KRWorldBuilder/KRWBFileSystemItem.m
kearwood cad53fcf69 Very early KRWorldBuilder scaffolding in progress.
New KRVector3 math functions

--HG--
extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4058
2012-06-07 17:19:29 +00:00

109 lines
2.9 KiB
Objective-C

//
// KRWBFileSystemItem.m
// KRWorldBuilder
//
// Created by Kearwood Gilbert on 12-05-12.
// Copyright (c) 2012 Kearwood Software. All rights reserved.
//
#import "KRWBFileSystemItem.h"
@implementation KRWBFileSystemItem
static KRWBFileSystemItem *rootItem = nil;
static NSMutableArray *leafNode = nil;
+ (void)initialize {
if (self == [KRWBFileSystemItem class]) {
leafNode = [[NSMutableArray alloc] init];
}
}
- (id)initWithPath:(NSURL *)url parent:(KRWBFileSystemItem *)parentItem {
self = [super init];
if (self) {
fullPath = url;
parent = parentItem;
}
return self;
}
+ (KRWBFileSystemItem *)rootItem {
if (rootItem == nil) {
rootItem = [[KRWBFileSystemItem alloc] initWithPath:[NSURL URLWithString:@"file://localhost/"] parent:nil];
}
return rootItem;
}
// Creates, caches, and returns the array of children
// Loads children incrementally
- (NSArray *)children {
if (children == nil) {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
BOOL valid = [fullPath checkResourceIsReachableAndReturnError:NULL];
NSNumber *isDirectory = nil;
if (! [fullPath getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) {
// handle error
}
BOOL isDir = [isDirectory boolValue];
if (valid && isDir) {
NSArray *keys = [NSArray arrayWithObject:NSURLIsDirectoryKey];
NSArray *child_urls = [fileManager contentsOfDirectoryAtURL:fullPath includingPropertiesForKeys:keys options: NSDirectoryEnumerationSkipsHiddenFiles error:&error];
/*
NSDirectoryEnumerator *enumerator = [fileManager
enumeratorAtURL:fullPath
includingPropertiesForKeys:keys
options:0
errorHandler:^(NSURL *url, NSError *error) {
// Handle the error.
// Return YES if the enumeration should continue after the error.
return YES;
}];
*/
children = [[NSMutableArray alloc] init];
for (NSURL *url in child_urls) {
KRWBFileSystemItem *newChild = [[KRWBFileSystemItem alloc]
initWithPath:url parent:self];
[children addObject:newChild];
}
} else {
children = leafNode;
}
}
return children;
}
- (NSString *)relativePath {
return [[fullPath lastPathComponent] copy];
}
- (KRWBFileSystemItem *)childAtIndex:(NSUInteger)n {
return [[self children] objectAtIndex:n];
}
- (NSInteger)numberOfChildren {
NSArray *tmp = [self children];
return (tmp == leafNode) ? (-1) : [tmp count];
}
- (void)dealloc {
}
@end