|
|
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: * DatabaseLevel
9: *
10: * Inherits From: NSObject
11: *
12: * Conforms To: None
13: *
14: * Declared In: DatabaseLevel.h
15: *
16: *------------------------------------------------------------------------*/
17: #import "DatabaseLevel.h"
18: #import "ScrollViewExtensions.h"
19: #import <eoaccess/eoaccess.h>
20: #import <appkit/appkit.h>
21:
22:
23:
24: @implementation DatabaseLevel
25:
26: - connect: sender
27: {
28: id path;
29: id adaptor;
30:
31: [messageConsole clear: nil];
32: [messageConsole sprintf: "connecting to database...\n"];
33:
34: [messageConsole sprintf: "obtaining model path...\n"];
35: if ((path = [EOModel findPathForModelNamed:
36: [NSString stringWithCString:"Authors"]]) == nil)
37: {
38: NXRunAlertPanel (NULL, "Unable to obtain model path",
39: NULL, NULL, NULL);
40: [messageConsole sprintf: "unable to obtain model path\n"];
41: return nil;
42: }
43:
44: [modelPath setStringValue: [path cString]];
45:
46: [messageConsole sprintf: "initializing model...\n"];
47: if ((model = [[EOModel alloc] initWithContentsOfFile:path]) == nil)
48: {
49: NXRunAlertPanel (NULL, "Unable to initialize model", NULL, NULL, NULL);
50: [messageConsole sprintf: "unable to initialize model\n"];
51: return nil;
52: }
53:
54: [messageConsole sprintf: "creating database...\n"];
55: if ((database = [[EODatabase alloc] initWithModel:model]) == nil)
56: {
57: NXRunAlertPanel (NULL, "Unable to create database", NULL, NULL, NULL);
58: [messageConsole sprintf: "unable to create database\n"];
59: return nil;
60: }
61:
62: [messageConsole sprintf: "creating context...\n"];
63: if ((context = [[EODatabaseContext alloc]
64: initWithDatabase:database]) == nil)
65: {
66: NXRunAlertPanel (NULL, "Unable to create context", NULL, NULL, NULL);
67: [messageConsole sprintf: "unable to create context\n"];
68: return nil;
69: }
70:
71: [messageConsole sprintf: "creating channel...\n"];
72: if ((channel = [[EODatabaseChannel alloc]
73: initWithDatabaseContext:context]) == nil)
74: {
75: NXRunAlertPanel (NULL, "Unable to create channel", NULL, NULL, NULL);
76: [messageConsole sprintf: "unable to create channel\n"];
77: return nil;
78: }
79:
80: // Bring up a login panel and get the valid connection dictionary
81: adaptor = [database adaptor];
82: if(![adaptor runLoginPanelAndValidateConnectionDictionary]) {
83: [messageConsole sprintf: "invalid login\n"];
84: return nil;
85: }
86: else {
87: [adaptor setConnectionDictionary: [adaptor connectionDictionary]];
88: [messageConsole sprintf: "opening channel...\n"];
89: if ([channel openChannel] == NO)
90: {
91: NXRunAlertPanel (NULL, "Unable to open channel",
92: NULL, NULL, NULL);
93: [messageConsole sprintf: "unable to open channel\n"];
94: return nil;
95: }
96: }
97: [messageConsole sprintf:"channel %s open\n\n",
98: [channel isOpen] ? "is" : "is not"];
99: [connectButton setEnabled: ! [channel isOpen]];
100: [selectButton setEnabled: [channel isOpen]];
101: return self;
102: }
103:
104:
105: - select: sender
106: {
107: int count = 0;
108: id entity, qualifier, object;
109:
110: [resultConsole clear: nil];
111: [messageConsole sprintf: "beginning transaction...\n"];
112:
113: if ([context beginTransaction] == NO)
114: {
115: NXRunAlertPanel (NULL, "Unable to begin transaction",
116: NULL, NULL, NULL);
117: [messageConsole sprintf: "unable to begin transaction\n"];
118: return nil;
119: }
120:
121: [messageConsole sprintf: "obtaining entity...\n"];
122: if ((entity = [model entityNamed: @"authors"]) == nil)
123: {
124: NXRunAlertPanel (NULL, "Unable to obtain entity authors",
125: NULL, NULL, NULL);
126: [messageConsole sprintf: "unable to obtain entity authors\n"];
127: return nil;
128: }
129:
130: [messageConsole sprintf: "obtaining qualifier...\n"];
131: if ((qualifier = [entity qualifier]) == nil)
132: {
133: NXRunAlertPanel (NULL, "Unable to obtain qualifier",
134: NULL, NULL, NULL);
135: [messageConsole sprintf: "unable to obtain qualifier\n"];
136: return nil;
137: }
138:
139: [messageConsole sprintf: "selecting objects...\n"];
140: if ([channel selectObjectsDescribedByQualifier:qualifier
141: fetchOrder:nil] == NO)
142: {
143: NXRunAlertPanel (NULL, "Unable to select objects",
144: NULL, NULL, NULL);
145: [messageConsole sprintf: "unable to select objects\n"];
146: return nil;
147: }
148:
149: while ((object = [channel fetchWithZone:[(EODatabase*)database zone]]) != nil)
150: {
151: [resultConsole sprintf: "%s\n",
152: [[(NSString*)object description] cString]];
153: count++;
154: }
155:
156: [messageConsole sprintf: "\n%d records found\n\n", count];
157:
158: [messageConsole sprintf: "rolling back transaction...\n"];
159: if ([context rollbackTransaction] == NO)
160: {
161: NXRunAlertPanel (NULL, "Unable to rollback transaction",
162: NULL, NULL, NULL);
163: [messageConsole sprintf: "unable to rollback transaction\n"];
164: return nil;
165: }
166:
167: [messageConsole sprintf: "done\n\n"];
168: return self;
169: }
170:
171:
172: @end
173:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.