Merge pull request #9 from gunyarakun/fix-typo
[cocotron.git] / CoreData / NSAtomicStore.m
blobe8b84ba60bc15bbcbe9f74518abdb68056d8917b
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)
14     return nil;
16    _metadata=[[NSDictionary alloc] init];
17    _cacheNodes=[[NSMutableSet alloc] init];
18    _objectIDToCacheNode=[[NSMutableDictionary alloc] init];
19    _objectIDTable=[[NSMutableDictionary alloc] init];
20    return self;
23 -(void)dealloc {
24    [_metadata release];
25    [_cacheNodes release];
26    [_objectIDToCacheNode release];
27    [_objectIDTable release];
28    [super dealloc];
31 -(NSSet *)cacheNodes {
32    return _cacheNodes;
35 -(NSDictionary *)metadata {
36    return _metadata;
39 -(void)setMetadata:(NSDictionary *)value {
40    value=[value copy];
41    [_metadata release];
42    _metadata=value;
45 -(void)addCacheNodes:(NSSet *)values {
46    for(NSAtomicStoreCacheNode *node in values){
48     [_objectIDToCacheNode setObject:node forKey:[node objectID]];
49    }
50    [_cacheNodes unionSet:values];
53 -(NSAtomicStoreCacheNode *)cacheNodeForObjectID:(NSManagedObjectID *)objectID {
54    NSAtomicStoreCacheNode *result= [_objectIDToCacheNode objectForKey:objectID];
56    return result;
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]];
66    if(refTable==nil){
67     refTable=[NSMutableDictionary dictionary];
68     [_objectIDTable setObject:refTable forKey:[entity name]];
69    }
70    
71    NSManagedObjectID *result=[refTable objectForKey:referenceObject];
72    
73    if(result==nil){
74     result=[[[NSManagedObjectID alloc] initWithEntity:entity] autorelease];
75    
76     [result setReferenceObject:referenceObject];
77     [result setStoreIdentifier:[self identifier]];
78     [result setPersistentStore:self];
80     [refTable setObject:result forKey:referenceObject];
81    }
82    
83    return result;
86 -(void)_uniqueObjectID:(NSManagedObjectID *)objectID {
87    NSEntityDescription *entity=[objectID entity];
88    NSMutableDictionary *refTable=[_objectIDTable objectForKey:[entity name]];
89    
90    if(refTable==nil){
91     refTable=[NSMutableDictionary dictionary];
92     [_objectIDTable setObject:refTable forKey:[entity name]];
93    }
94    
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();
109    return 0;
112 -(void)updateCacheNode:(NSAtomicStoreCacheNode *)node fromManagedObject:(NSManagedObject *)managedObject {
113    NSInvalidAbstractInvocation();
116 -(BOOL)load:(NSError **)error {
117    NSInvalidAbstractInvocation();
118    return 0;
121 -(BOOL)save:(NSError **)error {
122    NSInvalidAbstractInvocation();
123    return 0;
126 @end