source: branches/CoreData/SapphireFrappliance/MetaData/SapphireMObjects/SapphireXMLMovieData.m @ 732

Revision 732, 4.6 KB checked in by gbooker, 5 years ago (diff)

Fixed relationships up a bit better; added all the abilities needed for new data model

Line 
1#import "SapphireXMLMovieData.h"
2#import "SapphireCast.h"
3#import "SapphireDirector.h"
4#import "SapphireGenre.h"
5#import "SapphireMovie.h"
6#import "SapphireFileMetaData.h"
7
8#define ORDERED_CAST_KEY                @"orderedCast"
9#define ORDERED_CAST_DATA               @"orderedCastData"
10#define ORDERED_DIRECTOR_KEY    @"orderedDirectors"
11#define ORDERED_DIRECTOR_DATA   @"orderedDirectorsData"
12#define ORDERED_GENRES_KEY              @"orderedGenres"
13#define ORDERED_GENRES_DATA             @"orderedGenresData"
14
15@implementation SapphireXMLMovieData
16
17- (NSArray *)orderedCast
18{
19        [self willAccessValueForKey:ORDERED_CAST_KEY];
20        NSArray *ret = [self primitiveValueForKey:ORDERED_CAST_KEY];
21        [self didAccessValueForKey:ORDERED_CAST_KEY];
22        if(ret == nil)
23        {
24                NSData *propData = [self valueForKey:ORDERED_CAST_DATA];
25                if(propData != nil)
26                {
27                        NSArray *names = [NSKeyedUnarchiver unarchiveObjectWithData:propData];
28                        NSMutableArray *mutRet = [NSMutableArray arrayWithCapacity:[names count]];
29                        NSManagedObjectContext *moc = [self managedObjectContext];
30                        NSEnumerator *nameEnum = [names objectEnumerator];
31                        NSString *name;
32                        while((name = [nameEnum nextObject]) != nil)
33                        {
34                                SapphireCast *aCast = [SapphireCast cast:name inContext:moc];
35                                if(aCast != nil)
36                                        [mutRet addObject:aCast];
37                        }
38                        ret = [NSArray arrayWithArray:mutRet];
39                        [self setPrimitiveValue:ret forKey:ORDERED_CAST_KEY];
40                }
41        }
42       
43        return ret;
44}
45
46- (void)setOrderedCast:(NSArray *)ordered
47{
48        [self willChangeValueForKey:ORDERED_CAST_KEY];
49        [self setPrimitiveValue:ordered forKey:ORDERED_CAST_KEY];
50        [self didChangeValueForKey:ORDERED_CAST_KEY];
51        NSArray *arc = [ordered valueForKey:@"name"];
52        [self setValue:[NSKeyedArchiver archivedDataWithRootObject:arc] forKey:ORDERED_CAST_DATA];
53        [self.movie checkOrderedCast];
54}
55
56- (NSArray *)orderedGenres
57{
58        [self willAccessValueForKey:ORDERED_GENRES_KEY];
59        NSArray *ret = [self primitiveValueForKey:ORDERED_GENRES_KEY];
60        [self didAccessValueForKey:ORDERED_GENRES_KEY];
61        if(ret == nil)
62        {
63                NSData *propData = [self valueForKey:ORDERED_GENRES_DATA];
64                if(propData != nil)
65                {
66                        NSArray *genres = [NSKeyedUnarchiver unarchiveObjectWithData:propData];
67                        NSMutableArray *mutRet = [NSMutableArray arrayWithCapacity:[genres count]];
68                        NSManagedObjectContext *moc = [self managedObjectContext];
69                        NSEnumerator *genreEnum = [genres objectEnumerator];
70                        NSString *genre;
71                        while((genre = [genreEnum nextObject]) != nil)
72                        {
73                                SapphireGenre *aGenre = [SapphireGenre genre:genre inContext:moc];
74                                if(aGenre != nil)
75                                        [mutRet addObject:aGenre];
76                        }
77                        ret = [NSArray arrayWithArray:mutRet];
78                        [self setPrimitiveValue:ret forKey:ORDERED_GENRES_KEY];
79                }
80        }
81       
82        return ret;
83}
84
85- (void)setOrderedGenres:(NSArray *)ordered
86{
87        [self willChangeValueForKey:ORDERED_GENRES_KEY];
88        [self setPrimitiveValue:ordered forKey:ORDERED_GENRES_KEY];
89        [self didChangeValueForKey:ORDERED_GENRES_KEY];
90        NSArray *arc = [ordered valueForKey:@"name"];
91        [self setValue:[NSKeyedArchiver archivedDataWithRootObject:arc] forKey:ORDERED_GENRES_DATA];
92        [self.movie checkOrderedGenres];
93}
94
95- (NSArray *)orderedDirectors
96{
97        [self willAccessValueForKey:ORDERED_DIRECTOR_KEY];
98        NSArray *ret = [self primitiveValueForKey:ORDERED_DIRECTOR_KEY];
99        [self didAccessValueForKey:ORDERED_DIRECTOR_KEY];
100        if(ret == nil)
101        {
102                NSData *propData = [self valueForKey:ORDERED_DIRECTOR_DATA];
103                if(propData != nil)
104                {
105                        NSArray *names = [NSKeyedUnarchiver unarchiveObjectWithData:propData];
106                        NSMutableArray *mutRet = [NSMutableArray arrayWithCapacity:[names count]];
107                        NSManagedObjectContext *moc = [self managedObjectContext];
108                        NSEnumerator *nameEnum = [names objectEnumerator];
109                        NSString *name;
110                        while((name = [nameEnum nextObject]) != nil)
111                        {
112                                SapphireDirector *aDir = [SapphireDirector director:name inContext:moc];
113                                if(aDir != nil)
114                                        [mutRet addObject:aDir];
115                        }
116                        ret = [NSArray arrayWithArray:mutRet];
117                        [self setPrimitiveValue:ret forKey:ORDERED_DIRECTOR_KEY];
118                }
119        }
120       
121        return ret;
122}
123
124- (void)setOrderedDirectors:(NSArray *)ordered
125{
126        [self willChangeValueForKey:ORDERED_DIRECTOR_KEY];
127        [self setPrimitiveValue:ordered forKey:ORDERED_DIRECTOR_KEY];
128        [self didChangeValueForKey:ORDERED_DIRECTOR_KEY];
129        NSArray *arc = [ordered valueForKey:@"name"];
130        [self setValue:[NSKeyedArchiver archivedDataWithRootObject:arc] forKey:ORDERED_DIRECTOR_DATA];
131        [self.movie checkOrderedDirectors];
132}
133
134- (void)setMovie:(SapphireMovie*)movie
135{
136        SapphireMovie *oldMovie = self.movie;
137        super.movie = movie;
138        if(oldMovie != movie)
139        {
140                if(oldMovie != nil)
141                {
142                        [oldMovie checkOrderedCast];
143                        [oldMovie checkOrderedGenres];
144                        [oldMovie checkOrderedDirectors];                       
145                }
146                if(movie != nil)
147                {
148                        [movie checkOrderedCast];
149                        [movie checkOrderedGenres];
150                        [movie checkOrderedDirectors];                 
151                }
152        }
153}
154
155@end
Note: See TracBrowser for help on using the repository browser.