You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2006/11/07 23:16:34 UTC

svn commit: r472302 - in /incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne: ./ CocoaCayenne.xcodeproj/

Author: torehalset
Date: Tue Nov  7 14:16:33 2006
New Revision: 472302

URL: http://svn.apache.org/viewvc?view=rev&rev=472302
Log:
 * refactor out ObjectStore to separate class
 * undo stuff in CAYPersistentObject, but additional diffs
   are created.

Added:
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.m
Modified:
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m Tue Nov  7 14:16:33 2006
@@ -60,7 +60,7 @@
     return result;
 }
 
--(void)apply:(NSMutableDictionary *)objectStore
+-(void)apply:(CAYObjectStore *)objectStore
 {
     if(![diffs isKindOfClass:[NSNull class]])
     {

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h Tue Nov  7 14:16:33 2006
@@ -18,7 +18,9 @@
  ****************************************************************/
 
 #import <Cocoa/Cocoa.h>
+#import "CAYObjectStore.h"
 
+@class CAYObjectStore;
 
 @interface CAYNodeDiff : NSObject <NSCoding> {
     int diffId;
@@ -31,7 +33,7 @@
 -(void)setNodeId:(NSObject *)nid;
 -(NSObject *)nodeId;
 
--(void)apply:(NSMutableDictionary *)objectStore;
--(void)undo:(NSMutableDictionary *)objectStore;
+-(void)apply:(CAYObjectStore *)objectStore;
+-(void)undo:(CAYObjectStore *)objectStore;
 
 @end

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m Tue Nov  7 14:16:33 2006
@@ -62,12 +62,12 @@
     return nodeId;
 }
 
--(void)apply:(NSMutableDictionary *)objectStore
+-(void)apply:(CAYObjectStore *)objectStore
 {
     NSLog(@"%@ does not implement apply:", [self class]);
 }
 
--(void)undo:(NSMutableDictionary *)objectStore
+-(void)undo:(CAYObjectStore *)objectStore
 {
     NSLog(@"%@ does not implement undo:", [self class]);
 }

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m Tue Nov  7 14:16:33 2006
@@ -20,6 +20,7 @@
 #import "CAYNodeIdChangeOperation.h"
 #import "CAYPersistentObject.h"
 #import "CAYObjectId.h"
+#import "CAYObjectStore.h"
 
 @implementation CAYNodeIdChangeOperation
 
@@ -48,19 +49,19 @@
     return newNodeId;
 }
 
--(void)apply:(NSMutableDictionary *)objectStore
+-(void)apply:(CAYObjectStore *)objectStore
 {
-    CAYPersistentObject *o = [objectStore objectForKey:[self nodeId]];
+    CAYPersistentObject *o = [objectStore objectForId:(CAYObjectId *)[self nodeId]];
     if(o)
     {
         [o setObjectId:(CAYObjectId *)[self newNodeId]];
-        [objectStore setObject:o forKey:[self newNodeId]];
-        [objectStore removeObjectForKey:[self nodeId]];
+        [objectStore setObject:o forId:(CAYObjectId *)[self newNodeId]];
+        [objectStore removeObjectForId:(CAYObjectId *)[self nodeId]];
         NSLog(@"DEBUG: object after %@: %@", self, o);
     }
     else
     {
-        NSLog(@"ERROR: not able to find object with id %@. keys in object store: %@", [self nodeId], [objectStore allKeys]);
+        NSLog(@"ERROR: not able to find object with id %@", [self nodeId]);
     }
 }
 

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h Tue Nov  7 14:16:33 2006
@@ -21,21 +21,22 @@
 #import "CAYQuery.h"
 #import "CAYEntityResolver.h"
 #import "CAYPersistentObject.h"
+#import "CAYObjectStore.h"
 
-@class CAYPersistentObject, CAYClientConnection, CAYPersistentObject, CAYEntityResolver;
+@class CAYPersistentObject, CAYClientConnection, CAYPersistentObject, CAYEntityResolver, CAYObjectStore;
 
 @interface CAYObjectContext : NSObject {
 	CAYClientConnection *connection;
-    NSMutableArray *diffs;
     CAYEntityResolver *entityResolver;
-    NSMutableDictionary *objectByObjectId;
     NSUndoManager *undoManager;
+    CAYObjectStore *objectStore;
 }
 
 -(NSArray *)performQuery:(CAYQuery *)query error:(NSError **)outError;
 
 -(void)setConnection:(CAYClientConnection *)c;
 -(CAYClientConnection *)connection;
+-(CAYObjectStore *)objectStore;
 
 -(void) propertyChanged:(CAYPersistentObject *)object forProperty:(NSString *)property fromOld:(NSObject *)oldValue toNew:(NSObject *)newValue;
 -(void) arcPropertyChanged:(CAYPersistentObject *)object forProperty:(NSString *)property fromOld:(NSObject *)oldValue toNew:(NSObject *)newValue;

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Tue Nov  7 14:16:33 2006
@@ -44,8 +44,7 @@
     self = [super init];
     if(self != nil)
     {
-        diffs = [[NSMutableArray alloc] init];
-        objectByObjectId = [[NSMutableDictionary alloc] init];
+        objectStore = [[CAYObjectStore alloc] init];
     }
     return self;
 }
