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 2007/01/08 23:18:04 UTC
svn commit: r494223 - in
/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne: CAYObjectContext.m
CAYPersistentObject.h CAYPersistentObject.m CAYUtil.h CAYUtil.m
Author: torehalset
Date: Mon Jan 8 14:18:03 2007
New Revision: 494223
URL: http://svn.apache.org/viewvc?view=rev&rev=494223
Log:
* moved logic for random data key
* added CAYPersistentObject#awakeFromInsert
Modified:
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?view=diff&rev=494223&r1=494222&r2=494223
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Mon Jan 8 14:18:03 2007
@@ -36,6 +36,7 @@
#import "CAYRelationshipQuery.h"
#import "CAYGenericResponse.h"
#import "CAYObjectIdQuery.h"
+#import "CAYUtil.h"
@implementation CAYObjectContext
@@ -313,65 +314,20 @@
// set persistant state
[o setPersistenceState:PSTATE_NEW];
- // create random data for key
- int randombytes[8];
- int i;
- for(i = 0; i < 8; i++)
- {
- randombytes[i] = rand();
- }
- NSData *randomdata = [[NSData alloc] initWithBytes:&randombytes length:8];
-
CAYObjectId *oid = [[CAYObjectId alloc] init];
// need to search by class as o does not have an ObjectId with entityName yet
CAYObjEntity *objEntity = [[self entityResolver] objEntityForClass:[o class]];
[oid setEntityName:[objEntity name]];
- [oid setTempKey:randomdata];
+ [oid setTempKey:[CAYUtil createRandomData:8]];
[o setObjectId:oid];
- [randomdata release];
CAYNodeDiff *diff = [[CAYNodeCreateOperation alloc] initWithNodeId:oid];
[[self objectStore] registerDiff:diff];
[diff release];
[[self objectStore] setObject:o forId:oid];
-
- // init values with NSNull objects
- NSEnumerator *enumerator = [[objEntity attributes] keyEnumerator];
- NSString *attribute;
- while(attribute = [enumerator nextObject])
- {
- if(![[o valuesRaw] objectForKey:attribute])
- {
- NSLog(@"DEBUG: setting attribute %@ to NSNull", attribute);
- [[o valuesRaw] setObject:[NSNull null] forKey:attribute];
- }
- }
-
- // init relationships
- enumerator = [[objEntity relationships] keyEnumerator];
- NSString *relationshipName;
- while(relationshipName = [enumerator nextObject])
- {
- if(![[o valuesRaw] objectForKey:relationshipName])
- {
- CAYObjRelationship *relationship = [[objEntity relationships] objectForKey:relationshipName];
- if([relationship isToMany])
- {
- NSLog(@"DEBUG: setting relationship %@ to empty array", relationship);
- NSMutableArray *array = [[NSMutableArray alloc] init];
- [[o valuesRaw] setObject:array forKey:relationshipName];
- [array release];
- }
- else
- {
- NSLog(@"DEBUG: setting attribute %@ to NSNull", relationship);
- [[o valuesRaw] setObject:[NSNull null] forKey:relationshipName];
- }
- }
- }
-
[oid release];
+ [o awakeFromInsert];
[o release];
}
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h?view=diff&rev=494223&r1=494222&r2=494223
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h Mon Jan 8 14:18:03 2007
@@ -51,4 +51,6 @@
-(void)unsetReverseRelationship:(CAYPersistentObject *)value forKey:(NSString *)key;
-(void)willConnect:(CAYPersistentObject *)value forKey:(NSString *)key;
+-(void)awakeFromInsert;
+
@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=494223&r1=494222&r2=494223
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Mon Jan 8 14:18:03 2007
@@ -545,6 +545,45 @@
// TODO: give error if different data contexts?
}
+-(void)awakeFromInsert
+{
+ // init values with NSNull objects
+ CAYObjEntity *objEntity = [[[self objectContext] entityResolver] lookupObjEntity:self];
+ NSEnumerator *enumerator = [[objEntity attributes] keyEnumerator];
+ NSString *attribute;
+ while(attribute = [enumerator nextObject])
+ {
+ if(![[self valuesRaw] objectForKey:attribute])
+ {
+ NSLog(@"DEBUG: setting attribute %@ to NSNull", attribute);
+ [[self valuesRaw] setObject:[NSNull null] forKey:attribute];
+ }
+ }
+
+ // init relationships
+ enumerator = [[objEntity relationships] keyEnumerator];
+ NSString *relationshipName;
+ while(relationshipName = [enumerator nextObject])
+ {
+ if(![[self valuesRaw] objectForKey:relationshipName])
+ {
+ CAYObjRelationship *relationship = [[objEntity relationships] objectForKey:relationshipName];
+ if([relationship isToMany])
+ {
+ NSLog(@"DEBUG: setting relationship %@ to empty array", relationship);
+ NSMutableArray *array = [[NSMutableArray alloc] init];
+ [[self valuesRaw] setObject:array forKey:relationshipName];
+ [array release];
+ }
+ else
+ {
+ NSLog(@"DEBUG: setting attribute %@ to NSNull", relationship);
+ [[self valuesRaw] setObject:[NSNull null] forKey:relationshipName];
+ }
+ }
+ }
+}
+
-(void)dealloc
{
[self setObjectId:nil];
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h?view=diff&rev=494223&r1=494222&r2=494223
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h Mon Jan 8 14:18:03 2007
@@ -25,5 +25,6 @@
}
+(BOOL)nilSafe:(id)a isEqualTo:(id)b;
++(NSData *)createRandomData:(int)length;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m?view=diff&rev=494223&r1=494222&r2=494223
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m Mon Jan 8 14:18:03 2007
@@ -37,4 +37,16 @@
return [a isEqualTo:b];
}
++(NSData *)createRandomData:(int)length
+{
+ int randombytes[length];
+ int i;
+ for(i = 0; i < length; i++)
+ {
+ randombytes[i] = rand();
+ }
+ NSData *randomdata = [[[NSData alloc] initWithBytes:&randombytes length:length] autorelease];
+ return randomdata;
+}
+
@end