1#import "LogItem.h"
2
3static NSString *defaultCategory = @"Some Incredibly Insightfull message";
4
5@implementation LogItem
6
7- (void)encodeWithCoder:(NSCoder *)coder {
8    [coder encodeObject: [self time]];
9    [coder encodeObject: [self first]];
10    [coder encodeObject: [self second]];
11	[coder encodeObject: [self message]];
12}
13
14- (id)initWithCoder:(NSCoder *)coder {
15    // init variables in the same order as they were encoded    
16    [self setTime: [coder decodeObject]];
17    [self setFirst: [coder decodeObject]];
18    [self setSecond: [coder decodeObject]];
19    [self setMessage: [coder decodeObject]];
20    return self;
21}
22
23
24+ (LogItem *)logItemWithValues:(UInt32)myTime:(UInt16)myFirst:(UInt16)mySecond:(NSString *)myMessage{
25    // convenience method to create a new logItem with default
26    // test data given an amount
27    LogItem *newLogItem = [[LogItem alloc] init];
28    [newLogItem autorelease];
29    [newLogItem setTime: [NSNumber numberWithUnsignedLong:myTime]]; 
30    [newLogItem setFirst: [NSNumber numberWithUnsignedShort:myFirst]]; 
31    [newLogItem setSecond: [NSNumber numberWithUnsignedShort:mySecond]]; 
32    [newLogItem setMessage: myMessage];
33    return newLogItem;
34}
35
36+ (LogItem *)logItem {
37    return [[[LogItem alloc] init] autorelease];
38}
39
40- (id)init {
41    [super init];
42    // ensure amount is never nil
43    [self setTime: [NSNumber numberWithUnsignedLong:0]];
44    [self setFirst: [NSNumber numberWithUnsignedShort:0]]; 
45    [self setSecond: [NSNumber numberWithUnsignedShort:0]]; 
46    [self setMessage: defaultCategory];
47    return self;
48}
49
50- (NSNumber *)time {
51	return [[time copy] autorelease];
52}
53
54- (void)setTime:(NSNumber *)value {
55    [value retain];
56    [time release];
57    time = value;
58}
59
60- (NSString *)message {
61	return [[message copy] autorelease];
62}
63
64- (void)setMessage:(NSString *)value {
65    [value retain];
66    [message release];
67    message = value;
68}
69
70- (NSNumber *)first {
71    return [[first copy] autorelease];
72}
73- (NSNumber *)second {
74    return [[second copy] autorelease];
75}
76
77- (void)setFirst:(NSNumber *)value {
78    NSNumber *copy = [value copy];
79    [first release];
80    first = copy;
81}
82
83- (void)setSecond:(NSNumber *)value {
84    NSNumber *copy = [value copy];
85    [second release];
86    second = copy;
87}
88
89- (void)dealloc {
90    [self setTime:nil];
91    [self setFirst:nil];
92    [self setSecond:nil];
93    [self setMessage:nil];
94    [super dealloc];
95}
96
97@end
98