@@ -118,7 +117,7 @@
         if([row isKindOfClass:[CAYPersistentObject class]])
         {
             // try to look for old with same objectId in the context
-            CAYPersistentObject *old = (CAYPersistentObject *)[objectByObjectId objectForKey:[row objectId]];
+            CAYPersistentObject *old = [[self objectStore] objectForId:[row objectId]];
             if(old)
             {
                 NSLog(@"DEBUG: old exist for oid. merge over values. %@ == %@", [row objectId], [old objectId]);
@@ -137,7 +136,7 @@
             else
             {
                 NSLog(@"DEBUG: old does not exist for oid %@", [row objectId]);
-                [objectByObjectId setObject:row forKey:[row objectId]];
+                [[self objectStore] setObject:row forId:[row objectId]];
                 [row setPersistenceState:PSTATE_COMMITTED];
             }
 
@@ -167,10 +166,10 @@
     NSLog(@"DEBUG: prop %@ changed from %@ to %@", property, oldValue, newValue);
     
     CAYNodeDiff *diff = [[CAYNodePropertyChangeOperation alloc] initWithNodeId:[object objectId] property:property oldValue:oldValue newValue:newValue];
-    [diffs addObject:diff];
+    [[self objectStore] registerDiff:diff];
     [diff release];
 	[object setPersistenceState:PSTATE_MODIFIED];
-    NSLog(@"DEBUG: %i unsaved changes", [diffs count]);
+    NSLog(@"DEBUG: %i unsaved changes", [[self objectStore] diffCount]);
 }
 
 -(void) arcPropertyChanged:(CAYPersistentObject *)object forProperty:(NSString *)property fromOld:(NSObject *)oldValue toNew:(NSObject *)newValue
@@ -182,7 +181,7 @@
         NSLog(@"DEBUG: add a arcDelete %@.%@", [object class], property);
         CAYPersistentObject *ov = (CAYPersistentObject *)oldValue;
         CAYArcDeleteOperation *diff = [[CAYArcDeleteOperation alloc] initWithNodeId:[object objectId] targetNodeId:[ov objectId] arcId:property];
-        [diffs addObject:diff];
+        [[self objectStore] registerDiff:diff];
         [diff release];
     }
 
@@ -191,7 +190,7 @@
         NSLog(@"DEBUG: add a arcCreate %@.%@", [object class], property);
         CAYPersistentObject *nv = (CAYPersistentObject *)newValue;
         CAYArcCreateOperation *diff = [[CAYArcCreateOperation alloc] initWithNodeId:[object objectId] targetNodeId:[nv objectId] arcId:property];
-        [diffs addObject:diff];
+        [[self objectStore] registerDiff:diff];
         [diff release];
     }
 }
@@ -227,10 +226,15 @@
 	return connection;
 }
 
