/*!
@header FTDictionaryServiceForNodeImpl
@abstract Module of FT
@availability OS X, GNUstep
@copyright 2004, 2005, 2006 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-------------------------------------------------------------------------
Modification history
17.07.06 ola initial version
23.08.06 ola license changed
-------------------------------------------------------------------------
*/
#include
#include
#include "FTDictionaryServiceForNodeImpl.h"
#include
#include "FTDictionaryServiceTransactionStepImpl.h"
#include "FTDictionaryServiceForGraphImpl.h"
@implementation FTDictionaryServiceForNodeImpl
- initForDictionaryServiceForGraph:
(FTDictionaryServiceForGraphImpl *) aServiceForGraph
forNode: (id ) aNode {
self = [super init];
self->serviceForGraph = [aServiceForGraph retain];
self->node = [aNode retain];
return self;
}
- (void) dealloc {
[self->serviceForGraph release];
[self->node release];
[super dealloc];
}
- (id ) allKeys {
return [self->serviceForGraph allKeysOfNode: self->node];
}
- (void) close {
return;
}
- setObject: (id ) anObject forKey: (id ) aKey {
id transaction;
FTTransactionContext *context;
FTDictionaryServiceTransactionStepImpl *transactionStep;
if( [[FTLogging coreLog] isTraceEnabled] ) {
[[FTLogging coreLog] trace: @"FTDictionaryServiceForNodeImpl::setObject"];
}
/* todo: first check wether node exists in db ... */
transaction = [[FTSessionImpl currentSession] currentTransaction];
if( nil == transaction ) {
[[[ECIllegalStateException alloc]
initWithIllegalStateInfo: @"FTDictionaryServiceForNodeImpl::setObject: "\
"no transaction given!"]
raise];
}
context = [[((FTTransactionImpl *) transaction) createContext]
autorelease];
transactionStep = [FTDictionaryServiceTransactionStepImpl
transactionForOperationSETOfNode: self->node
withKey: aKey
withObject: anObject
withDictionaryServiceGraphImpl: self->serviceForGraph
transactionContext: context];
[((FTTransactionImpl *) transaction)
addTransactionStep: transactionStep
withContext: context ];
return self;
}
- objectForKey: (id ) aKey {
if( [[FTLogging coreLog] isTraceEnabled] ) {
[[FTLogging coreLog]
trace: @"FTDictionaryServiceForNodeImpl::objectForKey"];
}
return [self->serviceForGraph
objectForKey: aKey
ofNode: self->node];
}
- removeObjectForKey: (id ) aKey {
id transaction;
FTTransactionContext *context;
FTDictionaryServiceTransactionStepImpl *transactionStep;
if( [[FTLogging coreLog] isTraceEnabled] ) {
[[FTLogging coreLog] trace: @"FTDictionaryServiceForNodeImpl::"\
"removeObjectForKey"];
}
/* todo: first check wether node exists in db ... */
transaction = [[FTSessionImpl currentSession] currentTransaction];
if( nil == transaction ) {
[[[ECIllegalStateException alloc]
initWithIllegalStateInfo: @"FTDictionaryServiceForNodeImpl::"\
"removeObjectForKey: no transaction given!"]
raise];
}
context = [[((FTTransactionImpl *) transaction) createContext]
autorelease];
transactionStep = [FTDictionaryServiceTransactionStepImpl
transactionForOperationREMOVEOfNode: self->node
withKey: aKey
withDictionaryServiceGraphImpl: self->serviceForGraph
transactionContext: context];
[((FTTransactionImpl *) transaction)
addTransactionStep: transactionStep
withContext: context ];
return self;
}
- (NSString *) serviceId {
return [[self->serviceForGraph serviceLoader] serviceId];
}
- (id ) serviceVersion {
return [[self->serviceForGraph serviceLoader] serviceVersion];
}
@end