This repository was archived by the owner on Jul 7, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOEdit.m
119 lines (100 loc) · 3.41 KB
/
COEdit.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#import "COEdit.h"
#import "COEditCreateBranch.h"
#import "COEditDeleteBranch.h"
#import "COEditSetCurrentBranch.h"
#import "COEditSetCurrentVersionForBranch.h"
#import "COEditSetMetadata.h"
#import "COEditSetBranchMetadata.h"
#import <EtoileFoundation/Macros.h>
@interface COEdit (Private)
- (id) initWithPlist: (id)plist;
@end
@implementation COEdit
NSString *kCOEditCreateBranch = @"COEditCreateBranch";
NSString *kCOEditDeleteBranch = @"COEditDeleteBranch";
NSString *kCOEditSetCurrentVersionForBranch = @"COEditSetCurrentVersionForBranch";
NSString *kCOEditSetCurrentBranch = @"COEditSetCurrentBranch";
NSString *kCOEditSetBranchMetadata = @"COEditSetBranchMetadata";
NSString *kCOEditSetMetadata = @"COEditSetMetadata";
NSString *kCOUndoAction = @"COEdit";
static NSString *kCOPersistentRootUUID = @"COPersistentRootUUID";
static NSString *kCOActionDate = @"COActionDate";
static NSString *kCOActionDisplayName = @"COActionDisplayName";
- (id) initWithUUID: (ETUUID*)aUUID
date: (NSDate*)aDate
displayName: (NSString*)aName
{
NILARG_EXCEPTION_TEST(aUUID);
NILARG_EXCEPTION_TEST(aDate);
NILARG_EXCEPTION_TEST(aName);
SUPERINIT;
ASSIGN(uuid_, aUUID);
ASSIGN(date_, aDate);
ASSIGN(displayName_, aName);
return self;
}
- (id) initWithPlist: (id)plist
{
NSParameterAssert([self class] != [COEdit class]);
return [self initWithUUID: [ETUUID UUIDWithString: [plist objectForKey: kCOPersistentRootUUID]]
date: [[[[NSDateFormatter alloc] init] autorelease] dateFromString: [plist objectForKey: kCOActionDate]]
displayName: [plist objectForKey: kCOActionDisplayName]];
}
+ (COEdit *) editWithPlist: (id)aPlist
{
NSString *key = [aPlist objectForKey: kCOUndoAction];
Class cls = [D([COEditCreateBranch class], kCOEditCreateBranch,
[COEditDeleteBranch class], kCOEditDeleteBranch,
[COEditSetCurrentVersionForBranch class], kCOEditSetCurrentVersionForBranch,
[COEditSetCurrentBranch class], kCOEditSetCurrentBranch,
[COEditSetMetadata class], kCOEditSetMetadata,
[COEditSetBranchMetadata class], kCOEditSetBranchMetadata) objectForKey: key];
if (cls != Nil)
{
return [[[cls alloc] initWithPlist: aPlist] autorelease];
}
else
{
[NSException raise: NSInvalidArgumentException format: @"invalid plist"];
return nil;
}
}
- (id)plist
{
NSMutableDictionary *result = [NSMutableDictionary dictionary];
[result setObject: [[[[NSDateFormatter alloc] init] autorelease] stringFromDate: date_] forKey: kCOActionDate];
[result setObject: [uuid_ stringValue] forKey: kCOPersistentRootUUID];
[result setObject: displayName_ forKey: kCOActionDisplayName];
return result;
}
- (ETUUID*) persistentRootUUID
{
return uuid_;
}
- (NSDate*) date
{
return date_;
}
- (NSString*) menuTitle
{
return displayName_;
}
- (COEdit *) inverseForApplicationTo: (COPersistentRootInfo *)aProot
{
[NSException raise: NSGenericException format: @"unimplemented"];
return nil;
}
- (void) applyToPersistentRoot: (COPersistentRootInfo *)aProot
{
[NSException raise: NSGenericException format: @"unimplemented"];
}
+ (BOOL) isUndoable
{
[NSException raise: NSGenericException format: @"unimplemented"];
return NO;
}
- (NSString *) description
{
return [[self plist] description];
}
@end