+-(CAYObjectStore *)objectStore
+{
+    return objectStore;
+}
+
 -(BOOL)commitChanges:(NSError **)outError
 {
-    NSLog(@"DEBUG: %i unsaved changes before commit. %@", [diffs count], diffs);
-    CAYCompoundDiff *diffWithDiffs = [[CAYCompoundDiff alloc] initWithDiffs:diffs];
+    NSLog(@"DEBUG: %i unsaved changes before commit.", [[self objectStore] diffCount]);
+    CAYCompoundDiff *diffWithDiffs = [[CAYCompoundDiff alloc] initWithDiffs:[[self objectStore] diffs]];
     CAYSyncMessage *msg = [[CAYSyncMessage alloc] initWithType:SYNCTYPE_FLUSH_CASCADE senderChanges:diffWithDiffs];
     
     id result = [[self connection] sendMessage:msg];
@@ -241,10 +245,10 @@
     if([result isKindOfClass:[CAYNodeDiff class]])
     {
         CAYNodeDiff *resultDiff = (CAYNodeDiff *)result;
-        [resultDiff apply:objectByObjectId];
+        [resultDiff apply:[self objectStore]];
         // even if no diffs a CAYNodeDiff are returned. so this is the
         // place to clear out the diffs
-        [diffs removeAllObjects];
+        [[self objectStore] removeAllDiffs];
     }
     else if ([result isKindOfClass:[NSError class]])
     {
@@ -275,7 +279,7 @@
     
     [msg release];
     [diffWithDiffs release];
-    NSLog(@"DEBUG: %i unsaved changes after commit", [diffs count]);
+    NSLog(@"DEBUG: %i unsaved changes after commit", [[self objectStore] diffCount]);
     return YES;
 }
 
@@ -326,10 +330,10 @@
     [randomdata release];
     
     CAYNodeDiff *diff = [[CAYNodeCreateOperation alloc] initWithNodeId:oid];
-    [diffs addObject:diff];
+    [[self objectStore] registerDiff:diff];
     [diff release];
     
-    [objectByObjectId setObject:o forKey:oid];
+    [[self objectStore] setObject:o forId:oid];
     
     // init values with NSNull objects
     NSEnumerator *enumerator = [[objEntity attributes] keyEnumerator];
@@ -373,11 +377,11 @@
 -(void)deleteObject:(CAYPersistentObject *)o
 {
     CAYNodeDiff *diff = [[CAYNodeDeleteOperation alloc] initWithNodeId:[o objectId]];
-    [diffs addObject:diff];
+    [[self objectStore] registerDiff:diff];
     [diff release];
     
     // remove from object store
-    [objectByObjectId removeObjectForKey:[o objectId]];
+    [[self objectStore] removeObjectForId:[o objectId]];
 
     // set persistent state
 	[o setPersistenceState:PSTATE_DELETED];
@@ -457,10 +461,8 @@
 {
 	[self setConnection:nil];
     [self setEntityResolver:nil];
-    [diffs release];
-    diffs = nil;
-    [objectByObjectId release];
-    objectByObjectId = nil;
+    [objectStore release];
+    objectStore = nil;
     [self setUndoManager:nil];
 	[super dealloc];
 }

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.h?view=auto&rev=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.h Tue Nov  7 14:16:33 2006
@@ -0,0 +1,44 @@
+/*****************************************************************
+*   Licensed to the Apache Software Foundation (ASF) under one
+*  or more contributor license agreements.  See the NOTICE file
+*  distributed with this work for additional information
+*  regarding copyright ownership.  The ASF licenses this file
+*  to you under the Apache License, Version 2.0 (the
+*  "License"); you may not use this file except in compliance
+*  with the License.  You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+*  Unless required by applicable law or agreed to in writing,
+*  software distributed under the License is distributed on an
+*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+*  KIND, either express or implied.  See the License for the
+*  specific language governing permissions and limitations
+*  under the License.
+****************************************************************/
+
+#import <Cocoa/Cocoa.h>
+#import "CAYNodeDiff.h"
+#import "CAYPersistentObject.h"
+#import "CAYObjectId.h"
+
+@class CAYNodeDiff, CAYPersistentObject;
+
+@interface CAYObjectStore : NSObject {
+
+    NSMutableArray *diffs;
+    NSMutableDictionary *objectByObjectId;
+    
+}
+
+-(void)registerDiff:(CAYNodeDiff *)diff;
+-(unsigned int)diffCount;
+// TODO: should not return a mutable!
+-(NSMutableArray *)diffs;
+-(void)removeAllDiffs;
+
+-(CAYPersistentObject *)objectForId:(CAYObjectId *)oid;
+-(void)setObject:(CAYPersistentObject *)row forId:(CAYObjectId *)oid;
+-(void)removeObjectForId:(CAYObjectId *)oid;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.m?view=auto&rev=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectStore.m Tue Nov  7 14:16:33 2006
@@ -0,0 +1,81 @@
+/*****************************************************************
+*   Licensed to the Apache Software Foundation (ASF) under one
+*  or more contributor license agreements.  See the NOTICE file
+*  distributed with this work for additional information
+*  regarding copyright ownership.  The ASF licenses this file
+*  to you under the Apache License, Version 2.0 (the
+*  "License"); you may not use this file except in compliance
+*  with the License.  You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+*  Unless required by applicable law or agreed to in writing,
+*  software distributed under the License is distributed on an
+*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+*  KIND, either express or implied.  See the License for the
+*  specific language governing permissions and limitations
+*  under the License.
+****************************************************************/
+
+#import "CAYObjectStore.h"
+
+
+@implementation CAYObjectStore
+
+-(id)init
+{
+    self = [super init];
+    if(self != nil)
+    {
+        diffs = [[NSMutableArray alloc] init];
+        objectByObjectId = [[NSMutableDictionary alloc] init];
+    }
+    return self;
+}
+
+-(void)registerDiff:(CAYNodeDiff *)diff
+{
+    [diffs addObject:diff];
+}
+
+-(unsigned int)diffCount
+{
+    return [diffs count];
+}
+
+// TODO: should not return a mutable!
+-(NSMutableArray *)diffs
+{
+    return diffs;
+}
+
+-(void)removeAllDiffs
+{
+    [diffs removeAllObjects];
+}
+
+-(CAYPersistentObject *)objectForId:(CAYObjectId *)oid
+{
+    return [objectByObjectId objectForKey:oid];
+}
+
+-(void)setObject:(CAYPersistentObject *)row forId:(CAYObjectId *)oid
+{
+    [objectByObjectId setObject:row forKey:oid];
+}
+
+-(void)removeObjectForId:(CAYObjectId *)oid
+{
+    [objectByObjectId removeObjectForKey:oid];
+}
+
+-(void)dealloc
+{
+    [diffs release];
+    diffs = nil;
+    [objectByObjectId release];
+    objectByObjectId = nil;
+	[super dealloc];
+}
+
+@end

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Tue Nov  7 14:16:33 2006
@@ -171,6 +171,8 @@
     CAYObjEntity *objEntity = [[[self objectContext] entityResolver] lookupObjEntity:self];
     CAYObjRelationship *relationship = [[objEntity relationships] valueForKey:key];
 	
+    id oldValue = [self valueForKey:key];
+    
     if (relationship)
     {
         
@@ -182,7 +184,7 @@
                 NSLog(@"ERROR: toMany argument should be of type NSArray, not %@", [value class]);
             }
 			
-			NSArray *oldValue = [self valueForKey:key];
+			//NSArray *oldValue = [self valueForKey:key];
             
             NSEnumerator *enumerator;
             CAYPersistentObject *element;
@@ -225,7 +227,7 @@
     else
     {
         // a none-relationship property
-        id oldValue = [self valueForKey:key];
+        //id oldValue = [self valueForKey:key];
         
         // create diff and set value. validation done using key/value validation
         [[self objectContext] propertyChanged:self forProperty:key fromOld:[values objectForKey:key] toNew:value];
@@ -234,6 +236,8 @@
         CAYObjAttribute *attribute = [[objEntity attributes] valueForKey:key];
         NSLog(@"DEBUG: %@.%@. attribute: %@. oldValue: %@. oldValue class: %@",[objEntity name], key, attribute, oldValue, [oldValue class]);
     }
+    
+    [[[self undoManager] prepareWithInvocationTarget:self] setPrimitiveValue:oldValue forKey:key];
     
     [self didChangeValueForKey:key];
 }

Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj?view=diff&rev=472302&r1=472301&r2=472302
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj Tue Nov  7 14:16:33 2006
@@ -13,6 +13,8 @@
 		4421E61F0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4421E61D0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.m */; };
 		442607380AA4B8DE00F0A01F /* CAYNodeCreateOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 442607360AA4B8DE00F0A01F /* CAYNodeCreateOperation.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		442607390AA4B8DE00F0A01F /* CAYNodeCreateOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 442607370AA4B8DE00F0A01F /* CAYNodeCreateOperation.m */; };
