// // JSRunModel.m // JSRun Import Framework // // Created by Jonathan on 8/29/06. // Copyright 2006 Jonathan Saggau. All rights reserved. // #import "JSRunModel.h" #import "JSRunGoal.h" #import "JSRunEvent.h" #import "JSRunDistanceHistory.h" #define CONVERT_KM_TO_MILE 0.62137119 @interface JSRunModel (PrivateAPI) - (NSArray *)filterSplitsWithPredicate:(NSPredicate *)pred; @end @implementation JSRunModel - (id) init { self = [super init]; if (self != nil) { name = @"New Run"; templateName = @"A Template"; NSDate *aStartDate = [[NSDate alloc] initWithTimeIntervalSinceNow:(NSTimeInterval) 0.0]; // init start time to right now. start = aStartDate; duration = [[NSNumber alloc] initWithFloat:0.0]; distance = [[NSNumber alloc] initWithFloat:0.0]; calories = [[NSNumber alloc] initWithFloat:0.0]; weight = [[NSNumber alloc] initWithFloat:0.0]; JSRunGoal *aGoal = [[JSRunGoal alloc] init]; goal = aGoal; NSMutableArray *emptyArray = [[NSMutableArray alloc] init]; runEvents = emptyArray; XMLVersion= [[NSNumber alloc] initWithFloat:1.0f]; JSRunDistanceHistory *hist = [[JSRunDistanceHistory alloc] init]; runDistanceHistory = hist; } return self; } #pragma mark - #pragma mark derived On The Fly // autoreleased sub-arrays of events - (NSArray *)filterSplitsWithPredicate:(NSPredicate *)pred { NSMutableArray *splits = [NSMutableArray arrayWithArray:runEvents]; [splits filterUsingPredicate:pred]; return splits; } - (NSArray *)splits; { NSPredicate *pred = [JSRunEvent split]; return [self filterSplitsWithPredicate:pred]; } - (NSArray *) kmSplits; { NSPredicate *pred = [JSRunEvent kmSplit]; return [self filterSplitsWithPredicate:pred]; } - (NSArray *) miSplits; { NSPredicate *pred = [JSRunEvent miSplit]; return [self filterSplitsWithPredicate:pred]; } - (NSArray *) pauses; { NSPredicate *pred = [JSRunEvent pause]; return [self filterSplitsWithPredicate:pred]; } - (NSArray *) reportsToUser; { NSPredicate *pred = [JSRunEvent reportToUser]; return [self filterSplitsWithPredicate:pred]; } - (NSArray *) powerSongs; { NSPredicate *pred = [JSRunEvent powerSong]; return [self filterSplitsWithPredicate:pred]; } #pragma mark - #pragma mark accessors //=========================================================== // name //=========================================================== - (NSString *)name { return name; } - (void)setName:(NSString *)aName { if (name != aName) { [aName retain]; [name release]; name = aName; } } //=========================================================== // templateName //=========================================================== - (NSString *)templateName { return templateName; } - (void)setTemplateName:(NSString *)aTemplateName { if (templateName != aTemplateName) { [aTemplateName retain]; [templateName release]; templateName = aTemplateName; } } //=========================================================== // start //=========================================================== - (NSDate *)start { return start; } - (void)setStart:(NSDate *)aStart { if (start != aStart) { [aStart retain]; [start release]; start = aStart; } } //=========================================================== // duration //=========================================================== - (NSNumber *)duration { return duration; } - (void)setDuration:(NSNumber *)aDuration { duration = aDuration; } //=========================================================== // distance //=========================================================== - (NSNumber *)distance { return distance; } - (void)setDistance:(NSNumber *)aDistance { if (distance != aDistance) { [aDistance retain]; [distance release]; distance = aDistance; } } //=========================================================== // calories //=========================================================== - (NSNumber *)calories { return calories; } - (void)setCalories:(NSNumber *)aCalories { if (calories != aCalories) { [aCalories retain]; [calories release]; calories = aCalories; } } //=========================================================== // goal //=========================================================== - (JSRunGoal *)goal { return goal; } - (void)setGoal:(JSRunGoal *)aGoal { if (goal != aGoal) { [aGoal retain]; [goal release]; goal = aGoal; } } //=========================================================== // weight //=========================================================== - (NSNumber *)weight { return weight; } - (void)setWeight:(NSNumber *)aWeight { if (weight != aWeight) { [aWeight retain]; [weight release]; weight = aWeight; } } //=========================================================== // runEvents //=========================================================== - (NSMutableArray *)runEvents { return runEvents; } - (void)setRunEvents:(NSMutableArray *)aRunEvents { if (runEvents != aRunEvents) { [aRunEvents retain]; [runEvents release]; runEvents = aRunEvents; } } - (void)addRunEvent:(id)aRunEvent { //NSLog(@"Adding run event to run %@", aRunEvent); [[self runEvents] addObject:aRunEvent]; } - (void)removeRunEvent:(id)aRunEvent { [[self runEvents] removeObject:aRunEvent]; } //=========================================================== // XMLVersion //=========================================================== - (NSNumber *)XMLVersion { return XMLVersion; } - (void)setXMLVersion:(NSNumber *)anXMLVersion { if (XMLVersion != anXMLVersion) { [anXMLVersion retain]; [XMLVersion release]; XMLVersion = anXMLVersion; } } //=========================================================== // userID //=========================================================== - (NSString *)userID { return userID; } - (void)setUserID:(NSString *)anUserID { if (userID != anUserID) { [anUserID retain]; [userID release]; userID = anUserID; } } //=========================================================== // runDistanceHistory //=========================================================== - (JSRunDistanceHistory *)runDistanceHistory { return runDistanceHistory; } - (void)setJSRunDistanceHistory:(JSRunDistanceHistory *)aJSRunDistanceHistory { if (runDistanceHistory != aJSRunDistanceHistory) { [aJSRunDistanceHistory retain]; [runDistanceHistory release]; runDistanceHistory = aJSRunDistanceHistory; } } //=========================================================== // dealloc //=========================================================== - (void)dealloc { //CHECK THIS -- make sure we got 'em all [self setName:nil]; [self setTemplateName:nil]; [self setStart:nil]; [self setDistance:nil]; [self setCalories:nil]; [self setGoal:nil]; [self setWeight:nil]; [self setRunEvents:nil]; [self setXMLVersion:nil]; [self setUserID:nil]; [self setJSRunDistanceHistory:nil]; [super dealloc]; } #pragma mark - #pragma mark pretty discription method - (NSString *)description { NSMutableString *desc = [NSMutableString stringWithFormat:@"Simple Description = %@ \n", [super description]]; [desc appendFormat:@"name = %@ \n", [self name]]; [desc appendFormat:@"templateName = %@ \n", [self templateName]]; [desc appendFormat:@"start = %@ \n", [self start]]; [desc appendFormat:@"duration = %@ \n", [self duration]]; [desc appendFormat:@"distance = %@ \n", [self distance]]; [desc appendFormat:@"calories = %@ \n", [self calories]]; [desc appendFormat:@"goal = %@ \n", [self goal]]; [desc appendFormat:@"weight = %@ \n", [self weight]]; [desc appendFormat:@"XML Version = %@ \n", [self XMLVersion]]; [desc appendFormat:@"userID = %@ \n", [self userID]]; [desc appendFormat:@"runEvents = %@ \n", [self runEvents]]; [desc appendFormat:@"goal = %@ \n", [self goal]]; [desc appendFormat:@"runDistanceHistory = %@ \n", [self runDistanceHistory]]; return desc; } @end