Annotation of Examples/EnterpriseObjects/SHLExamples/DataSource/DataSource.m, revision 1.1.1.1

1.1       root        1: /*--------------------------------------------------------------------------
                      2:  *
                      3:  *     You may freely copy, distribute, and reuse the code in this example.
                      4:  *     SHL Systemhouse disclaims any warranty of any kind, expressed or  
                      5:  *     implied, as to its fitness for any particular use.
                      6:  *
                      7:  *
                      8:  *     DataSource
                      9:  *
                     10:  *     Inherits From:          NSObject
                     11:  *
                     12:  *     Conforms To:            EOQualifiedDataSources, EORollbackDataSources
                     13:  *
                     14:  *     Declared In:            DataSource.h
                     15:  *
                     16:  *
                     17:  *------------------------------------------------------------------------*/
                     18: #import "DataSource.h"
                     19: #import "Motorcycle.h"
                     20: #import <foundation/NSUtilities.h>
                     21: #import <appkit/Application.h>
                     22: 
                     23: #define print_trace [[NXApp delegate] perform: @selector (console:) with:\
                     24: [NSString stringWithFormat: @"DATASOURCE  %s\n", sel_getName(_cmd)]]
                     25: 
                     26: 
                     27: 
                     28: 
                     29: @implementation DataSource
                     30: 
                     31: /*--------------------------------------------------------------------------
                     32:  *     EODataSources Protocol
                     33:  *
                     34:  *  The EODataSources protocol defines the interface for a source of
                     35:  *  data-bearing objects retrieved from some external store, such as an RDBMS.
                     36:  *  EODataSources uses a simple insert/delete/update/fetch model.
                     37:  * 
                     38:  *  Changes to the objects provided by a data source are made in two phases.
                     39:  *  First, you can modify an object independently of the data source.  These
                     40:  *  changes don't affect the external store until you send an -insertObject:,
                     41:  *  -deleteObject:, or -updateObject: message.  For example, if you release an
                     42:  *  object you received from the data source, it isn't deleted from the
                     43:  *  external store.  Invoking one of the messages listed sends the changes
                     44:  *  associated with the object to the external store.  You must invoke
                     45:  *  -saveObjects to make your changes permanent.  If an external store supports
                     46:  *  rolling back of changes you can invoke -rollback (declared in the
                     47:  *  EORollbackDataSources protocol) to undo the changes made since the last
                     48:  *  -saveObjects message.
                     49:  *
                     50:  *------------------------------------------------------------------------*/
                     51: - (NSArray *) keys
                     52: {
                     53:     // Returns the names of the keys that describe the data-bearing objects.
                     54: 
                     55:        print_trace;
                     56:        return [NSArray arrayWithObject: @"Model"];
                     57: }
                     58: 
                     59: 
                     60: - createObject
                     61: {
                     62:     // Returns a new data bearing object with no values set, or nil if the
                     63:     // data source won't allow object insertion.  You're responsible for
                     64:     // assigning a proper primary key.
                     65: 
                     66:        print_trace;
                     67:        return [[Motorcycle alloc] init];
                     68: }
                     69: 
                     70: - coerceValue: value forKey: (NSString *)key
                     71: {
                     72:     return value;
                     73: }
                     74: 
                     75: - (BOOL) insertObject: object
                     76: {
                     77:     // Inserts object into the data source.  Returns YES on success, NO on
                     78:     // failure for any reason.
                     79: 
                     80:        print_trace;
                     81: 
                     82:        if ([object isKindOf: [Motorcycle class]] == NO)  return NO;
                     83: 
                     84:        if (workingStore == nil) 
                     85:                workingStore = [[NSMutableArray allocWithZone: [self zone]]
                     86:                         initWithCapacity: 1];
                     87: 
                     88:        [workingStore addObject: object];
                     89:        return YES;
                     90: }
                     91: 
                     92: 
                     93: - (BOOL) deleteObject: object
                     94: {
                     95:     // Deletes object from the data source.  Returns YES on success, NO on
                     96:     // failure for any reason.
                     97: 
                     98:        print_trace;
                     99: 
                    100:        if ([object isKindOf: [Motorcycle class]] == NO)  return NO;
                    101:        if (workingStore == nil)  return NO;
                    102:        
                    103:        [workingStore removeObject: object];
                    104:        return YES;
                    105: }
                    106: 
                    107: 
                    108: - (BOOL) updateObject: object
                    109: {
                    110:     // Saves changes to object to the data source.  Returns YES on success,
                    111:     // NO on failure for any reason.
                    112: 
                    113:        print_trace;
                    114:        return YES;
                    115: }
                    116: 
                    117: 
                    118: - (NSArray *) fetchObjects
                    119: {
                    120:     // Returns an array of the data-bearing objects in the data source.
                    121: 
                    122:        print_trace;
                    123:        return persistentStore;
                    124: }
                    125: 
                    126: 
                    127: - (BOOL) saveObjects
                    128: {
                    129:     // Saves objects to persistent storage, if needed.  Returns YES on
                    130:     // success, NO on failure for any reason.
                    131: 
                    132:        print_trace;
                    133: 
                    134:        if (persistentStore == nil) 
                    135:                persistentStore = [[NSMutableArray allocWithZone: [self zone]]
                    136:                         initWithCapacity: [workingStore count]];
                    137: 
                    138:        [persistentStore removeAllObjects];
                    139:        [persistentStore addObjectsFromArray: workingStore];
                    140:        return YES;
                    141: }
                    142: 
                    143: 
                    144: - (BOOL) canDelete
                    145: {
                    146:     // Returns YES if the data source allows objects to be deleted, NO if it
                    147:     // doesn't.
                    148: 
                    149:        print_trace;
                    150:        return YES;
                    151: }
                    152: 
                    153: 
                    154: /*--------------------------------------------------------------------------
                    155:  *     EOQualifiedDataSources Protocol
                    156:  *
                    157:  *  The EOQualifiedDataSources protocol decalres methods that must be
                    158:  *  implemented by data sources that provide sub data sources rooted in the
                    159:  *  super data source.
                    160:  *
                    161:  *------------------------------------------------------------------------*/
                    162: - (NSArray *) keysForPath: (NSString *)aPath
                    163: {
                    164:     // The path supplied is a concatenation of all the keys used to get to
                    165:     // a detail datasource with each key separated by a '.'; for example,
                    166:     // "toAuthor.toPublisher.address".
                    167:     
                    168:        print_trace;
                    169:        return nil;
                    170: }
                    171: 
                    172: 
                    173: - (id <EODataSources>) dataSourceQualifiedByKey:(NSString *)key ofObject:object
                    174: {
                    175:     // Returns a data source that supplies objects associated with object's
                    176:     // key. This can be used for creating master-detail data sources.
                    177: 
                    178:        print_trace;
                    179:        return nil;
                    180: }
                    181: 
                    182: 
                    183: /*--------------------------------------------------------------------------
                    184:  *     EORollbackDataSources Protocol
                    185:  *------------------------------------------------------------------------*/
                    186: - (void) rollback
                    187: {
                    188:     // Reverses any changes made by -insertObject:, -deleteObject:, or
                    189:     // -updateObject: since the data source was last sent a -saveObjects
                    190:     // message.
                    191: 
                    192:        print_trace;
                    193:        [workingStore removeAllObjects];
                    194:        [workingStore addObjectsFromArray: persistentStore];
                    195: }
                    196: 
                    197: 
                    198: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.