File: eoexample2.m

package info (click to toggle)
gnustep-dl2 0.12.0%2Bgit20250112-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,092 kB
  • sloc: objc: 68,223; makefile: 60; sh: 48
file content (74 lines) | stat: -rw-r--r-- 2,125 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <Foundation/Foundation.h>
#include <EOAccess/EOAccess.h>
#include <EOControl/EOControl.h>

int
main(int arcg, char *argv[], char **envp)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  EOModelGroup *group = [EOModelGroup defaultGroup];
  EOModel *model;
  EOAdaptor *adaptor;
  EOAdaptorContext *context;
  EOAdaptorChannel *channel; 
  EOEditingContext *ec;
  EODatabaseDataSource *authorsDS;
  EODataSource *booksDS;
  id author;
  id book;

  model = [group modelNamed:@"library"];
  
  /* Tools do not have resources so we add the model manually.  */ 
  if (!model)
    {
      NSString *path = @"./library.eomodel";
      model = [[EOModel alloc] initWithContentsOfFile: path];
      [group addModel:model];
      [model release];
    }

  adaptor = [EOAdaptor adaptorWithModel:model];
  context = [adaptor createAdaptorContext];
  channel = [context createAdaptorChannel];
  ec = [[EOEditingContext alloc] init];
  authorsDS 
    = [[EODatabaseDataSource alloc] initWithEditingContext: ec
				    entityName:@"authors"];

  [channel openChannel];

  author = [authorsDS createObject];
  [author takeValue:@"Richard Brautigan" forKey:@"name"];
  [authorsDS insertObject:author];
  
  booksDS = [authorsDS dataSourceQualifiedByKey:@"toBooks"];
  [booksDS qualifyWithRelationshipKey:@"toBooks" ofObject:author];

  book = [booksDS createObject];
  [book takeValue:@"The Hawkline Monster" forKey:@"title"];
  [booksDS insertObject:book];
  
  book = [booksDS createObject];
  [book takeValue:@"Trout Fishing in America" forKey:@"title"];
  [booksDS insertObject:book];

  [ec saveChanges];

  /* log the to many relationship from author to books */
  NSLog(@"%@ %@", 
	[author valueForKey:@"name"],
	[author valueForKeyPath:@"toBooks.title"]);
  
  /* log the to one relationship from book to author */
  NSLog(@"%@", [book valueForKeyPath:@"toAuthor.name"]);
  
  /* traverse to one through the to many through key paths
     logging the author once for each book. */
  NSLog(@"%@", [author valueForKeyPath:@"toBooks.toAuthor.name"]);

  [channel closeChannel];
  [pool release];
  return 0;
}