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;
                };


Reply via email to