2 Copyright (C) 2000-2004 SKYRIX Software AG
4 This file is part of OpenGroupware.org.
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "NGMimeHeaderFieldGenerator.h"
24 #include "NGMimeHeaderFields.h"
25 #include "NGMimePartParser.h"
28 @implementation NGMimeHeaderFieldGeneratorSet
34 static NGMimeHeaderFieldGeneratorSet *rfc822Set = nil;
36 + (id)headerFieldGenerator {
37 return [[[self alloc] init] autorelease];
40 + (id)headerFieldGeneratorSet {
41 return [[[self alloc] init] autorelease];
44 + (id)defaultRfc822HeaderFieldGeneratorSet {
45 static NGMimeHeaderNames *Fields = NULL;
49 Fields = (NGMimeHeaderNames *)[NGMimePartParser headerFieldNames];
54 rfc822Set = [[self alloc] init];
56 gen = [NGMimeContentDispositionHeaderFieldGenerator headerFieldGenerator];
58 [rfc822Set setGenerator:gen forField:Fields->contentDisposition];
60 if ((gen = [NGMimeContentLengthHeaderFieldGenerator headerFieldGenerator]))
61 [rfc822Set setGenerator:gen forField:Fields->contentLength];
62 if ((gen = [NGMimeContentTypeHeaderFieldGenerator headerFieldGenerator]))
63 [rfc822Set setGenerator:gen forField:Fields->contentType];
64 if ((gen = [NGMimeRFC822DateHeaderFieldGenerator headerFieldGenerator]))
65 [rfc822Set setGenerator:gen forField:Fields->date];
67 if ((gen = [NGMimeAddressHeaderFieldGenerator headerFieldGenerator])) {
68 [rfc822Set setGenerator:gen forField:@"resent-from"];
69 [rfc822Set setGenerator:gen forField:@"resent-to"];
70 [rfc822Set setGenerator:gen forField:Fields->to];
71 [rfc822Set setGenerator:gen forField:Fields->cc];
72 [rfc822Set setGenerator:gen forField:@"bcc"];
73 [rfc822Set setGenerator:gen forField:Fields->from];
76 if ((gen = [NGMimeStringHeaderFieldGenerator headerFieldGenerator]))
77 [rfc822Set setDefaultGenerator:gen];
83 return [self initWithDefaultGenerator:nil];
86 - (id)initWithDefaultGenerator:(id<NGMimeHeaderFieldGenerator>)_gen {
87 if ((self = [super init])) {
88 self->fieldNameToGenerate =
89 [[NSMutableDictionary allocWithZone:[self zone]]
91 self->defaultGenerator = [_gen retain];
97 [self->fieldNameToGenerate release];
98 [self->defaultGenerator release];
104 - (void)setGenerator:(id<NGMimeHeaderFieldGenerator>)_gen
105 forField:(NSString *)_name
107 [self->fieldNameToGenerate setObject:_gen forKey:_name];
110 - (void)setDefaultGenerator:(id<NGMimeHeaderFieldGenerator>)_gen {
111 ASSIGN(self->defaultGenerator, _gen);
114 - (id<NGMimeHeaderFieldGenerator>)_gen {
115 return self->defaultGenerator;
120 - (NSData *)generateDataForHeaderFieldNamed:(NSString *)_headerField
123 NGMimeHeaderFieldGenerator *gen = nil;
125 if ((gen = [self->fieldNameToGenerate objectForKey:_headerField]) == nil)
126 gen = (NGMimeHeaderFieldGenerator *)self->defaultGenerator;
129 NSLog(@"WARNING(%s): no defaultGenerator is set", __PRETTY_FUNCTION__);
130 return [NSData data];
132 return [gen generateDataForHeaderFieldNamed:_headerField
136 @end /* NGMimeHeaderFieldGeneratorSet */