diff --git a/SOPE/NGCards/CardElement.h b/SOPE/NGCards/CardElement.h index ebd89f1e4..de633d07c 100644 --- a/SOPE/NGCards/CardElement.h +++ b/SOPE/NGCards/CardElement.h @@ -33,7 +33,7 @@ @class CardGroup; -@interface CardElement : NSObject +@interface CardElement : NSObject { NSString *tag; NSMutableArray *values; @@ -56,7 +56,7 @@ values: (NSArray *) someValues; - (void) setParent: (CardGroup *) aParent; -- (CardGroup *) parent; +- (id) parent; - (void) setTag: (NSString *) aTag; diff --git a/SOPE/NGCards/CardElement.m b/SOPE/NGCards/CardElement.m index cc3697556..9767359b6 100644 --- a/SOPE/NGCards/CardElement.m +++ b/SOPE/NGCards/CardElement.m @@ -116,7 +116,7 @@ parent = aParent; } -- (CardGroup *) parent +- (id) parent { return parent; } @@ -524,4 +524,19 @@ return new; } +/* NSMutableCopying */ +- (id) mutableCopyWithZone: (NSZone *) aZone +{ + CardElement *new; + + new = [[self class] new]; + [new setTag: [tag mutableCopyWithZone: aZone]]; + [new setGroup: [group mutableCopyWithZone: aZone]]; + [new setParent: parent]; + [new setValuesAsCopy: [values mutableCopyWithZone: aZone]]; + [new setAttributesAsCopy: [attributes mutableCopyWithZone: aZone]]; + + return new; +} + @end diff --git a/SOPE/NGCards/CardGroup.h b/SOPE/NGCards/CardGroup.h index 6800f0769..1dfb6c7ef 100644 --- a/SOPE/NGCards/CardGroup.h +++ b/SOPE/NGCards/CardGroup.h @@ -29,7 +29,7 @@ @class NSMutableArray; @class NSString; -@interface CardGroup : CardElement +@interface CardGroup : CardElement { NSMutableArray *children; } diff --git a/SOPE/NGCards/CardGroup.m b/SOPE/NGCards/CardGroup.m index fc45e695e..330634964 100644 --- a/SOPE/NGCards/CardGroup.m +++ b/SOPE/NGCards/CardGroup.m @@ -159,29 +159,32 @@ static NGCardsSaxHandler *sax = nil; NSString *childTag; CardElement *newChild; - childTag = [aChild tag]; - newChild = nil; - mappedClass = [self classForTag: [childTag uppercaseString]]; - if (mappedClass) + if (aChild) { - if (![aChild isKindOfClass: mappedClass]) - { - NSLog (@"warning: new child to entity '%@': '%@' converted to '%@'", - tag, childTag, NSStringFromClass(mappedClass)); - if ([aChild isKindOfClass: [CardGroup class]]) - newChild = [(CardGroup *) aChild groupWithClass: mappedClass]; - else - newChild = [aChild elementWithClass: mappedClass]; - } - } -// else -// NSLog (@"warning: no mapped class for tag '%@'", -// childTag); + childTag = [aChild tag]; + newChild = nil; + mappedClass = [self classForTag: [childTag uppercaseString]]; + if (mappedClass) + { + if (![aChild isKindOfClass: mappedClass]) + { + NSLog (@"warning: new child to entity '%@': '%@' converted to '%@'", + tag, childTag, NSStringFromClass(mappedClass)); + if ([aChild isKindOfClass: [CardGroup class]]) + newChild = [(CardGroup *) aChild groupWithClass: mappedClass]; + else + newChild = [aChild elementWithClass: mappedClass]; + } + } + // else + // NSLog (@"warning: no mapped class for tag '%@'", + // childTag); - if (!newChild) - newChild = aChild; - [children addObject: newChild]; - [newChild setParent: self]; + if (!newChild) + newChild = aChild; + [children addObject: newChild]; + [newChild setParent: self]; + } } - (CardElement *) uniqueChildWithTag: (NSString *) aTag @@ -214,17 +217,20 @@ static NGCardsSaxHandler *sax = nil; NSString *childTag; NSEnumerator *existing; - childTag = [aChild tag]; - existing = [[self childrenWithTag: childTag] objectEnumerator]; - - currentChild = [existing nextObject]; - while (currentChild) + if (aChild) { - [children removeObject: currentChild]; - currentChild = [existing nextObject]; - } + childTag = [aChild tag]; + existing = [[self childrenWithTag: childTag] objectEnumerator]; - [self addChild: aChild]; + currentChild = [existing nextObject]; + while (currentChild) + { + [children removeObject: currentChild]; + currentChild = [existing nextObject]; + } + + [self addChild: aChild]; + } } - (CardElement *) firstChildWithTag: (NSString *) aTag; @@ -260,12 +266,8 @@ static NGCardsSaxHandler *sax = nil; NSEnumerator *newChildren; newChildren = [someChildren objectEnumerator]; - currentChild = [newChildren nextObject]; - while (currentChild) - { - [self addChild: currentChild]; - currentChild = [newChildren nextObject]; - } + while ((currentChild = [newChildren nextObject])) + [self addChild: currentChild]; } - (NSArray *) children @@ -343,9 +345,14 @@ static NGCardsSaxHandler *sax = nil; - (void) setChildrenAsCopy: (NSMutableArray *) someChildren { - [children release]; - children = someChildren; - [children retain]; + NSEnumerator *list; + CardElement *currentChild; + + ASSIGN (children, someChildren); + + list = [children objectEnumerator]; + while ((currentChild = [list nextObject])) + [currentChild setParent: self]; } - (void) addChildWithTag: (NSString *) aTag @@ -358,12 +365,8 @@ static NGCardsSaxHandler *sax = nil; newChild = [CardElement simpleElementWithTag: aTag value: aValue]; types = [someTypes objectEnumerator]; - type = [types nextObject]; - while (type) - { - [newChild addType: type]; - type = [types nextObject]; - } + while ((type = [types nextObject])) + [newChild addType: type]; [self addChild: newChild]; } @@ -400,6 +403,8 @@ static NGCardsSaxHandler *sax = nil; [children replaceObjectAtIndex: index withObject: newElement]; } +/* NSCopying */ + - (id) copyWithZone: (NSZone *) aZone { CardGroup *new; @@ -410,4 +415,16 @@ static NGCardsSaxHandler *sax = nil; return new; } +/* NSMutableCopying */ + +- (id) mutableCopyWithZone: (NSZone *) aZone +{ + CardGroup *new; + + new = [super mutableCopyWithZone: aZone]; + [new setChildrenAsCopy: [children mutableCopyWithZone: aZone]]; + + return new; +} + @end diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index ec0c0c542..f7d868350 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,16 @@ +2007-11-18 Wolfgang Sourdeau + + * CardGroup.m ([CardGroup -addChild:aChild]): don't process nil + values for aChild. + ([CardGroup -setUniqueChild:aChild]): same as above. + ([CardGroup -setChildrenAsCopy:someChildren]): reparent the copied + children. + ([CardGroup -mutableCopyWithZone:aZone]): implemented + NSMutableCopying protocol. + + * CardElement.m ([CardElement -mutableCopyWithZone:aZone]): + implemented NSMutableCopying protocol. + 2007-11-12 Wolfgang Sourdeau * iCalTimeZonePeriod.m ([iCalTimeZonePeriod