Author: torehalset Date: Tue Aug 29 14:57:25 2006 New Revision: 438245 URL: http://svn.apache.org/viewvc?rev=438245&view=rev Log: * made CAYPersistentObject key value coding compliant * started to implement insert/delete * fixed NSNull/nil bug in CAYObjectId
Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.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?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m Tue Aug 29 14:57:25 2006 @@ -53,6 +53,14 @@ return diffs; } +-(NSString *)description +{ + NSString *result; + result = [[NSString alloc] initWithFormat:@"CAYCompoundDiff {diffs = [EMAIL PROTECTED]", [self diffs]]; + [result autorelease]; + return result; +} + -(void)dealloc { [diffs release]; Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.h?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.h (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.h Tue Aug 29 14:57:25 2006 @@ -0,0 +1,27 @@ +/***************************************************************** + * 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" + [EMAIL PROTECTED] CAYNodeCreateOperation : CAYNodeDiff <NSCoding> { + +} + [EMAIL PROTECTED] Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.m?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.m (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeCreateOperation.m Tue Aug 29 14:57:25 2006 @@ -0,0 +1,35 @@ +/***************************************************************** + * 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 "CAYNodeCreateOperation.h" + [EMAIL PROTECTED] CAYNodeCreateOperation + +-(id)initWithCoder:(NSCoder*)coder +{ + [super initWithCoder:coder]; + return self; +} + +-(void)encodeWithCoder:(NSCoder*)coder +{ + [super encodeWithCoder:coder]; +} + [EMAIL PROTECTED] Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.h?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.h (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.h Tue Aug 29 14:57:25 2006 @@ -0,0 +1,27 @@ +/***************************************************************** + * 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" + [EMAIL PROTECTED] CAYNodeDeleteOperation : CAYNodeDiff <NSCoding> { + +} + [EMAIL PROTECTED] Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.m?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.m (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDeleteOperation.m Tue Aug 29 14:57:25 2006 @@ -0,0 +1,36 @@ +/***************************************************************** + * 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 "CAYNodeDeleteOperation.h" + + [EMAIL PROTECTED] CAYNodeDeleteOperation + +-(id)initWithCoder:(NSCoder*)coder +{ + [super initWithCoder:coder]; + return self; +} + +-(void)encodeWithCoder:(NSCoder*)coder +{ + [super encodeWithCoder:coder]; +} + [EMAIL PROTECTED] Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.h?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.h (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.h Tue Aug 29 14:57:25 2006 @@ -0,0 +1,32 @@ +/***************************************************************** + * 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" + [EMAIL PROTECTED] CAYNodeIdChangeOperation : CAYNodeDiff <NSCoding> { + + NSObject *newNodeId; + +} + +-(void)setNewNodeId:(NSObject *)nid; +-(NSObject *)newNodeId; + [EMAIL PROTECTED] Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m?rev=438245&view=auto ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m (added) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeIdChangeOperation.m Tue Aug 29 14:57:25 2006 @@ -0,0 +1,57 @@ +/***************************************************************** + * 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 "CAYNodeIdChangeOperation.h" + + [EMAIL PROTECTED] CAYNodeIdChangeOperation + +-(id)initWithCoder:(NSCoder*)coder +{ + [super initWithCoder:coder]; + [self setNewNodeId:[coder decodeObjectForKey:@"newNodeId"]]; + return self; +} + +-(void)encodeWithCoder:(NSCoder*)coder +{ + [super encodeWithCoder:coder]; + [coder encodeObject:newNodeId forKey:@"newNodeId"]; +} + +-(void)setNewNodeId:(NSObject *)nid +{ + [nid retain]; + [newNodeId release]; + newNodeId = nid; +} + +-(NSObject *)newNodeId +{ + return newNodeId; +} + +-(void)dealloc +{ + [self setNewNodeId:nil]; + [super dealloc]; +} + + [EMAIL PROTECTED] Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h Tue Aug 29 14:57:25 2006 @@ -20,8 +20,9 @@ #import <Cocoa/Cocoa.h> #import "CAYQuery.h" #import "CAYEntityResolver.h" +#import "CAYPersistentObject.h" [EMAIL PROTECTED] CAYPersistentObject, CAYClientConnection; [EMAIL PROTECTED] CAYPersistentObject, CAYClientConnection, CAYPersistentObject; @interface CAYObjectContext : NSObject { CAYClientConnection *connection; @@ -40,5 +41,9 @@ -(void)setEntityResolver:(CAYEntityResolver *)er; -(CAYEntityResolver *)entityResolver; + +-(CAYPersistentObject *)newObject:(Class)pc; +-(void)deleteObject:(CAYPersistentObject *)o; +-(void)registerNewObject:(CAYPersistentObject *)o; @end Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Tue Aug 29 14:57:25 2006 @@ -20,7 +20,6 @@ #import "CAYObjectContext.h" #import "CAYQueryMessage.h" #import "CAYQuery.h" -#import "CAYPersistentObject.h" #import "CAYClientConnection.h" #import "CAYNodeDiff.h" #import "CAYNodePropertyChangeOperation.h" @@ -31,6 +30,8 @@ #import "CAYFault.h" #import "CAYToManyFault.h" #import "CAYToOneFault.h" +#import "CAYNodeCreateOperation.h" +#import "CAYNodeDeleteOperation.h" @implementation CAYObjectContext @@ -149,6 +150,59 @@ -(CAYEntityResolver *)entityResolver { return entityResolver; +} + +-(CAYPersistentObject *)newObject:(Class)pc +{ + CAYPersistentObject *o = [[pc alloc] init]; + [self registerNewObject:o]; + return [o autorelease]; +} + +-(void)registerNewObject:(CAYPersistentObject *)o +{ + NSLog(@"register new object"); + // TODO: check existing data context? + [o retain]; + [o setObjectContext:self]; + // TODO: set persistant state + + // create random data for key + int randombytes[8]; + int i; + for(i = 0; i < 8; i++) + { + randombytes[i] = rand(); + } + NSData *randomdata = [[NSData alloc] initWithBytesNoCopy:&randombytes length:8]; + + CAYObjectId *oid = [[CAYObjectId alloc] init]; + CAYObjEntity *objEntity = [[self entityResolver] objEntityForClass:[o class]]; + [oid setEntityName:[objEntity name]]; + [oid setTempKey:randomdata]; + [o setObjectId:oid]; + + CAYNodeDiff *diff = [[CAYNodeCreateOperation alloc] initWithNodeId:oid]; + [diffs addObject:diff]; + [diff release]; + + // TODO: init values with NSNull objects? + [randomdata release]; + [oid release]; + [o release]; +} + +-(void)deleteObject:(CAYPersistentObject *)o +{ + CAYNodeDiff *diff = [[CAYNodeDeleteOperation alloc] initWithNodeId:[o objectId]]; + [diffs addObject:diff]; + [diff release]; + + // TODO set persistent state? + + // cleanup and remove + [o setObjectContext:nil]; + [o setObjectId:nil]; } -(void)dealloc Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m Tue Aug 29 14:57:25 2006 @@ -30,6 +30,14 @@ [self setSingleKey:[coder decodeObjectForKey:@"singleKey"]]; [self setSingleValue:[coder decodeObjectForKey:@"singleValue"]]; [self setTempKey:[coder decodeObjectForKey:@"key"]]; + + // TODO: fix in HessianObjC or elsewere.. + if([[self tempKey] isKindOfClass:[NSNull class]]) + { + NSLog(@"HACK: switching tempKey from NSNull to nil"); + [self setTempKey:nil]; + } + [self setReplacementIdMap:[coder decodeObjectForKey:@"replacementIdMap"]]; return self; } @@ -41,7 +49,15 @@ [coder encodeObject:singleValue forKey:@"singleValue"]; [coder encodeObject:objectIdKeys forKey:@"objectIdKeys"]; // TODO: fix problem: the key "key" result in a ugly unserialize exception at the server side. - //[coder encodeObject:tempKey forKey:@"key"]; + if([self tempKey]) + { + NSLog(@"encoding key"); + [coder encodeObject:tempKey forKey:@"key"]; + } + else + { + NSLog(@"not encoding key"); + } [coder encodeObject:replacementIdMap forKey:@"replacementIdMap"]; } @@ -174,7 +190,7 @@ -(NSString *)description { NSString *result; - result = [[NSString alloc] initWithFormat:@"{entityName = %@; objectIdKeys = %@; singleKey = %@; singleValue = [EMAIL PROTECTED]", [self entityName], [self objectIdKeys], [self singleKey], [self singleValue]]; + result = [[NSString alloc] initWithFormat:@"{entityName = %@; objectIdKeys = %@; singleKey = %@; singleValue = %@; tempKey = [EMAIL PROTECTED]", [self entityName], [self objectIdKeys], [self singleKey], [self singleValue], [self tempKey]]; [result autorelease]; return result; } Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h Tue Aug 29 14:57:25 2006 @@ -21,6 +21,8 @@ #import "CAYObjectId.h" #import "CAYObjectContext.h" [EMAIL PROTECTED] CAYObjectContext; + @interface CAYPersistentObject : NSObject <NSCoding> { CAYObjectId *objectId; unsigned int persistenceState; @@ -35,7 +37,9 @@ -(void)setObjectContext:(CAYObjectContext *)ctxt; -(CAYObjectContext *)objectContext; -// used for raw access to the value dictionary. use with care! -(NSMutableDictionary *)valuesRaw; + +- (void)setValue:(id)value forKey:(NSString *)key; +- (id)valueForKey:(NSString *)key; @end Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Tue Aug 29 14:57:25 2006 @@ -20,14 +20,24 @@ #import "CAYPersistentObject.h" #import "CAYObjectId.h" #import "CAYObjectContext.h" +#import "CAYFault.h" @implementation CAYPersistentObject +-(id)init +{ + self = [super init]; + if(self) + { + values = [[NSMutableDictionary dictionary] retain]; + } + return self; +} + -(id)initWithCoder:(NSCoder*)coder { - [super init]; - values = [[NSMutableDictionary dictionary] retain]; + [self init]; [self setObjectId:[coder decodeObjectForKey:@"objectId"]]; return self; } @@ -74,7 +84,7 @@ -(NSString *)description { NSString *result; - result = [[NSString alloc] initWithFormat:@"{objectId = %@; values = [EMAIL PROTECTED]", [self objectId], values]; + result = [[NSString alloc] initWithFormat:@"{objectContext = %@; objectId = %@; values = [EMAIL PROTECTED]", [self objectContext], [self objectId], values]; [result autorelease]; return result; } @@ -82,6 +92,45 @@ -(NSMutableDictionary *)valuesRaw { return values; +} + +- (void)setValue:(id)value forKey:(NSString *)key +{ + NSLog(@"set value %@ for key %@ of type %@", value, key, [value class]); + + if([value isKindOfClass:[NSArray class]]) + { + NSEnumerator *enumerator = [value objectEnumerator]; + // TODO: handle and give error if not CAYPersistentObject + CAYPersistentObject *element; + while(element = [enumerator nextObject]) + { + if(![element objectContext]) + { + [[self objectContext] registerNewObject:element]; + // TODO: set relation both ways + } + } + // TODO: check for objects that are not present any more + } + + // TODO: is this for simple properties only? not for relations? + [[self objectContext] propertyChanged:self forProperty:key fromOld:[values objectForKey:key] toNew:value]; + + [values setValue:value forKey:key]; +} + +- (id)valueForKey:(NSString *)key +{ + id val = [values objectForKey:key]; + if([val isKindOfClass:[CAYFault class]]) + { + CAYFault *fault = (CAYFault *)val; + NSLog(@"resolve fault %@", fault); + val = [fault resolveFault]; + [values setValue:val forKey:key]; + } + return [values objectForKey:key]; } -(void)dealloc Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m Tue Aug 29 14:57:25 2006 @@ -34,11 +34,17 @@ CAYObjectContext *ctxt = [[self sourceObject] objectContext]; NSArray *rows = (NSArray *)[ctxt performQyery:q]; + [q release]; + return rows; // TODO: create a collection that will autoadd new objects to the context? check with Core Data + /* + CAYManagedArray *managedRows = [[CAYManagedArray alloc] init]; + [managedRows setArray:rows]; + [managedRows setObjectContext:ctxt]; - [q release]; - return rows; + return [managedRows autorelease]; + */ } @end Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m Tue Aug 29 14:57:25 2006 @@ -43,6 +43,7 @@ { NSLog(@"ERROR: toOne fault resolve returned %i rows", [rows count]); } + // TODO: check in local ObjectContext first [q release]; return row; 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?rev=438245&r1=438244&r2=438245&view=diff ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj Tue Aug 29 14:57:25 2006 @@ -7,6 +7,10 @@ objects = { /* Begin PBXBuildFile section */ + 4421E61E0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4421E61C0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.h */; }; + 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 */; }; 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, ); }; }; @@ -55,6 +59,8 @@ 44463DC80AA37577006BAA58 /* CAYToManyFault.m in Sources */ = {isa = PBXBuildFile; fileRef = 44463D980AA37577006BAA58 /* CAYToManyFault.m */; }; 44463DC90AA37577006BAA58 /* CAYToOneFault.h in Headers */ = {isa = PBXBuildFile; fileRef = 44463D990AA37577006BAA58 /* CAYToOneFault.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44463DCA0AA37577006BAA58 /* CAYToOneFault.m in Sources */ = {isa = PBXBuildFile; fileRef = 44463D9A0AA37577006BAA58 /* CAYToOneFault.m */; }; + 4448AA430AA4C55F002C2FA7 /* CAYNodeDeleteOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4448AA410AA4C55F002C2FA7 /* CAYNodeDeleteOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4448AA440AA4C55F002C2FA7 /* CAYNodeDeleteOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4448AA420AA4C55F002C2FA7 /* CAYNodeDeleteOperation.m */; }; 44FE798F0AA3790C0040BB78 /* HessianObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44FE798E0AA3790C0040BB78 /* HessianObjC.framework */; }; 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; 8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; @@ -66,6 +72,10 @@ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; 32DBCF5E0370ADEE00C91783 /* CocoaCayenne_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CocoaCayenne_Prefix.pch; sourceTree = "<group>"; }; + 4421E61C0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAYNodeIdChangeOperation.h; sourceTree = "<group>"; }; + 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>"; }; 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>"; }; @@ -114,6 +124,8 @@ 44463D980AA37577006BAA58 /* CAYToManyFault.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CAYToManyFault.m; sourceTree = "<group>"; }; 44463D990AA37577006BAA58 /* CAYToOneFault.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAYToOneFault.h; sourceTree = "<group>"; }; 44463D9A0AA37577006BAA58 /* CAYToOneFault.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = CAYToOneFault.m; sourceTree = "<group>"; }; + 4448AA410AA4C55F002C2FA7 /* CAYNodeDeleteOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAYNodeDeleteOperation.h; sourceTree = "<group>"; }; + 4448AA420AA4C55F002C2FA7 /* CAYNodeDeleteOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CAYNodeDeleteOperation.m; sourceTree = "<group>"; }; 44FE798E0AA3790C0040BB78 /* HessianObjC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HessianObjC.framework; path = /Library/Frameworks/HessianObjC.framework; sourceTree = "<absolute>"; }; 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; 8DC2EF5B0486A6940098B216 /* CocoaCayenne.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CocoaCayenne.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -268,6 +280,12 @@ 44463D820AA37577006BAA58 /* CAYNodeDiff.m */, 44463D830AA37577006BAA58 /* CAYNodePropertyChangeOperation.h */, 44463D840AA37577006BAA58 /* CAYNodePropertyChangeOperation.m */, + 442607360AA4B8DE00F0A01F /* CAYNodeCreateOperation.h */, + 442607370AA4B8DE00F0A01F /* CAYNodeCreateOperation.m */, + 4448AA410AA4C55F002C2FA7 /* CAYNodeDeleteOperation.h */, + 4448AA420AA4C55F002C2FA7 /* CAYNodeDeleteOperation.m */, + 4421E61C0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.h */, + 4421E61D0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.m */, ); name = graph; sourceTree = "<group>"; @@ -316,6 +334,9 @@ 44463DC50AA37577006BAA58 /* CAYSyncMessage.h in Headers */, 44463DC70AA37577006BAA58 /* CAYToManyFault.h in Headers */, 44463DC90AA37577006BAA58 /* CAYToOneFault.h in Headers */, + 442607380AA4B8DE00F0A01F /* CAYNodeCreateOperation.h in Headers */, + 4448AA430AA4C55F002C2FA7 /* CAYNodeDeleteOperation.h in Headers */, + 4421E61E0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -397,6 +418,9 @@ 44463DC60AA37577006BAA58 /* CAYSyncMessage.m in Sources */, 44463DC80AA37577006BAA58 /* CAYToManyFault.m in Sources */, 44463DCA0AA37577006BAA58 /* CAYToOneFault.m in Sources */, + 442607390AA4B8DE00F0A01F /* CAYNodeCreateOperation.m in Sources */, + 4448AA440AA4C55F002C2FA7 /* CAYNodeDeleteOperation.m in Sources */, + 4421E61F0AA4EE2D00FBE975 /* CAYNodeIdChangeOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };