+/*
+ Copyright (C) 2005 Helge Hess
+
+ This file is part of SOPE.
+
+ SOPE is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with SOPE; see the file COPYING. If not, write to the
+ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+*/
+
+#include "NGVCardAddress.h"
+#include "common.h"
+
+@implementation NGVCardAddress
+
+- (void)dealloc {
+ [self->pobox release];
+ [self->extadd release];
+ [self->street release];
+ [self->locality release];
+ [self->region release];
+ [self->pcode release];
+ [self->country release];
+ [super dealloc];
+}
+
+/* accessors */
+
+- (NSString *)pobox {
+ return self->pobox;
+}
+- (NSString *)extadd {
+ return self->extadd;
+}
+- (NSString *)street {
+ return self->street;
+}
+- (NSString *)locality {
+ return self->locality;
+}
+- (NSString *)region {
+ return self->region;
+}
+- (NSString *)pcode {
+ return self->pcode;
+}
+- (NSString *)country {
+ return self->country;
+}
+
+/* fake being an array */
+
+- (id)objectAtIndex:(unsigned)_idx {
+ NSString *s;
+
+ switch (_idx) {
+ case 0: return (s = [self pobox]) ? s : (NSString *)[NSNull null];
+ case 1: return (s = [self extadd]) ? s : (NSString *)[NSNull null];
+ case 2: return (s = [self street]) ? s : (NSString *)[NSNull null];
+ case 3: return (s = [self locality]) ? s : (NSString *)[NSNull null];
+ case 4: return (s = [self region]) ? s : (NSString *)[NSNull null];
+ case 5: return (s = [self pcode]) ? s : (NSString *)[NSNull null];
+ case 6: return (s = [self country]) ? s : (NSString *)[NSNull null];
+ }
+
+ // TODO: throw exception
+ return nil;
+}
+- (unsigned)count {
+ return 7;
+}
+
+/* values */
+
+- (NSString *)stringValue {
+ return [self vCardString];
+}
+
+- (NSString *)xmlString {
+ NSMutableString *ms;
+ NSString *s;
+
+ ms = [[NSMutableString alloc] initWithCapacity:256];
+ [self appendXMLTag:@"pobox" value:[self pobox] to:ms];
+ [self appendXMLTag:@"extadd" value:[self extadd] to:ms];
+ [self appendXMLTag:@"street" value:[self street] to:ms];
+ [self appendXMLTag:@"locality" value:[self locality] to:ms];
+ [self appendXMLTag:@"region" value:[self region] to:ms];
+ [self appendXMLTag:@"pcode" value:[self pcode] to:ms];
+ [self appendXMLTag:@"country" value:[self country] to:ms];
+ s = [[ms copy] autorelease];
+ [ms release];
+ return s;
+}
+
+- (NSString *)vCardString {
+ NSMutableString *ms;
+ NSString *s;
+
+ ms = [[NSMutableString alloc] initWithCapacity:256];
+ [self appendVCardValue:[self pobox] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self extadd] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self street] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self locality] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self region] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self pcode] to:ms]; [ms appendString:@";"];
+ [self appendVCardValue:[self country] to:ms];
+ s = [[ms copy] autorelease];
+ [ms release];
+ return s;
+}
+
+- (NSDictionary *)asDictionary {
+ static NSString *keys[] = {
+ @"pobox", @"extadd", @"street", @"locality", @"region", @"pcode",
+ @"country", nil
+ };
+ id values[8];
+ unsigned i;
+
+ for (i = 0; i < [self count]; i++)
+ values[i] = [self objectAtIndex:i];
+
+ return [NSDictionary dictionaryWithObjects:values forKeys:keys
+ count:[self count]];
+}
+
+- (NSArray *)asArray {
+ id values[[self count] + 1];
+ unsigned i;
+
+ for (i = 0; i < [self count]; i++)
+ values[i] = [self objectAtIndex:i];
+
+ return [NSArray arrayWithObjects:values count:[self count]];
+}
+
+/* NSCoding */
+
+- (void)encodeWithCoder:(NSCoder *)_coder {
+ [super encodeWithCoder:_coder];
+
+ [_coder encodeObject:self->pobox];
+ [_coder encodeObject:self->extadd];
+ [_coder encodeObject:self->street];
+ [_coder encodeObject:self->locality];
+ [_coder encodeObject:self->region];
+ [_coder encodeObject:self->pcode];
+ [_coder encodeObject:self->country];
+}
+- (id)initWithCoder:(NSCoder *)_coder {
+ if ((self = [super initWithCoder:_coder]) != nil) {
+ self->pobox = [[_coder decodeObject] copy];
+ self->extadd = [[_coder decodeObject] copy];
+ self->street = [[_coder decodeObject] copy];
+ self->locality = [[_coder decodeObject] copy];
+ self->region = [[_coder decodeObject] copy];
+ self->pcode = [[_coder decodeObject] copy];
+ self->country = [[_coder decodeObject] copy];
+ }
+ return self;
+}
+
+@end /* NGVCardAddress */