2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
6 SOPE is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #include <EOControl/EOQualifier.h>
25 @interface NSObject(QualifierDescription)
26 - (NSString *)qualifierDescription;
29 @interface EOQualifier(EvalContext)
30 - (BOOL)evaluateWithObject:(id)_object inEvalContext:(id)_ctx;
33 @implementation EONotQualifier
35 - (id)initWithQualifier:(EOQualifier *)_qualifier {
36 self->qualifier = [_qualifier retain];
41 [self->qualifier release];
47 - (EOQualifier *)qualifier {
48 return self->qualifier;
51 - (unsigned int)count {
52 return self->qualifier ? 1 : 0;
54 - (NSArray *)subqualifiers {
55 return self->qualifier ? [NSArray arrayWithObject:self->qualifier] : nil;
60 - (EOQualifier *)qualifierWithBindings:(NSDictionary *)_bindings
61 requiresAllVariables:(BOOL)_reqAll
65 nq = [self->qualifier qualifierWithBindings:_bindings
66 requiresAllVariables:_reqAll];
70 if (nq == self->qualifier)
73 return [[[[self class] alloc] initWithQualifier:nq] autorelease];
76 - (NSArray *)bindingKeys {
77 return [self->qualifier bindingKeys];
82 - (void)addQualifierKeysToSet:(NSMutableSet *)_keys {
84 [self->qualifier addQualifierKeysToSet:_keys];
89 - (BOOL)evaluateWithObject:(id)_object inEvalContext:(id)_ctx {
91 [self->qualifier evaluateWithObject:_object inEvalContext:_ctx]
94 - (BOOL)evaluateWithObject:(id)_object {
95 return [self evaluateWithObject:_object inEvalContext:nil];
100 - (void)encodeWithCoder:(NSCoder *)_coder {
101 [_coder encodeObject:self->qualifier];
104 - (id)initWithCoder:(NSCoder *)_coder {
105 self->qualifier = [[_coder decodeObject] retain];
111 - (BOOL)isEqualToQualifier:(EOQualifier *)_qual {
112 return [self->qualifier isEqual:[(EONotQualifier *)_qual qualifier]];
117 - (EOQualifier *)qualifierByApplyingTransformer:(id)_transformer
120 if ([_transformer respondsToSelector:
121 @selector(transformNotQualifier:inContext:)]) {
122 return [_transformer transformNotQualifier:self inContext:_ctx];
129 qualifierByApplyingTransformer:_transformer inContext:_ctx];
130 nq = [[EONotQualifier alloc] initWithQualifier:(q ? q : self->qualifier)];
131 return [nq autorelease];
135 - (EOQualifier *)qualifierByApplyingKeyMap:(NSDictionary *)_map {
139 q = [self->qualifier qualifierByApplyingKeyMap:_map];
140 nq = [[EONotQualifier alloc] initWithQualifier:(q ? q : self->qualifier)];
141 return [nq autorelease];
144 /* key/value archiving */
146 - (id)initWithKeyValueUnarchiver:(EOKeyValueUnarchiver *)_unarchiver {
147 if ((self = [super initWithKeyValueUnarchiver:_unarchiver]) != nil) {
148 self->qualifier = [[_unarchiver decodeObjectForKey:@"qualifier"] copy];
152 - (void)encodeWithKeyValueArchiver:(EOKeyValueArchiver *)_archiver {
153 [super encodeWithKeyValueArchiver:_archiver];
154 [_archiver encodeObject:[self qualifier] forKey:@"qualifier"];
159 - (NSString *)description {
162 qd = [self->qualifier qualifierDescription];
164 return [[@"NOT (" stringByAppendingString:qd] stringByAppendingString:@")"];
167 @end /* EONotQualifier */