1 #import <CoreData/NSAtomicStore.h>
2 #import <CoreData/NSManagedObject.h>
3 #import <CoreData/NSAtomicStoreCacheNode.h>
4 #import "NSManagedObjectID-Private.h"
5 #import "NSManagedObject-Private.h"
6 #import <Foundation/NSMutableSet.h>
7 #import <Foundation/NSMutableDictionary.h>
8 #import <Foundation/NSRaise.h>
10 @implementation NSAtomicStore
12 -initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator configurationName:(NSString *)configurationName URL:(NSURL *)url options:(NSDictionary *)options {
13 if([super initWithPersistentStoreCoordinator:coordinator configurationName:configurationName URL:url options:options]==nil)
16 _metadata=[[NSDictionary alloc] init];
17 _cacheNodes=[[NSMutableSet alloc] init];
18 _objectIDToCacheNode=[[NSMutableDictionary alloc] init];
19 _objectIDTable=[[NSMutableDictionary alloc] init];
25 [_cacheNodes release];
26 [_objectIDToCacheNode release];
27 [_objectIDTable release];
31 -(NSSet *)cacheNodes {
35 -(NSDictionary *)metadata {
39 -(void)setMetadata:(NSDictionary *)value {
45 -(void)addCacheNodes:(NSSet *)values {
46 for(NSAtomicStoreCacheNode *node in values){
48 [_objectIDToCacheNode setObject:node forKey:[node objectID]];
50 [_cacheNodes unionSet:values];
53 -(NSAtomicStoreCacheNode *)cacheNodeForObjectID:(NSManagedObjectID *)objectID {
54 NSAtomicStoreCacheNode *result= [_objectIDToCacheNode objectForKey:objectID];
59 -(NSAtomicStoreCacheNode *)newCacheNodeForManagedObject:(NSManagedObject *)managedObject {
60 return [[NSAtomicStoreCacheNode alloc] initWithObjectID:[managedObject objectID]];
63 -(NSManagedObjectID *)objectIDForEntity:(NSEntityDescription *)entity referenceObject:referenceObject {
64 NSMutableDictionary *refTable=[_objectIDTable objectForKey:[entity name]];
67 refTable=[NSMutableDictionary dictionary];
68 [_objectIDTable setObject:refTable forKey:[entity name]];
71 NSManagedObjectID *result=[refTable objectForKey:referenceObject];
74 result=[[[NSManagedObjectID alloc] initWithEntity:entity] autorelease];
76 [result setReferenceObject:referenceObject];
77 [result setStoreIdentifier:[self identifier]];
78 [result setPersistentStore:self];
80 [refTable setObject:result forKey:referenceObject];
86 -(void)_uniqueObjectID:(NSManagedObjectID *)objectID {
87 NSEntityDescription *entity=[objectID entity];
88 NSMutableDictionary *refTable=[_objectIDTable objectForKey:[entity name]];
91 refTable=[NSMutableDictionary dictionary];
92 [_objectIDTable setObject:refTable forKey:[entity name]];
95 id referenceObject=[objectID referenceObject];
97 [refTable setObject:objectID forKey:referenceObject];
100 -referenceObjectForObjectID:(NSManagedObjectID *)objectID {
101 return [objectID referenceObject];
104 -(void)willRemoveCacheNodes:(NSSet *)cacheNodes {
107 -newReferenceObjectForManagedObject:(NSManagedObject *)managedObject {
108 NSInvalidAbstractInvocation();
112 -(void)updateCacheNode:(NSAtomicStoreCacheNode *)node fromManagedObject:(NSManagedObject *)managedObject {
113 NSInvalidAbstractInvocation();
116 -(BOOL)load:(NSError **)error {
117 NSInvalidAbstractInvocation();
121 -(BOOL)save:(NSError **)error {
122 NSInvalidAbstractInvocation();