+		443C14FA0B01348F004B032F /* CAYObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 443C14F80B01348F004B032F /* CAYObjectStore.h */; };
+		443C14FB0B01348F004B032F /* CAYObjectStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 443C14F90B01348F004B032F /* CAYObjectStore.m */; };
 		44463D9B0AA37577006BAA58 /* CAYBootstrapMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 44463D6B0AA37577006BAA58 /* CAYBootstrapMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		44463D9C0AA37577006BAA58 /* CAYBootstrapMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 44463D6C0AA37577006BAA58 /* CAYBootstrapMessage.m */; };
 		44463D9D0AA37577006BAA58 /* CAYClientConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 44463D6D0AA37577006BAA58 /* CAYClientConnection.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -104,6 +106,8 @@
 		4421E61D0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CAYNodeIdChangeOperation.m; sourceTree = "<group>"; };
 		442607360AA4B8DE00F0A01F /* CAYNodeCreateOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAYNodeCreateOperation.h; sourceTree = "<group>"; };
 		442607370AA4B8DE00F0A01F /* CAYNodeCreateOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CAYNodeCreateOperation.m; sourceTree = "<group>"; };
+		443C14F80B01348F004B032F /* CAYObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAYObjectStore.h; sourceTree = "<group>"; };
+		443C14F90B01348F004B032F /* CAYObjectStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CAYObjectStore.m; sourceTree = "<group>"; };
 		44463D6B0AA37577006BAA58 /* CAYBootstrapMessage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAYBootstrapMessage.h; sourceTree = "<group>"; };
 		44463D6C0AA37577006BAA58 /* CAYBootstrapMessage.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CAYBootstrapMessage.m; sourceTree = "<group>"; };
 		44463D6D0AA37577006BAA58 /* CAYClientConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAYClientConnection.h; sourceTree = "<group>"; };
@@ -261,6 +265,8 @@
 				444DA8040AA61E54006E1768 /* CAYCocoaCayenne.m */,
 				444F27A60AC9EDFF0097052B /* CAYCayenneRuntimeException.h */,
 				444F27A70AC9EDFF0097052B /* CAYCayenneRuntimeException.m */,
+				443C14F80B01348F004B032F /* CAYObjectStore.h */,
+				443C14F90B01348F004B032F /* CAYObjectStore.m */,
 			);
 			name = Classes;
 			sourceTree = "<group>";
@@ -460,6 +466,7 @@
 				444F27F50AC9F4B80097052B /* CAYMissingSessionException.h in Headers */,
 				4485B3B70AF69DE500920481 /* CAYObjectIdQuery.h in Headers */,
 				445C275A0AFC024300D7D2AA /* CAYTreeController.h in Headers */,
+				443C14FA0B01348F004B032F /* CAYObjectStore.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -557,6 +564,7 @@
 				444F27F60AC9F4B80097052B /* CAYMissingSessionException.m in Sources */,
 				4485B3B80AF69DE500920481 /* CAYObjectIdQuery.m in Sources */,
 				445C275B0AFC024300D7D2AA /* CAYTreeController.m in Sources */,
+				443C14FB0B01348F004B032F /* CAYObjectStore.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};