f18c764ffa
Monotone-Revision: 9054022ef1ca8aeba6e34842d27d9b94ce002b89 Monotone-Author: dev-unix.inverse.qc.ca Monotone-Date: 2006-06-15T19:34:10 Monotone-Branch: ca.inverse.sogo
89 lines
1.7 KiB
Objective-C
89 lines
1.7 KiB
Objective-C
// $Id: DDatabaseManager.m 46 2004-06-17 01:23:37Z helge $
|
|
|
|
#include <NGObjWeb/SoComponent.h>
|
|
|
|
@class EOAdaptorChannel;
|
|
|
|
@interface DDatabaseManager : SoComponent
|
|
{
|
|
EOAdaptorChannel *channel;
|
|
NSArray *databaseNames;
|
|
id item;
|
|
}
|
|
|
|
@end
|
|
|
|
#include "DSoHost.h"
|
|
#include "DSoDatabaseManager.h"
|
|
#include "common.h"
|
|
|
|
@interface EOAdaptorChannel(ModelFetching)
|
|
- (NSArray *)describeDatabaseNames;
|
|
@end
|
|
|
|
@implementation DDatabaseManager
|
|
|
|
- (void)dealloc {
|
|
if ([self->channel isOpen])
|
|
[self->channel closeChannel];
|
|
[self->channel release];
|
|
|
|
[self->databaseNames release];
|
|
[self->item release];
|
|
[super dealloc];
|
|
}
|
|
|
|
/* notifications */
|
|
|
|
- (void)sleep {
|
|
if ([self->channel isOpen])
|
|
[self->channel closeChannel];
|
|
|
|
[super sleep];
|
|
}
|
|
|
|
/* DB things */
|
|
|
|
- (EOAdaptor *)adaptor {
|
|
return [[(DSoDatabaseManager *)[self clientObject]
|
|
host] adaptorInContext:[self context]];
|
|
}
|
|
|
|
- (EOAdaptorChannel *)channel {
|
|
EOAdaptorContext *ctx;
|
|
|
|
if (self->channel)
|
|
return self->channel;
|
|
|
|
ctx = [[self adaptor] createAdaptorContext];
|
|
self->channel = [[ctx createAdaptorChannel] retain];
|
|
if (![self->channel openChannel]) {
|
|
[self->channel release];
|
|
self->channel = nil;
|
|
}
|
|
|
|
return self->channel;
|
|
}
|
|
|
|
/* accessors */
|
|
|
|
- (void)setItem:(id)_item {
|
|
ASSIGN(self->item, _item);
|
|
}
|
|
- (id)item {
|
|
return self->item;
|
|
}
|
|
|
|
- (NSArray *)databaseNames {
|
|
if (self->databaseNames == nil)
|
|
self->databaseNames = [[[self channel] describeDatabaseNames] copy];
|
|
return self->databaseNames;
|
|
}
|
|
|
|
- (NSString *)dbLink {
|
|
// this suxx, a) we need to write code, b) we need to attach the / manually
|
|
return [[self item] stringByAppendingString:@"/"];
|
|
}
|
|
|
|
@end /* DDatabaseManager */
|