5 // Created by Marc Liyanage on Sun Mar 03 2002.
6 // Copyright (c) 2001 __MyCompanyName__. All rights reserved.
12 @implementation Workset
15 [Workset setKeys:[NSArray arrayWithObject:@"xmlCode"] triggerChangeNotificationsForDependentKey:@"hasXmlCode"];
16 [Workset setKeys:[NSArray arrayWithObject:@"xsltCode"] triggerChangeNotificationsForDependentKey:@"hasXsltCode"];
17 [Workset setKeys:[NSArray arrayWithObject:@"result"] triggerChangeNotificationsForDependentKey:@"hasResult"];
18 [Workset setKeys:[NSArray arrayWithObject:@"resultFilename"] triggerChangeNotificationsForDependentKey:@"hasResultFilename"];
19 [Workset setKeys:[NSArray arrayWithObject:@"xmlFilename"] triggerChangeNotificationsForDependentKey:@"hasXmlFilename"];
20 [Workset setKeys:[NSArray arrayWithObject:@"xsltFilename"] triggerChangeNotificationsForDependentKey:@"hasXsltFilename"];
22 [Workset setKeys:[NSArray arrayWithObject:@"result"] triggerChangeNotificationsForDependentKey:@"stringResult"];
31 if (!self) return nil;
33 id defaults = [NSUserDefaults standardUserDefaults];
35 [self setValue:[defaults stringForKey:@"templateXML"] forKey:@"xmlCode"];
36 [self setValue:[defaults stringForKey:@"templateXSLT"] forKey:@"xsltCode"];
38 [self setValue:nil forKey:@"resultFilename"];
40 result = [[NSData alloc] init];
41 parameterSet = [[ParameterSet alloc] init];
48 - (NSArray *)coderKeys {
49 return [NSArray arrayWithObjects:
61 - (id)initWithCoder:(NSCoder *)coder {
63 if (self = [super init]) {
64 NSEnumerator *keys = [[self coderKeys] objectEnumerator];
66 while (key = [keys nextObject]) {
67 [self setValue:[coder decodeObjectForKey:key] forKey:key];
75 - (void)encodeWithCoder:(NSCoder *)coder {
77 NSEnumerator *keys = [[self coderKeys] objectEnumerator];
79 while (key = [keys nextObject]) {
80 [coder encodeObject:[self valueForKey:key] forKey:key];
91 [parameterSet release];
96 // NSLog(@"Workset dealloc");
101 - (BOOL)hasXmlFilename {
102 return xmlFilename != nil;
107 if (![self hasXmlFilename]) {
111 [[XMLUtils getDataWithEncodingFromString:xmlCode] writeToFile:xmlFilename atomically:NO];
112 [self updateXmlFileModificationDate];
118 - (BOOL)xmlModifiedExternally {
120 NSDictionary *fileAttr;
122 if (![self hasXmlFilename]) {
126 fileAttr = [[NSFileManager defaultManager] fileAttributesAtPath:xmlFilename traverseLink:YES];
128 if (fileAttr == nil || xmlFileModificationDate == nil) {
132 if (![xmlFileModificationDate isEqualToDate:[fileAttr objectForKey:NSFileModificationDate]]) {
140 - (void)updateXmlFileModificationDate {
142 NSDictionary *fileAttr;
144 if ([self hasXmlFilename]) {
145 fileAttr = [[NSFileManager defaultManager] fileAttributesAtPath:xmlFilename traverseLink:YES];
146 [xmlFileModificationDate release];
147 xmlFileModificationDate = [fileAttr objectForKey:NSFileModificationDate];
148 [xmlFileModificationDate retain];
149 // NSLog(@"xml file mod date: %@", xmlFileModificationDate);
154 - (void)reloadXmlFromFile {
155 [self setValue:[XMLUtils getStringWithEncodingFromFile:xmlFilename] forKey:@"xmlCode"];
156 [self updateXmlFileModificationDate];
163 - (int)resultEncoding {
164 return resultEncoding;
167 - (void)setResultEncoding:(NSStringEncoding)newencoding {
168 resultEncoding = newencoding;
173 - (BOOL)hasXsltFilename {
174 return xsltFilename != nil;
179 if (![self hasXsltFilename]) {
183 [[XMLUtils getDataWithEncodingFromString:xsltCode] writeToFile:xsltFilename atomically:NO];
184 [self updateXsltFileModificationDate];
190 - (BOOL)xsltModifiedExternally {
192 NSDictionary *fileAttr;
194 if (![self hasXsltFilename]) {
198 fileAttr = [[NSFileManager defaultManager] fileAttributesAtPath:xsltFilename traverseLink:YES];
200 if (fileAttr == nil || xsltFileModificationDate == nil) {
204 if (![xsltFileModificationDate isEqualToDate:[fileAttr objectForKey:NSFileModificationDate]]) {
212 - (void)updateXsltFileModificationDate {
214 NSDictionary *fileAttr;
216 if ([self hasXsltFilename]) {
217 fileAttr = [[NSFileManager defaultManager] fileAttributesAtPath:xsltFilename traverseLink:YES];
218 [xsltFileModificationDate release];
219 xsltFileModificationDate = [fileAttr objectForKey:NSFileModificationDate];
220 [xsltFileModificationDate retain];
221 // NSLog(@"xslt file mod date: %@", xsltFileModificationDate);
225 - (void)reloadXsltFromFile {
226 [self setValue:[XMLUtils getStringWithEncodingFromFile:xsltFilename] forKey:@"xsltCode"];
227 [self updateXsltFileModificationDate];
231 - (BOOL)hasResultFilename {
232 return resultFilename != nil;
236 - (NSString *)stringResult {
237 return [[[NSString alloc] initWithData:result encoding:[self resultEncoding]] autorelease];
242 if (![self hasResultFilename]) {
243 NSLog(@"saveResult called but no filename is available");
246 [result writeToFile:resultFilename atomically:NO];
251 return ([xmlCode length] > 0);
254 - (BOOL)hasXsltCode {
255 return ([xsltCode length] > 0);
259 return ([result length] > 0);
262 - (BOOL)hasParameters {
263 return ([parameterSet count] > 0);