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/08/28 21:30:15 UTC

svn commit: r437793 [1/2] - in /incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne: ./ CocoaCayenne.xcodeproj/ English.lproj/

Author: torehalset
Date: Mon Aug 28 12:30:13 2006
New Revision: 437793

URL: http://svn.apache.org/viewvc?rev=437793&view=rev
Log:
import framework project

Added:
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.h
    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/CAYQuery.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne.xcodeproj/project.pbxproj
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CocoaCayenne_Prefix.pch
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/English.lproj/
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/English.lproj/InfoPlist.strings   (with props)
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/Info.plist

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,16 @@
+//
+//  BootstrapMessage.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYClientMessage.h"
+
+@interface CAYBootstrapMessage : CAYClientMessage <NSCoding> {
+
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYBootstrapMessage.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,25 @@
+//
+//  BootstrapMessage.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYBootstrapMessage.h"
+
+
+@implementation CAYBootstrapMessage
+
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,18 @@
+//
+//  CAYClientConnection.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYClientMessage.h"
+
+@interface CAYClientConnection : NSObject {
+
+}
+
+- (id) sendMessage:(CAYClientMessage *)message;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientConnection.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,20 @@
+//
+//  CAYClientConnection.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYClientConnection.h"
+
+
+@implementation CAYClientConnection
+
+- (id) sendMessage:(CAYClientMessage *)message
+{
+	NSLog(@"CAYClientConnection does not implement sendMessage");
+	return nil;
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,16 @@
+//
+//  CAYClientMessage.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYClientMessage : NSObject {
+
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientMessage.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,14 @@
+//
+//  CAYClientMessage.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYClientMessage.h"
+
+
+@implementation CAYClientMessage
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,27 @@
+//
+//  CAYClientObjRelationship.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/20/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYClientObjRelationship : NSObject <NSCoding> {
+
+	BOOL toMany;
+	NSString *name;
+	NSString *targetEntityName;
+	
+}
+
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+-(void)setTargetEntityName:(NSString *)n;
+-(NSString *)targetEntityName;
+-(BOOL)isToMany;
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYClientObjRelationship.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,69 @@
+//
+//  CAYClientObjRelationship.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/20/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYClientObjRelationship.h"
+
+
+@implementation CAYClientObjRelationship
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	// TODO: correct with clientToMany instead of toMany?
+	toMany = [coder decodeBoolForKey:@"clientToMany"];
+	[self setName:[coder decodeObjectForKey:@"name"]];
+	[self setTargetEntityName:[coder decodeObjectForKey:@"targetEntityName"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	// TODO: correct with clientToMany
+	[coder encodeBool:toMany forKey:@"clientToMany"];
+	[coder encodeObject:name forKey:@"name"];
+	[coder encodeObject:targetEntityName forKey:@"targetEntityName"];
+}
+
+-(void)setName:(NSString *)n
+{
+	[n retain];
+	[name release];
+	name = n;
+}
+
+-(NSString *)name
+{
+	return name;
+}
+
+-(void)setTargetEntityName:(NSString *)n
+{
+	[n retain];
+	[targetEntityName release];
+	targetEntityName = n;
+}
+
+-(NSString *)targetEntityName
+{
+	return targetEntityName;
+}
+
+-(BOOL)isToMany
+{
+    return toMany;
+}
+
+-(void)dealloc
+{
+	[name release];
+	[targetEntityName release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,21 @@
+//
+//  CAYCompoundDiff.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/24/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYCompoundDiff : NSObject <NSCoding>  {
+    NSMutableArray *diffs;
+}
+
+-(id)initWithDiffs:(NSMutableArray *)ds;
+
+-(void)setDiffs:(NSMutableArray *)ds;
+-(NSMutableArray *)diffs;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYCompoundDiff.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,51 @@
+//
+//  CAYCompoundDiff.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/24/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYCompoundDiff.h"
+
+
+@implementation CAYCompoundDiff
+
+-(id)initWithDiffs:(NSMutableArray *)ds
+{
+    [super init];
+    [self setDiffs:ds];
+    return self;
+}
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setDiffs:[coder decodeObjectForKey:@"diffs"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:diffs forKey:@"diffs"];
+}
+
+-(void)setDiffs:(NSMutableArray *)ds
+{
+    [ds retain];
+    [diffs release];
+    diffs = ds;
+}
+
+-(NSMutableArray *)diffs
+{
+    return diffs;
+}
+
+-(void)dealloc
+{
+	[diffs release];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,24 @@
+//
+//  CAYDataMap.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYDataMap : NSObject <NSCoding> {
+
+    NSString *name;
+    NSMutableDictionary *objEntityMap;
+
+}
+
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+-(void)setObjEntityMap:(NSMutableDictionary *)oem;
+-(NSMutableDictionary *)objEntityMap;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYDataMap.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,64 @@
+//
+//  CAYDataMap.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYDataMap.h"
+
+
+@implementation CAYDataMap
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setName:[coder decodeObjectForKey:@"name"]];
+	[self setObjEntityMap:[coder decodeObjectForKey:@"objEntityMap"]];
+    
+    // remove extra entry created by hessian framework
+    // TODO: fix in framework?
+    [[self objEntityMap] removeObjectForKey:@"hessianClassName"];
+    
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:name forKey:@"name"];
+	[coder encodeObject:objEntityMap forKey:@"objEntityMap"];
+}
+
+-(void)setName:(NSString *)n
+{
+	[n retain];
+	[name release];
+	name = n;
+}
+
+-(NSString *)name
+{
+	return name;
+}
+
+-(void)setObjEntityMap:(NSMutableDictionary *)oem
+{
+    [oem retain];
+    [objEntityMap release];
+    objEntityMap = oem;
+}
+
+-(NSMutableDictionary *)objEntityMap
+{
+    return objEntityMap;
+}
+
+-(void)dealloc
+{
+    [self setName:nil];
+    [self setObjEntityMap:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,25 @@
+//
+//  CAYEntityResolver.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/14/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYObjEntity.h"
+
+@interface CAYEntityResolver : NSObject {
+    NSArray *maps;
+    NSMutableDictionary *classMapping;
+}
+
+-(void)setMaps:(NSArray *)m;
+-(NSArray *)maps;
+-(void)setClassMapping:(NSMutableDictionary *)cm;
+-(NSMutableDictionary *)classMapping;
+
+-(void)updateClassMapping;
+-(CAYObjEntity *)objEntityForClass:(Class)cl;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYEntityResolver.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,111 @@
+//
+//  CAYEntityResolver.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/14/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYEntityResolver.h"
+#import "CAYDataMap.h"
+#import "CAYObjEntity.h"
+
+@implementation CAYEntityResolver
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setMaps:[coder decodeObjectForKey:@"maps"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:maps forKey:@"maps"];
+}
+
+-(void)setMaps:(NSArray *)m
+{
+    [m retain];
+    [maps release];
+    maps = m;
+}
+
+-(NSArray *)maps
+{
+    return maps;
+}
+
+-(void)setClassMapping:(NSMutableDictionary *)cm
+{
+    [cm retain];
+    [classMapping release];
+    classMapping = cm;
+}
+
+-(NSMutableDictionary *)classMapping
+{
+    return classMapping;
+}
+
+-(void)updateClassMapping
+{
+    NSMutableDictionary *cm = [NSMutableDictionary dictionary];
+    
+    // TODO: handle more than one map?
+    CAYDataMap *dataMap = [[self maps] objectAtIndex:0];
+    //NSLog(@"datamap.name: %@", [dataMap valueForKey:@"name"]);
+    NSMutableDictionary *objEntityMap = [dataMap objEntityMap];
+    
+    NSEnumerator *enumerator = [objEntityMap keyEnumerator];
+    NSString *entityName;
+    while(entityName = [enumerator nextObject])
+    {
+        CAYObjEntity *entity = [objEntityMap objectForKey:entityName];
+        
+        Class cl = NSClassFromString([entity name]);
+        if(cl)
+        {
+            NSLog(@"mapping client %@ to server %@", [entity name], [entity serverClassName]);
+            [cm setObject:[entity name] forKey:[entity serverClassName]];
+        }
+        else
+        {
+            NSLog(@"Could not find cocoa class %@ for server class $@", [entity name], [entity serverClassName]);
+        }
+    }
+    
+    [self setClassMapping:cm];
+}
+
+-(CAYObjEntity *)objEntityForClass:(Class)cl
+{
+    // TODO: handle more than one map?
+    CAYDataMap *dataMap = [[self maps] objectAtIndex:0];
+    //NSLog(@"datamap.name: %@", [dataMap valueForKey:@"name"]);
+    NSMutableDictionary *objEntityMap = [dataMap objEntityMap];
+
+    // TODO: cache the lookup using a NSDictionary!
+    NSEnumerator *enumerator = [objEntityMap keyEnumerator];
+    NSString *entityName;
+    while(entityName = [enumerator nextObject])
+    {
+        CAYObjEntity *entity = [objEntityMap objectForKey:entityName];
+        Class tc = NSClassFromString([entity name]);
+        if([cl isEqualTo:tc])
+        {
+            return entity;
+        }
+    }
+    
+    return nil;
+}
+
+-(void)dealloc
+{
+    [self setMaps:nil];
+    [self setClassMapping:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,28 @@
+//
+//  CAYFault.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYPersistentObject.h"
+
+@interface CAYFault : NSObject {
+
+    CAYPersistentObject *sourceObject;
+    NSString *relationshipName;
+    
+}
+
+-(id)initWithSourceObject:(CAYPersistentObject *)so relationshipName:(NSString *)rn;
+
+-(void)setSourceObject:(CAYPersistentObject *)so;
+-(CAYPersistentObject *)sourceObject;
+-(void)setRelationshipName:(NSString *)rn;
+-(NSString *)relationshipName;
+
+-(id)resolveFault;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYFault.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,62 @@
+//
+//  CAYFault.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYFault.h"
+#import "CAYObjectContext.h"
+
+@implementation CAYFault
+
+-(id)initWithSourceObject:(CAYPersistentObject *)so relationshipName:(NSString *)rn
+{
+    [super init];
+    if(self)
+    {
+        [self setSourceObject:so];
+        [self setRelationshipName:rn];
+    }
+    return self;
+}
+
+-(void)setSourceObject:(CAYPersistentObject *)so
+{
+    [so retain];
+    [sourceObject release];
+    sourceObject = so;
+}
+
+-(CAYPersistentObject *)sourceObject
+{
+    return sourceObject;
+}
+
+-(void)setRelationshipName:(NSString *)rn
+{
+    [rn retain];
+    [relationshipName release];
+    relationshipName = rn;
+}
+
+-(NSString *)relationshipName
+{
+    return relationshipName;
+}
+
+-(id)resolveFault
+{
+    NSLog(@"ERROR. CayFault is abstract. use a subclass");
+    return nil;
+}
+
+-(void)dealloc
+{
+    [self setSourceObject:nil];
+    [self setRelationshipName:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,19 @@
+//
+//  GenericResponse.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYGenericResponse : NSObject <NSCoding> {
+	NSArray *results;
+}
+
+-(void)setResults:(NSArray *)r;
+-(NSArray *)results;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYGenericResponse.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,44 @@
+//
+//  GenericResponse.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYGenericResponse.h"
+
+
+@implementation CAYGenericResponse
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setResults:[coder decodeObjectForKey:@"results"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:results forKey:@"results"];
+}
+
+-(void)setResults:(NSArray *)r
+{
+	[r retain];
+	[results release];
+	results = r;
+}
+
+-(NSArray *)results
+{
+	return results;
+}
+
+-(void)dealloc
+{
+	[results release];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,20 @@
+//
+//  CAYHessianConnection.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYClientConnection.h"
+#import <HessianObjC/BBSHessianObjC.h>
+
+@interface CAYHessianConnection : CAYClientConnection {
+	BBSHessianProxy *proxy;
+}
+
+-(void) setProxy:(BBSHessianProxy *)p;
+-(BBSHessianProxy *) proxy;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYHessianConnection.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,39 @@
+//
+//  CAYHessianConnection.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYHessianConnection.h"
+#import "CAYClientMessage.h"
+
+@implementation CAYHessianConnection
+
+- (id) sendMessage:(CAYClientMessage *)message
+{
+	NSArray *parameters = [NSArray arrayWithObject:message];
+    id result = [proxy callSynchronous:@"processMessage" withParameters:parameters];
+	return result;
+}
+
+-(void) setProxy:(BBSHessianProxy *)p
+{
+	[p retain];
+	[proxy release];
+	proxy = p;
+}
+
+-(BBSHessianProxy *) proxy
+{
+	return proxy;
+}
+
+-(void)dealloc
+{
+	[proxy release];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,23 @@
+//
+//  NamedQuery.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYQuery.h"
+
+@interface CAYNamedQuery : CAYQuery <NSCoding>  {
+	BOOL forceNoCache;
+	NSString *name;
+	NSDictionary *parameters;
+}
+
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+-(void)setParameters:(NSDictionary *)p;
+-(NSDictionary *)parameters;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNamedQuery.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,61 @@
+//
+//  NamedQuery.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYNamedQuery.h"
+
+
+@implementation CAYNamedQuery
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	forceNoCache = [coder decodeBoolForKey:@"forceNoCache"];
+	[self setName:[coder decodeObjectForKey:@"name"]];
+	[self setParameters:[coder decodeObjectForKey:@"parameters"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeBool:forceNoCache forKey:@"forceNoCache"];
+	[coder encodeObject:name forKey:@"name"];
+	[coder encodeObject:parameters forKey:@"parameters"];
+}
+
+-(void)setName:(NSString *)n
+{
+	[n retain];
+	[name release];
+	name = n;
+}
+
+-(NSString *)name
+{
+	return name;
+}
+
+-(void)setParameters:(NSDictionary *)p
+{
+	[p retain];
+	[parameters release];
+	parameters = p;
+}
+
+-(NSDictionary *)parameters
+{
+	return parameters;
+}
+
+-(void)dealloc
+{
+    [self setName:nil];
+    [self setParameters:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,23 @@
+//
+//  CAYNodeDiff.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYNodeDiff : NSObject <NSCoding> {
+    int diffId;
+    NSObject *nodeId;
+}
+
+-(id)initWithNodeId:(id)nid;
+-(id)initWithNodeId:(id)nid diffId:(int)did;
+
+-(void)setNodeId:(NSObject *)nid;
+-(NSObject *)nodeId;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodeDiff.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,61 @@
+//
+//  CAYNodeDiff.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYNodeDiff.h"
+
+
+@implementation CAYNodeDiff
+
+-(id)initWithNodeId:(id)nid
+{
+    [super init];
+    [self setNodeId:nid];
+    return self;
+}
+
+-(id)initWithNodeId:(id)nid diffId:(int)did
+{
+    [self initWithNodeId:nid];
+    diffId = did;
+    return self;
+}
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+    diffId = [coder decodeIntForKey:@"diffId"];
+    [self setNodeId:[coder decodeObjectForKey:@"nodeId"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeInt:diffId forKey:@"diffId"];
+	[coder encodeObject:nodeId forKey:@"nodeId"];
+}
+
+-(void)setNodeId:(NSObject *)nid
+{
+    [nid retain];
+    [nodeId release];
+    nodeId = nid;
+}
+
+-(NSObject *)nodeId
+{
+    return nodeId;
+}
+
+-(void)dealloc
+{
+	[nodeId release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,28 @@
+//
+//  CAYNodePropertyChangeOperation.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYNodeDiff.h"
+
+@interface CAYNodePropertyChangeOperation : CAYNodeDiff <NSCoding>  {
+    NSString *property;
+    NSObject *oldValue;
+    NSObject *newValue;
+}
+
+-(id)initWithNodeId:(NSObject *)nid property:(NSString *)prop oldValue:(NSObject *)oldVal newValue:(NSObject *)newVal;
+-(id)initWithNodeId:(NSObject *)nid property:(NSString *)prop oldValue:(NSObject *)oldVal newValue:(NSObject *)newVal diffId:(int)did;
+
+-(void)setProperty:(NSString *)p;
+-(NSString *)property;
+-(void)setOldValue:(NSObject *)o;
+-(NSObject *)oldValue;
+-(void)setNewValue:(NSObject *)o;
+-(NSObject *)newValue;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYNodePropertyChangeOperation.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,92 @@
+//
+//  CAYNodePropertyChangeOperation.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYNodePropertyChangeOperation.h"
+#import "CAYNodeDiff.h"
+
+@implementation CAYNodePropertyChangeOperation
+
+-(id)initWithNodeId:(NSObject *)nid property:(NSString *)prop oldValue:(NSObject *)oldVal newValue:(NSObject *)newVal
+{
+    [super initWithNodeId:nid];
+    [self setProperty:prop];
+    [self setOldValue:oldVal];
+    [self setNewValue:newVal];
+    return self;
+}
+
+-(id)initWithNodeId:(NSObject *)nid property:(NSString *)prop oldValue:(NSObject *)oldVal newValue:(NSObject *)newVal diffId:(int)did
+{
+    [self initWithNodeId:nid property:prop oldValue:oldVal newValue:newVal];
+    diffId = did;
+    return self;
+}
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super initWithCoder:coder];
+    [self setProperty:[coder decodeObjectForKey:@"property"]];
+    [self setOldValue:[coder decodeObjectForKey:@"oldValue"]];
+    [self setNewValue:[coder decodeObjectForKey:@"newValue"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+    [super encodeWithCoder:coder];
+	[coder encodeObject:property forKey:@"property"];
+	[coder encodeObject:oldValue forKey:@"oldValue"];
+	[coder encodeObject:newValue forKey:@"newValue"];
+}
+
+-(void)setProperty:(NSString *)p
+{
+    [p retain];
+    [property release];
+    property = p;
+}
+
+-(NSString *)property
+{
+    return property;
+}
+
+-(void)setOldValue:(NSObject *)o
+{
+    [o retain];
+    [oldValue release];
+    oldValue = o;
+}
+
+-(NSObject *)oldValue
+{
+    return oldValue;
+}
+
+-(void)setNewValue:(NSObject *)o
+{
+    [o retain];
+    [newValue release];
+    newValue = o;
+}
+
+-(NSObject *)newValue
+{
+    return newValue;
+}
+
+-(void)dealloc
+{
+	[property release];
+	[oldValue release];
+	[newValue release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,30 @@
+//
+//  CAYObjEntity.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/18/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYObjEntity : NSObject <NSCoding> {
+
+	NSArray *attributes;
+	NSString *name;
+    NSString *serverClassName;
+	NSMutableDictionary *relationships;
+	
+}
+
+-(void)setAttributes:(NSArray *)a;
+-(NSArray *)attributes;
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+-(void)setServerClassName:(NSString *)n;
+-(NSString *)serverClassName;
+-(void)setRelationships:(NSMutableDictionary *)r;
+-(NSMutableDictionary *)relationships;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjEntity.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,96 @@
+//
+//  CAYObjEntity.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/18/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYObjEntity.h"
+
+
+@implementation CAYObjEntity
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setAttributes:[coder decodeObjectForKey:@"attributes"]];
+	[self setName:[coder decodeObjectForKey:@"name"]];
+	[self setServerClassName:[coder decodeObjectForKey:@"className"]];
+	[self setRelationships:[coder decodeObjectForKey:@"relationships"]];
+    
+    // remove extra entry created by hessian framework
+    // TODO: fix in framework?
+    [[self relationships] removeObjectForKey:@"hessianClassName"];
+    
+    
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:attributes forKey:@"attributes"];
+	[coder encodeObject:name forKey:@"name"];
+	[coder encodeObject:serverClassName forKey:@"className"];
+	[coder encodeObject:relationships forKey:@"relationships"];
+}
+
+-(void)setAttributes:(NSArray *)a
+{
+	[a retain];
+	[attributes release];
+	attributes = a;
+}
+
+-(NSArray *)attributes
+{
+	return attributes;
+}
+
+-(void)setName:(NSString *)n
+{
+	[n retain];
+	[name release];
+	name = n;
+}
+
+-(NSString *)name
+{
+	return name;
+}
+
+-(void)setServerClassName:(NSString *)n
+{
+	[n retain];
+	[serverClassName release];
+	serverClassName = n;
+}
+
+-(NSString *)serverClassName
+{
+	return serverClassName;
+}
+
+-(void)setRelationships:(NSMutableDictionary *)r
+{
+	[r retain];
+	[relationships release];
+	relationships = r;
+}
+
+-(NSMutableDictionary *)relationships
+{
+	return relationships;
+}
+
+-(void)dealloc
+{
+	[attributes release];
+	[name release];
+	[relationships release];
+    [serverClassName release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,33 @@
+//
+//  CAYObjectContext.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYQuery.h"
+#import "CAYEntityResolver.h"
+
+@class CAYPersistentObject, CAYClientConnection;
+
+@interface CAYObjectContext : NSObject {
+	CAYClientConnection *connection;
+    NSMutableArray *diffs;
+    CAYEntityResolver *entityResolver;
+}
+
+-(NSArray *)performQyery:(CAYQuery *)q;
+
+-(void)setConnection:(CAYClientConnection *)c;
+-(CAYClientConnection *)connection;
+
+-(void) propertyChanged:(CAYPersistentObject *)object forProperty:(NSString *)property fromOld:(NSObject *)oldValue toNew:(NSObject *)newValue;
+
+-(void)commitChanges;
+
+-(void)setEntityResolver:(CAYEntityResolver *)er;
+-(CAYEntityResolver *)entityResolver;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,151 @@
+//
+//  CAYObjectContext.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYObjectContext.h"
+#import "CAYQueryMessage.h"
+#import "CAYQuery.h"
+#import "CAYPersistentObject.h"
+#import "CAYClientConnection.h"
+#import "CAYNodeDiff.h"
+#import "CAYNodePropertyChangeOperation.h"
+#import "CAYCompoundDiff.h"
+#import "CAYSyncMessage.h"
+#import "CAYObjEntity.h"
+#import "CAYClientObjRelationship.h"
+#import "CAYFault.h"
+#import "CAYToManyFault.h"
+#import "CAYToOneFault.h"
+
+@implementation CAYObjectContext
+
+-(id)init
+{
+    self = [super init];
+    if(self != nil)
+    {
+        diffs = [[NSMutableArray array] retain];
+    }
+    return self;
+}
+
+-(NSArray *)performQyery:(CAYQuery *)query
+{
+	CAYQueryMessage *queryMessage = [[CAYQueryMessage alloc] init];
+	[queryMessage setQuery:query];
+	id result = [[self connection] sendMessage:queryMessage];
+	[queryMessage release];
+    
+    NSArray *results = [result results];
+	NSArray *rows = [results objectAtIndex:0];
+    
+    // connect objects to the context
+    int n = [rows count];
+    int i;
+    for(i = 0; i < n; i++)
+    {
+        id row = [rows objectAtIndex:i];
+        if([row isKindOfClass:[CAYPersistentObject class]])
+        {
+            [row setObjectContext:self];
+            // TODO: set initial persistant state
+            // TODO: check for existing objects in context with same ObjectId
+            
+            CAYObjEntity *objEntity = [[self entityResolver] objEntityForClass:[row class]];
+            if(objEntity)
+            {
+                NSDictionary *relations = [objEntity relationships];
+                NSEnumerator *enumerator = [relations keyEnumerator];
+                NSString *relname;
+                while(relname = [enumerator nextObject])
+                {
+                    CAYClientObjRelationship *rel = (CAYClientObjRelationship *)[relations objectForKey:relname];
+                    NSLog(@"create fault for relation named %@: %@", relname, rel);
+                    CAYFault *fault = nil;
+                    if([rel isToMany])
+                    {
+                        fault = [[CAYToManyFault alloc] initWithSourceObject:row relationshipName:relname];
+                    }
+                    else
+                    {
+                        fault = [[CAYToOneFault alloc] initWithSourceObject:row relationshipName:relname];
+                    }
+                    [[row valuesRaw] setValue:fault forKey:relname];
+                    [fault release];
+                }
+            }
+            else
+            {
+                NSLog(@"ERROR: Could not find ObjEntity for class %@", [row class]);
+            }
+        }
+    }
+    
+	NSLog(@"query rows: %@", rows);
+	return rows;
+}
+
+-(void) propertyChanged:(CAYPersistentObject *)object forProperty:(NSString *)property fromOld:(NSObject *)oldValue toNew:(NSObject *)newValue
+{
+    NSLog(@"prop %@ changed from %@ to %@", property, oldValue, newValue);
+    
+    CAYNodeDiff *diff = [[CAYNodePropertyChangeOperation alloc] initWithNodeId:[object objectId] property:property oldValue:oldValue newValue:newValue];
+    [diffs addObject:diff];
+    [diff release];
+    NSLog(@"%i unsaved changes", [diffs count]);
+}
+
+-(void)setConnection:(CAYClientConnection *)c
+{
+	[c retain];
+	[connection release];
+	connection = c;
+}
+
+-(CAYClientConnection *)connection
+{
+	return connection;
+}
+
+-(void)commitChanges
+{
+    NSLog(@"%i unsaved changes before commit", [diffs count]);
+    CAYCompoundDiff *diffWithDiffs = [[CAYCompoundDiff alloc] initWithDiffs:diffs];
+    // TODO: handle different types?
+    CAYSyncMessage *msg = [[CAYSyncMessage alloc] initWithObjectSource:nil type:2 senderChanges:diffWithDiffs];
+    
+    // TODO: handle result?
+    id result = [[self connection] sendMessage:msg];
+    NSLog(@"commit result: %@", result);
+    [diffs removeAllObjects];
+    
+    [msg release];
+    [diffWithDiffs release];
+    NSLog(@"%i unsaved changes after commit", [diffs count]);
+}
+
+-(void)setEntityResolver:(CAYEntityResolver *)er
+{
+    [er retain];
+    [entityResolver release];
+    entityResolver = er;
+}
+
+-(CAYEntityResolver *)entityResolver
+{
+    return entityResolver;
+}
+
+-(void)dealloc
+{
+	[self setConnection:nil];
+    [diffs release];
+    [self setEntityResolver:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,35 @@
+//
+//  ObjectId.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYObjectId : NSObject <NSCoding, NSCopying> {
+
+	NSString *entityName;
+	NSDictionary *objectIdKeys;
+	NSString *singleKey;
+	NSObject *singleValue;
+	NSData *tempKey;
+	NSDictionary *replacementIdMap;
+}
+
+-(void)setEntityName:(NSString *)en;
+-(NSString *)entityName;
+-(void)setObjectIdKeys:(NSDictionary *)oidks;
+-(NSDictionary *)objectIdKeys;
+-(void)setSingleKey:(NSString *)sk;
+-(NSString *)singleKey;
+-(void)setSingleValue:(NSObject *)sv;
+-(NSObject *)singleValue;
+-(void)setTempKey:(NSData *)k;
+-(NSData *)tempKey;
+-(void)setReplacementIdMap:(NSDictionary *)rm;
+-(NSDictionary *)replacementIdMap;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectId.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,172 @@
+//
+//  ObjectId.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYObjectId.h"
+
+
+@implementation CAYObjectId
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setEntityName:[coder decodeObjectForKey:@"entityName"]];
+	[self setObjectIdKeys:[coder decodeObjectForKey:@"objectIdKeys"]];
+	[self setSingleKey:[coder decodeObjectForKey:@"singleKey"]];
+	[self setSingleValue:[coder decodeObjectForKey:@"singleValue"]];
+	[self setTempKey:[coder decodeObjectForKey:@"key"]];
+	[self setReplacementIdMap:[coder decodeObjectForKey:@"replacementIdMap"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:entityName forKey:@"entityName"];
+    [coder encodeObject:singleKey forKey:@"singleKey"];
+    [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"];
+    [coder encodeObject:replacementIdMap forKey:@"replacementIdMap"];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+	id copy = [[[self class] allocWithZone:zone] init];
+	[copy setEntityName:[self entityName]];
+	[copy setObjectIdKeys:[self objectIdKeys]];
+	[copy setSingleKey:[self singleKey]];
+	[copy setSingleValue:[self singleValue]];
+	[copy setTempKey:[self tempKey]];
+    
+	return copy;
+}
+
+-(void)setEntityName:(NSString *)en
+{
+	[en retain];
+	[entityName release];
+	entityName = en;
+}
+
+-(NSString *)entityName
+{
+	return entityName;
+}
+
+-(void)setObjectIdKeys:(NSDictionary *)oidks
+{
+	[oidks retain];
+	[objectIdKeys release];
+	objectIdKeys = oidks;
+}
+
+-(NSDictionary *)objectIdKeys
+{
+	return objectIdKeys;
+}
+
+-(void)setSingleKey:(NSString *)sk
+{
+	[sk retain];
+	[singleKey release];
+	singleKey = sk;
+}
+
+-(NSString *)singleKey
+{
+	return singleKey;
+}
+
+-(void)setSingleValue:(NSObject *)sv
+{
+	[sv retain];
+	[singleValue release];
+	singleValue = sv;
+}
+
+-(NSObject *)singleValue
+{
+	return singleValue;
+}
+
+-(void)setTempKey:(NSData *)k
+{
+	[k retain];
+	[tempKey release];
+	tempKey = k;
+}
+
+-(NSData *)tempKey
+{
+	return tempKey;
+}
+
+ -(void)setReplacementIdMap:(NSDictionary *)rm
+ {
+	 [rm retain];
+	 [replacementIdMap release];
+	 replacementIdMap = rm;
+ }
+ 
+ -(NSDictionary *)replacementIdMap
+ {
+	 return replacementIdMap;
+ }
+
+- (unsigned)hash
+{
+	/*
+	 file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSObject/hash
+	 
+	 http://www.mulle-kybernetik.com/artikel/Optimization/opti-7.html
+	 */
+	// TODO: implement!
+	// TODO: be smart about how to build hash value
+	unsigned hash = 17;
+	hash = hash + [entityName hash];
+	if([self singleKey] != nil)
+	{
+		hash = hash + [singleKey hash];
+		hash = hash + [singleValue hash];
+	}
+	else if ([self objectIdKeys] != nil)
+	{
+		// TODO: remember that values can come in random order
+	}
+	return hash;
+}
+
+- (BOOL)isEqual:(id)anObject
+{
+	// TODO: implement
+	if(![[self entityName] isEqualToString:[anObject entityName]])
+	{
+		return NO;
+	}
+	if(([self singleKey] != nil)&&(![[self singleKey] isEqualToString:[anObject singleKey]])&&(![[self singleValue] isEqual:[anObject singleValue]]))
+	{
+		return NO;
+	}
+	if(([self tempKey] != nil)&&(![[self tempKey] isEqualToData:[anObject tempKey]]))
+	{
+		return NO;
+	}
+	// TODO: check all values
+	return YES;
+}
+
+-(NSString *)description
+{
+    NSString *result;
+    result = [[NSString alloc] initWithFormat:@"{entityName = %@; objectIdKeys = %@; singleKey = %@; singleValue = %@}", [self entityName], [self objectIdKeys], [self singleKey], [self singleValue]];
+    [result autorelease];
+    return result;
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,30 @@
+//
+//  CAYPersistentObject.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/14/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYObjectId.h"
+#import "CAYObjectContext.h"
+
+@interface CAYPersistentObject : NSObject <NSCoding> {
+	CAYObjectId *objectId;
+	unsigned int persistenceState;
+	id objectContext;
+    NSMutableDictionary *values;
+}
+
+-(void)setObjectId:(CAYObjectId *)oid;
+-(CAYObjectId *)objectId;
+-(void)setPersistenceState:(unsigned int)state;
+-(unsigned int)persistenceState;
+-(void)setObjectContext:(CAYObjectContext *)ctxt;
+-(CAYObjectContext *)objectContext;
+
+// used for raw access to the value dictionary. use with care!
+-(NSMutableDictionary *)valuesRaw;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,85 @@
+//
+//  CAYPersistentObject.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/14/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYPersistentObject.h"
+#import "CAYObjectId.h"
+#import "CAYObjectContext.h"
+
+
+@implementation CAYPersistentObject
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+    values = [[NSMutableDictionary dictionary] retain];
+	[self setObjectId:[coder decodeObjectForKey:@"objectId"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:objectId forKey:@"objectId"];
+}
+
+-(void)setObjectId:(CAYObjectId *)oid
+{
+	[oid retain];
+	[objectId release];
+	objectId = oid;
+}
+
+-(CAYObjectId *)objectId
+{
+	return objectId;
+}
+
+-(void)setPersistenceState:(unsigned int)state
+{
+	persistenceState = state;
+}
+
+-(unsigned int)persistenceState
+{
+	return persistenceState;
+}
+
+-(void)setObjectContext:(CAYObjectContext *)ctxt
+{
+	[ctxt retain];
+	[objectContext release];
+	objectContext = ctxt;
+}
+
+-(CAYObjectContext *)objectContext
+{
+	return objectContext;
+}
+
+-(NSString *)description
+{
+    NSString *result;
+    result = [[NSString alloc] initWithFormat:@"{objectId = %@; values = %@}", [self objectId], values];
+    [result autorelease];
+    return result;
+}
+
+-(NSMutableDictionary *)valuesRaw
+{
+    return values;
+}
+
+-(void)dealloc
+{
+	[objectId release];
+	[objectContext release];
+    [values release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,16 @@
+//
+//  CAYQuery.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYQuery : NSObject {
+
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQuery.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,14 @@
+//
+//  CAYQuery.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYQuery.h"
+
+
+@implementation CAYQuery
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,20 @@
+//
+//  QueryMessage.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYQuery.h"
+#import "CAYClientMessage.h"
+
+@interface CAYQueryMessage : CAYClientMessage <NSCoding>  {
+	CAYQuery *query;
+}
+
+-(void)setQuery:(CAYQuery *)q;
+-(CAYQuery *)query;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYQueryMessage.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,44 @@
+//
+//  QueryMessage.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYQueryMessage.h"
+#import "CAYQuery.h"
+
+@implementation CAYQueryMessage
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setQuery:[coder decodeObjectForKey:@"query"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:query forKey:@"query"];
+}
+
+-(void)setQuery:(CAYQuery *)q
+{
+	[q retain];
+	[query release];
+	query = q;
+}
+
+-(CAYQuery *)query
+{
+	return query;
+}
+
+-(void)dealloc
+{
+    [self setQuery:nil];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,24 @@
+//
+//  CAYRelationshipQuery.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYQuery.h"
+#import "CAYObjectId.h"
+
+@interface CAYRelationshipQuery : CAYQuery <NSCoding>  {
+   CAYObjectId *objectId;
+   NSString *relationshipName;
+   BOOL refreshing;
+}
+
+-(void)setObjectId:(CAYObjectId *)oid;
+-(CAYObjectId *)objectId;
+-(void)setRelationshipName:(NSString *)reln;
+-(NSString *)relationshipName;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRelationshipQuery.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,61 @@
+//
+//  CAYRelationshipQuery.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/13/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYRelationshipQuery.h"
+
+
+@implementation CAYRelationshipQuery
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	refreshing = [coder decodeBoolForKey:@"refreshing"];
+	[self setObjectId:[coder decodeObjectForKey:@"objectId"]];
+	[self setRelationshipName:[coder decodeObjectForKey:@"relationshipName"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeBool:refreshing forKey:@"refreshing"];
+	[coder encodeObject:objectId forKey:@"objectId"];
+	[coder encodeObject:relationshipName forKey:@"relationshipName"];
+}
+
+-(void)setObjectId:(CAYObjectId *)oid
+{
+	[oid retain];
+	[objectId release];
+	objectId = oid;
+}
+
+-(CAYObjectId *)objectId
+{
+	return objectId;
+}
+
+-(void)setRelationshipName:(NSString *)reln
+{
+	[reln retain];
+	[relationshipName release];
+	relationshipName = reln;
+}
+
+-(NSString *)relationshipName
+{
+	return relationshipName;
+}
+
+-(void)dealloc
+{
+	[relationshipName release];
+	[objectId release];
+	[super dealloc];
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,22 @@
+//
+//  RemoteSession.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface CAYRemoteSession : NSObject <NSCoding> {
+	NSString *name;
+	NSString *sessionId;
+}
+
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+-(void)setSessionId:(NSString *)s;
+-(NSString *)sessionId;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYRemoteSession.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,58 @@
+//
+//  RemoteSession.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/12/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYRemoteSession.h"
+
+
+@implementation CAYRemoteSession
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+	[super init];
+	[self setName:[coder decodeObjectForKey:@"name"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:name forKey:@"name"];
+}
+
+-(void)setName:(NSString *)n
+{
+	[n retain];
+	[name release];
+	name = n;
+}
+
+-(NSString *)name
+{
+	return name;
+}
+
+-(void)setSessionId:(NSString *)s
+{
+	[s retain];
+	[sessionId release];
+	sessionId = s;
+}
+
+-(NSString *)sessionId
+{
+	return sessionId;
+}
+
+-(void)dealloc
+{
+	[name release];
+	[sessionId release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,29 @@
+//
+//  CAYSyncMessage.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYClientMessage.h"
+#import "CAYObjectContext.h"
+
+@interface CAYSyncMessage : CAYClientMessage <NSCoding>  {
+
+    CAYObjectContext *source;
+    int type;
+    // TODO: create CAYGraphDiff?
+    NSObject *senderChanges;
+
+}
+
+-(id)initWithObjectSource:(CAYObjectContext *)ctxt type:(int)t senderChanges:(NSObject *)changes;
+
+-(void)setSource:(CAYObjectContext *)s;
+-(CAYObjectContext *)source;
+-(void)setSenderChanges:(NSObject *)s;
+-(NSObject *)senderChanges;
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYSyncMessage.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,74 @@
+//
+//  CAYSyncMessage.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/23/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYSyncMessage.h"
+#import "CAYClientMessage.h"
+#import "CAYObjectContext.h"
+
+@implementation CAYSyncMessage
+
+-(id)initWithObjectSource:(CAYObjectContext *)ctxt type:(int)t senderChanges:(NSObject *)changes
+{
+    [super init];
+    // source is transient
+    // [self setSource:ctxt];
+    type = t;
+    [self setSenderChanges:changes];
+    return self;
+}
+
+-(id)initWithCoder:(NSCoder*)coder
+{
+    [super init];
+    // source is transient
+    //[self setSource:[coder decodeObjectForKey:@"source"]];
+    type = [coder decodeIntForKey:@"type"];
+    [self setSenderChanges:[coder decodeObjectForKey:@"senderChanges"]];
+	return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+	[coder encodeObject:source forKey:@"source"];
+	[coder encodeInt:type forKey:@"type"];
+	[coder encodeObject:senderChanges forKey:@"senderChanges"];
+}
+
+-(void)setSource:(CAYObjectContext *)s
+{
+    [s retain];
+    [source release];
+    source = s;
+}
+
+-(CAYObjectContext *)source
+{
+    return source;
+}
+
+-(void)setSenderChanges:(NSObject *)s
+{
+    [s retain];
+    [senderChanges release];
+    senderChanges = s;
+}
+
+-(NSObject *)senderChanges
+{
+    return senderChanges;
+}
+
+-(void)dealloc
+{
+	[source release];
+	[senderChanges release];
+	[super dealloc];
+}
+
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,16 @@
+//
+//  CAYToManyFault.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYFault.h"
+
+@interface CAYToManyFault : CAYFault {
+
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToManyFault.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,33 @@
+//
+//  CAYToManyFault.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYToManyFault.h"
+#import "CAYFault.h"
+#import "CAYRelationshipQuery.h"
+#import "CAYObjectContext.h"
+
+@implementation CAYToManyFault
+
+-(id)resolveFault
+{
+    NSLog(@"resolving toMany fault");
+    
+    CAYRelationshipQuery *q = [[CAYRelationshipQuery alloc] init];
+    [q setObjectId:[[self sourceObject] objectId]];
+    [q setRelationshipName:[self relationshipName]];
+    
+    CAYObjectContext *ctxt = [[self sourceObject] objectContext];
+    NSArray *rows = (NSArray *)[ctxt performQyery:q];
+    
+    // TODO: create a collection that will autoadd new objects to the context? check with Core Data
+    
+    [q release];
+    return rows;
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.h?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.h (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.h Mon Aug 28 12:30:13 2006
@@ -0,0 +1,16 @@
+//
+//  CAYToOneFault.h
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "CAYFault.h"
+
+@interface CAYToOneFault : CAYFault {
+
+}
+
+@end

Added: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m?rev=437793&view=auto
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m (added)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYToOneFault.m Mon Aug 28 12:30:13 2006
@@ -0,0 +1,40 @@
+//
+//  CAYToOneFault.m
+//  CAYClient
+//
+//  Created by Tore Halset on 8/27/06.
+//  Copyright 2006 __MyCompanyName__. All rights reserved.
+//
+
+#import "CAYToOneFault.h"
+#import "CAYFault.h"
+#import "CAYRelationshipQuery.h"
+#import "CAYObjectContext.h"
+
+@implementation CAYToOneFault
+
+-(id)resolveFault
+{
+    NSLog(@"resolving toOne fault");
+    
+    CAYRelationshipQuery *q = [[CAYRelationshipQuery alloc] init];
+    [q setObjectId:[[self sourceObject] objectId]];
+    [q setRelationshipName:[self relationshipName]];
+    
+    CAYObjectContext *ctxt = [[self sourceObject] objectContext];
+    NSArray *rows = (NSArray *)[ctxt performQyery:q];
+    CAYPersistentObject *row = nil;
+    if([rows count] == 1)
+    {
+        row = (CAYPersistentObject *)[rows objectAtIndex:0];
+    }
+    else
+    {
+        NSLog(@"ERROR: toOne fault resolve returned %i rows", [rows count]);
+    }
+    
+    [q release];
+    return row;
+}
+
+@end