home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / EODEV.Z / FlatFileAdaptor.m < prev    next >
Encoding:
Text File  |  1996-08-23  |  3.5 KB  |  143 lines

  1. /*
  2.         Copyright (c) 1996, NeXT Software, Inc.
  3.         All rights reserved.
  4.  
  5.         You may freely copy, distribute and reuse the code in this example.
  6.         NeXT disclaims any warranty of any kind, expressed or implied,
  7.         as to its fitness for any particular use.
  8. */
  9. #import "FlatFileAdaptor.h"
  10. #import "FlatFileContext.h"
  11. #import "FlatFileChannel.h"
  12. #import "FlatFileSQLExpression.h"
  13.  
  14. @implementation FlatFileAdaptor
  15.  
  16. + (NSString *)defaultRowSeparator
  17. {
  18.     return @"\n";
  19. }
  20.  
  21. + (NSString *)defaultColumnSeparator
  22. {
  23.     return @",";
  24. }
  25.  
  26. + (NSString *)columnHeaderSeparator
  27. {
  28.     return @":";
  29. }
  30.  
  31. + (NSDictionary *)defaultConnectionDictionary
  32. {
  33.     static NSDictionary *dict = nil;
  34.  
  35.     if (!dict)
  36.         dict = [[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), FlatFilePathKey, [self defaultRowSeparator], FlatFileRowSeparatorKey, [self defaultColumnSeparator], FlatFileColumnSeparatorKey, @"Y", FlatFileUseHeadersKey, nil] retain];
  37.  
  38.     return dict;
  39. }
  40.  
  41. static NSString *externalTypeNames[] = { @"Number", @"String", @"Data", @"Date", nil };
  42.  
  43. static NSString *internalTypeNames[] = { @"NSDecimalNumber", @"NSString", @"NSData", @"NSCalendarDate", nil };
  44.  
  45. + (NSDictionary *)externalToInternalTypeMap
  46. {
  47.     static NSDictionary *externalToInternalTypeMap = nil;
  48.  
  49.     if (!externalToInternalTypeMap) {
  50.         int i;
  51.         for (i = 0; externalTypeNames[i]; i++);
  52.         externalToInternalTypeMap = [[NSDictionary dictionaryWithObjects:internalTypeNames forKeys:externalTypeNames count:i] retain];
  53.     }
  54.  
  55.     return externalToInternalTypeMap;
  56. }
  57.  
  58. + (NSString *)internalTypeForExternalType:(NSString *)extType model:(EOModel *)model
  59. {
  60.     return [[self externalToInternalTypeMap] objectForKey:extType];
  61. }
  62.  
  63. + (NSArray *)externalTypesWithModel:(EOModel *)model
  64. {
  65.     return [[self externalToInternalTypeMap] allKeys];
  66. }
  67.  
  68. + (NSString *)defaultExternalType
  69. {
  70.     return externalTypeNames[1];
  71. }
  72.  
  73. + (void)assignExternalInfoForAttribute:(EOAttribute *)attribute
  74. {
  75.     [attribute setExternalType:externalTypeNames[[attribute adaptorValueType]]];
  76. }
  77.  
  78. + (void)assignExternalInfoForEntity:(EOEntity *)entity
  79. {
  80.     NSEnumerator *attributeEnumerator = [[entity attributes] objectEnumerator];
  81.     EOAttribute *attribute;
  82.  
  83.     while (attribute = [attributeEnumerator nextObject])
  84.         [self assignExternalInfoForAttribute:attribute];
  85. }
  86.  
  87. + (void)assignExternalInfoForEntireModel:(EOModel *)model
  88. {
  89.     NSEnumerator *entityEnumerator = [[model entities] objectEnumerator];
  90.     EOEntity *entity;
  91.  
  92.     while (entity = [entityEnumerator nextObject])
  93.         [self assignExternalInfoForEntity:entity];
  94. }
  95.  
  96. - initWithName:(NSString *)name
  97. {
  98.     [super initWithName:name];
  99.     [self setConnectionDictionary:[[self class] defaultConnectionDictionary]];
  100.  
  101.     return self;
  102. }
  103.     
  104. - createAdaptorContext
  105. {
  106.     return [[[FlatFileContext alloc] initWithFlatFileAdaptor:self] autorelease];
  107. }
  108.  
  109. - (Class)expressionClass
  110. {
  111.     return [FlatFileSQLExpression class];
  112. }
  113.  
  114. - (BOOL)isValidQualifierType:(NSString *)typeName model:(EOModel *)model
  115. {
  116.     return ![typeName isEqualToString:@"Data"];
  117. }
  118.  
  119. - (void)assertConnectionDictionaryIsValid
  120. {
  121.     NSException *exception = nil;
  122.     EOAdaptorContext *adaptorContext;
  123.     EOAdaptorChannel *adaptorChannel;
  124.  
  125.     if ([self hasOpenChannels])
  126.         return;
  127.  
  128.     adaptorContext = [self createAdaptorContext];
  129.     adaptorChannel = [adaptorContext createAdaptorChannel];
  130.     NS_DURING
  131.         [adaptorChannel openChannel];
  132.     NS_HANDLER
  133.         exception = localException;
  134.     NS_ENDHANDLER
  135.  
  136.     [adaptorChannel closeChannel];
  137.  
  138.     if (exception)
  139.         [exception raise];
  140. }
  141.  
  142. @end
  143.