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/27 23:56:06 UTC
svn commit: r437466 [3/3] - in
/incubator/cayenne/sandbox/CocoaCayenne/CAYClient: ./ CAYClient.xcodeproj/
English.lproj/MainMenu.nib/
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.h Sun Aug 27 14:56:04 2006
@@ -21,6 +21,7 @@
-(NSString *)name;
-(void)setTargetEntityName:(NSString *)n;
-(NSString *)targetEntityName;
+-(BOOL)isToMany;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYClientObjRelationship.m Sun Aug 27 14:56:04 2006
@@ -53,6 +53,11 @@
return targetEntityName;
}
+-(BOOL)isToMany
+{
+ return toMany;
+}
+
-(void)dealloc
{
[name release];
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYDataMap.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYDataMap.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYDataMap.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYDataMap.m Sun Aug 27 14:56:04 2006
@@ -16,6 +16,11 @@
[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;
}
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.h Sun Aug 27 14:56:04 2006
@@ -20,5 +20,6 @@
-(NSMutableDictionary *)classMapping;
-(void)updateClassMapping;
+-(CAYObjEntity *)objEntityForClass:(Class)cl;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYEntityResolver.m Sun Aug 27 14:56:04 2006
@@ -61,25 +61,44 @@
NSString *entityName;
while(entityName = [enumerator nextObject])
{
- if(![entityName isEqualToString:@"hessianClassName"])
+ CAYObjEntity *entity = [objEntityMap objectForKey:entityName];
+
+ Class cl = NSClassFromString([entity name]);
+ if(cl)
{
- 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]);
- }
- }
+ 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
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.h Sun Aug 27 14:56:04 2006
@@ -23,5 +23,6 @@
-(void)setRelationshipName:(NSString *)rn;
-(NSString *)relationshipName;
+-(id)resolveFault;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYFault.m Sun Aug 27 14:56:04 2006
@@ -7,7 +7,7 @@
//
#import "CAYFault.h"
-
+#import "CAYObjectContext.h"
@implementation CAYFault
@@ -46,12 +46,17 @@
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
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYHessianConnection.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYHessianConnection.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYHessianConnection.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYHessianConnection.m Sun Aug 27 14:56:04 2006
@@ -13,7 +13,7 @@
- (id) sendMessage:(CAYClientMessage *)message
{
- NSArray * parameters = [NSArray arrayWithObject:message];
+ NSArray *parameters = [NSArray arrayWithObject:message];
id result = [proxy callSynchronous:@"processMessage" withParameters:parameters];
return result;
}
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.h Sun Aug 27 14:56:04 2006
@@ -14,7 +14,7 @@
NSArray *attributes;
NSString *name;
NSString *serverClassName;
- NSDictionary *relationships;
+ NSMutableDictionary *relationships;
}
@@ -24,7 +24,7 @@
-(NSString *)name;
-(void)setServerClassName:(NSString *)n;
-(NSString *)serverClassName;
--(void)setRelationships:(NSDictionary *)r;
--(NSDictionary *)relationships;
+-(void)setRelationships:(NSMutableDictionary *)r;
+-(NSMutableDictionary *)relationships;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjEntity.m Sun Aug 27 14:56:04 2006
@@ -18,6 +18,12 @@
[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;
}
@@ -65,14 +71,14 @@
return serverClassName;
}
--(void)setRelationships:(NSDictionary *)r
+-(void)setRelationships:(NSMutableDictionary *)r
{
[r retain];
[relationships release];
relationships = r;
}
--(NSDictionary *)relationships
+-(NSMutableDictionary *)relationships
{
return relationships;
}
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjectContext.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjectContext.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjectContext.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYObjectContext.m Sun Aug 27 14:56:04 2006
@@ -15,6 +15,11 @@
#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
@@ -37,7 +42,7 @@
NSArray *results = [result results];
NSArray *rows = [results objectAtIndex:0];
-
+
// connect objects to the context
int n = [rows count];
int i;
@@ -50,8 +55,33 @@
// 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]);
+ }
}
}
@@ -64,7 +94,6 @@
NSLog(@"prop %@ changed from %@ to %@", property, oldValue, newValue);
CAYNodeDiff *diff = [[CAYNodePropertyChangeOperation alloc] initWithNodeId:[object objectId] property:property oldValue:oldValue newValue:newValue];
- //CAYNodePropertyChangeOperation *diff = [[CAYNodePropertyChangeOperation alloc] initWithNodeId:[object objectId] property:property oldValue:oldValue newValue:newValue];
[diffs addObject:diff];
[diff release];
NSLog(@"%i unsaved changes", [diffs count]);
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.h Sun Aug 27 14:56:04 2006
@@ -24,5 +24,7 @@
-(void)setObjectContext:(CAYObjectContext *)ctxt;
-(CAYObjectContext *)objectContext;
+// used for raw access to the value dictionary. use with care!
+-(NSMutableDictionary *)valuesRaw;
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYPersistentObject.m Sun Aug 27 14:56:04 2006
@@ -68,6 +68,11 @@
return result;
}
+-(NSMutableDictionary *)valuesRaw
+{
+ return values;
+}
+
-(void)dealloc
{
[objectId release];
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.h Sun Aug 27 14:56:04 2006
@@ -12,7 +12,6 @@
@interface CAYQueryMessage : CAYClientMessage <NSCoding> {
CAYQuery *query;
- //id *query;
}
-(void)setQuery:(CAYQuery *)q;
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYQueryMessage.m Sun Aug 27 14:56:04 2006
@@ -35,7 +35,6 @@
return query;
}
-
-(void)dealloc
{
[self setQuery:nil];
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToManyFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToManyFault.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToManyFault.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToManyFault.m Sun Aug 27 14:56:04 2006
@@ -7,8 +7,27 @@
//
#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
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToOneFault.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToOneFault.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToOneFault.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/CAYToOneFault.m Sun Aug 27 14:56:04 2006
@@ -7,8 +7,34 @@
//
#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
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/English.lproj/MainMenu.nib/keyedobjects.nib
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/English.lproj/MainMenu.nib/keyedobjects.nib?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
Binary files - no diff available.
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.h?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.h Sun Aug 27 14:56:04 2006
@@ -13,4 +13,7 @@
}
+-(void)setName:(NSString *)n;
+-(NSString *)name;
+
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.m?rev=437466&r1=437465&r2=437466&view=diff
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CAYClient/Painting.m Sun Aug 27 14:56:04 2006
@@ -11,4 +11,28 @@
@implementation Painting
+-(id)initWithCoder:(NSCoder*)coder
+{
+ [super initWithCoder:coder];
+ [values setObject:[coder decodeObjectForKey:@"name"] forKey:@"name"];
+ return self;
+}
+
+-(void)encodeWithCoder:(NSCoder*)coder
+{
+ [super encodeWithCoder:coder];
+ [coder encodeObject:[values valueForKey:@"name"] forKey:@"name"];
+}
+
+-(void)setName:(NSString *)n
+{
+ [[self objectContext] propertyChanged:self forProperty:@"name" fromOld:[values objectForKey:@"name"] toNew:n];
+ [values setObject:n forKey:@"name"];
+}
+
+-(NSString *)name
+{
+ return [values objectForKey:@"name"];
+}
+
@end