|
|
1.1 root 1: /* Owner.m
2: *
3: * You may freely copy, distribute, and reuse the code in this example.
4: * NeXT disclaims any warranty of any kind, expressed or implied, as to its
5: * fitness for any particular use.
6: *
7: *
8: *
9: * Written by: Mai Nguyen, NeXT Developer Support
10: */
11:
12:
13: #import <eointerface/eointerface.h>
14: #import "Owner.h"
15: #import "Author.h"
16:
17: #define ARCHIVE_FILE "ObjectArchive"
18:
19: @implementation Owner
20:
21:
22: - appDidInit:sender
23: {
24: EOAdaptorChannel *adaptorChannel;
25:
26: /* set up the adaptor channel for debugging */
27: adaptorChannel = [[dataSource databaseChannel] adaptorChannel];
28: [(EOAdaptorChannel *)adaptorChannel setDelegate: self];
29: return self;
30: }
31:
32:
33: - (void)adaptorChannel:channel didEvaluateExpression:(NSString *)expression
34: {
35: NSLog (expression);
36: }
37:
38: /* Archive the first object in the array of selected objects.
39: * In this example, only one object is selected at a time.
40: */
41: - writeObject:sender
42: {
43: eoArray = [controller selectedObjects];
44: // Archive the first object in the array of selected objects.
45: // In this example, only one object is selected at a time.
46: if ([eoArray count] == 0) {
47: NXRunAlertPanel(NULL, "No object to archive!", NULL, NULL, NULL);
48: return self;
49: }
50:
51: eoAuthor = [eoArray objectAtIndex:0];
52: [self archiveThisObject:eoAuthor];
53:
54: return self;
55: }
56:
57: - readObject:sender
58: {
59: eoAuthor = (Author *)[self unarchiveObject];
60: return self;
61: }
62:
63:
64: - (BOOL) archiveThisObject:(Object *)object
65: {
66: NXTypedStream *stream;
67: char archivePath[MAXPATHLEN+1];
68: BOOL b = YES;
69:
70: if (!object)
71: return NO;
72:
73: NS_DURING
74:
75: sprintf(archivePath, "%s/%s", [[self applicationPath] cString], ARCHIVE_FILE);
76: stream = NXOpenTypedStreamForFile(archivePath, NX_WRITEONLY);
77: NXWriteRootObject(stream, object);
78: NXCloseTypedStream(stream);
79:
80: NS_HANDLER
81:
82: [textObject appendText:"Object archiving failed\n"];
83: b = NO;
84:
85: NS_ENDHANDLER
86:
87: if (b == YES)
88: [textObject appendText:"Object archiving succeeded\n"];
89:
90: return b;
91: }
92:
93: -(Object *)unarchiveObject
94: {
95: NXTypedStream *stream;
96: Object *object;
97: char archivePath[MAXPATHLEN+1];
98: char buf[1024];
99:
100:
101: sprintf(archivePath, "%s/%s", [[self applicationPath] cString], ARCHIVE_FILE);
102: stream = NXOpenTypedStreamForFile(archivePath, NX_READONLY);
103: if (!stream) {
104: object = nil;
105: [textObject appendText:"Object unarchiving failed\n"];
106: return object;
107: }
108:
109: object = NXReadObject(stream);
110:
111: NXCloseTypedStream(stream);
112: [textObject appendText:"Object unarchiving succeeded\n"];
113: sprintf(buf, "%s\n",[[(Author *)object description] cString]);
114: [textObject appendText: "Author contents:"];
115: [textObject appendText:buf];
116:
117: return [object autorelease];
118: }
119:
120: - (NSString *)applicationPath
121: {
122: int i;
123: NSString *appPathName = nil;
124:
125: for (i = strlen(NXArgv[0]) - 1; (i >= 0) && (NXArgv[0][i] != '/'); i--);
126: appPathName = [NSString stringWithCString:NXArgv[0] length:i];
127: if (NXArgv[0][0] != '/') {
128: char path[MAXPATHLEN+1];
129: appPathName = [NSString stringWithFormat:@"%s/%@", getwd(path), appPathName];
130: }
131: return appPathName;
132: }
133:
134: @end
135:
136:
137: @implementation Text(printResults)
138:
139: - appendText:(const char *)newText
140: {
141: int currentLength = [self textLength];
142:
143: [self setSel:currentLength :currentLength];
144: [self replaceSel:newText];
145: [self scrollSelToVisible];
146: return self;
147: }
148:
149: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.