mirror of
https://github.com/gnustep/libs-gdl2.git
synced 2025-02-21 10:30:58 +00:00
* Examples: ... here. * Examples/GNUmakefile: Adapt to new location. * Documentation/GDL2Intro/GNUmakefile: Remove subproject. * Documentation/GDL2Intro/GDL2Intro.texi: Update references to new location. * Trading: Move to ... * Examples/Trading: ... here. * Examples/Trading/GNUmakefile: Adapte to new location. * Examples/GNUmakefile: Add Trading. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@27918 72102866-910b-0410-8b05-ffd578937521
247 lines
5.4 KiB
Objective-C
247 lines
5.4 KiB
Objective-C
#include "Trading.h"
|
|
|
|
/* Convience class for working with models supporting multiple adaptors */
|
|
|
|
@implementation Trading : NSObject
|
|
|
|
+ (EOModel *) defaultModel
|
|
{
|
|
EOModelGroup *globalGrp = [EOModelGroup globalModelGroup];
|
|
EOModel *model = [[EOModelGroup globalModelGroup] modelNamed:@"Trading"];
|
|
|
|
/*
|
|
* globalModelGroup doesn't currently work with non-framework native-libs
|
|
*/
|
|
if (!model)
|
|
{
|
|
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
|
|
NSString *modelPath = [bundle pathForResource:@"Trading"
|
|
ofType:@"eomodeld"];
|
|
[globalGrp addModelWithFile:modelPath];
|
|
model = [globalGrp modelNamed:@"Trading"];
|
|
}
|
|
|
|
return model;
|
|
}
|
|
|
|
/* calls initWithModel: with the default model */
|
|
- (id) init
|
|
{
|
|
return [self initWithModel:[[self class] defaultModel]];
|
|
}
|
|
|
|
- (BOOL) hasAdaptorNamed:(NSString *)adaptorName;
|
|
{
|
|
NSArray *adaptorNames;
|
|
|
|
if (adaptorName == nil)
|
|
return NO;
|
|
|
|
adaptorNames = [EOAdaptor availableAdaptorNames];
|
|
|
|
return [adaptorNames containsObject:adaptorName];
|
|
}
|
|
/* calls initWithModel:adaptorName:
|
|
* looking for an adaptor name in the following order:
|
|
* first it looks at the TEST_ADAPTOR environment variable
|
|
* then it looks for the GDL2TestAdaptor key
|
|
* then it looks for the models -adaptorName.
|
|
* finally if all else fails, it uses the first adaptor in the
|
|
* +availableAdaptorNames array.
|
|
*/
|
|
- (id) initWithModel:(EOModel *)model
|
|
{
|
|
NSArray *adaptorNames;
|
|
NSString *adaptorName;
|
|
BOOL flag;
|
|
|
|
adaptorNames = [EOAdaptor availableAdaptorNames];
|
|
|
|
adaptorName = [[[NSProcessInfo processInfo] environment]
|
|
objectForKey:@"TEST_ADAPTOR"];
|
|
|
|
if (flag == NO && ((flag = [self hasAdaptorNamed:adaptorName]) == NO))
|
|
adaptorName = [[NSUserDefaults standardUserDefaults]
|
|
stringForKey:@"GDL2TestAdaptorName"];
|
|
|
|
if (flag == NO && ((flag = [self hasAdaptorNamed:adaptorName]) == NO))
|
|
{
|
|
adaptorName = [model adaptorName];
|
|
}
|
|
if (flag == NO && ((flag = [self hasAdaptorNamed:adaptorName]) == NO))
|
|
{
|
|
adaptorName = [adaptorNames count] ? [adaptorNames objectAtIndex:0]
|
|
: nil;
|
|
}
|
|
|
|
return [self initWithModel:model adaptorName:adaptorName];
|
|
}
|
|
|
|
/*
|
|
* uses the default model and an 'adaptorName'ConnectionDictionary
|
|
* in the models userInfo.
|
|
*/
|
|
- (id) initWithModel:(EOModel *)model adaptorName:(NSString *)adaptorName
|
|
{
|
|
NSAssert(adaptorName, @"nil adaptor name");
|
|
{
|
|
NSString *dictName = [adaptorName stringByAppendingString:
|
|
@"ConnectionDictionary"];
|
|
NSDictionary *connDict = [[model userInfo] objectForKey: dictName];
|
|
|
|
return [self initWithModel:model
|
|
adaptorName:adaptorName
|
|
connectionDictionary:connDict];
|
|
}
|
|
}
|
|
|
|
/* designated initializer assigns the models adaptor name, and connection
|
|
* dictionary */
|
|
- (id) initWithModel:(EOModel *)model
|
|
adaptorName:(NSString*)adaptorName
|
|
connectionDictionary:(NSDictionary *)connDict
|
|
{
|
|
self = [super init];
|
|
|
|
if (self)
|
|
{
|
|
_model = [model retain];
|
|
[model setConnectionDictionary:connDict];
|
|
[model setAdaptorName:adaptorName];
|
|
|
|
_adaptor = [[EOAdaptor adaptorWithModel:_model] retain];
|
|
_exprClass = [_adaptor expressionClass];
|
|
_context = [[_adaptor createAdaptorContext] retain];
|
|
_channel = [[_context createAdaptorChannel] retain];
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[self close];
|
|
[_model release];
|
|
[_adaptor release];
|
|
[_context release];
|
|
[_channel release];
|
|
[super dealloc];
|
|
}
|
|
|
|
/*
|
|
* drops the tables (ignoring any exceptions)
|
|
* as the tables may not exist to be dropped.
|
|
* then returns the value of [self createTables];
|
|
*/
|
|
|
|
- (void) recreateTables
|
|
{
|
|
NS_DURING
|
|
[self dropTables];
|
|
NS_HANDLER
|
|
NS_ENDHANDLER
|
|
|
|
return [self createTables];
|
|
}
|
|
|
|
- (void) dropTables
|
|
{
|
|
NSAutoreleasePool *pool = [NSAutoreleasePool new];
|
|
NSArray *entities = [_model entities];
|
|
|
|
|
|
NSDictionary *dropOptDict
|
|
= [NSDictionary dictionaryWithObjectsAndKeys:
|
|
@"NO", @"EOPrimaryKeyConstraintsKey",
|
|
@"NO", @"EOCreatePrimaryKeySupportKey",
|
|
@"NO", @"EOCreateTablesKey",
|
|
nil];
|
|
NSArray *exprs;
|
|
EOSQLExpression *expr;
|
|
unsigned i,c;
|
|
|
|
exprs = [_exprClass schemaCreationStatementsForEntities: entities
|
|
options: dropOptDict];
|
|
|
|
[self open];
|
|
|
|
for (i=0, c=[exprs count]; i<c; i++)
|
|
{
|
|
expr = [exprs objectAtIndex: i];
|
|
[_channel evaluateExpression: expr];
|
|
}
|
|
|
|
[self close];
|
|
|
|
[pool release];
|
|
}
|
|
|
|
- (void) createTables
|
|
{
|
|
NSAutoreleasePool *pool = [NSAutoreleasePool new];
|
|
NSArray *entities = [_model entities];
|
|
NSDictionary *createOptDict
|
|
= [NSDictionary dictionaryWithObjectsAndKeys:
|
|
@"NO", @"EODropTablesKey",
|
|
@"NO", @"EODropPrimaryKeySupportKey", nil];
|
|
NSArray *exprs;
|
|
EOSQLExpression *expr;
|
|
unsigned i,c;
|
|
|
|
[self open];
|
|
|
|
exprs = [_exprClass schemaCreationStatementsForEntities: entities
|
|
options: createOptDict];
|
|
for (i=0, c=[exprs count]; i<c; i++)
|
|
{
|
|
expr = [exprs objectAtIndex: i];
|
|
[_channel evaluateExpression: expr];
|
|
}
|
|
|
|
[self close];
|
|
|
|
[pool release];
|
|
}
|
|
|
|
- (void) open
|
|
{
|
|
if (![self isOpen])
|
|
[_channel openChannel];
|
|
}
|
|
|
|
- (void) close
|
|
{
|
|
if ([_channel isOpen])
|
|
[_channel closeChannel];
|
|
}
|
|
|
|
- (BOOL) isOpen
|
|
{
|
|
return [_channel isOpen];
|
|
}
|
|
|
|
- (Class) exprClass
|
|
{
|
|
return _exprClass;
|
|
}
|
|
|
|
- (EOAdaptorChannel *)channel
|
|
{
|
|
return _channel;
|
|
}
|
|
|
|
- (EOAdaptorContext *)context
|
|
{
|
|
return _context;
|
|
}
|
|
|
|
- (EOModel *)model
|
|
{
|
|
return _model;
|
|
}
|
|
|
|
- (EOAdaptor *)adaptor
|
|
{
|
|
return _adaptor;
|
|
}
|
|
@end
|