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
#ifndef __EOQualifier_h__
23
#define __EOQualifier_h__
25
#import <Foundation/NSObject.h>
30
EOQualifier is the superclass of all the concrete qualifier classes which
31
are used to build up a qualification object hierarchy (aka a SQL where
39
EOKeyComparisonQualifier
43
EOQualifierVariable defers the evaluation of some qualification value to
44
runtime. It's comparable to SQL late-binding variables (aka "a=$value").
46
Also provided are some categories on NSObject and NSArray to filter an
47
in-memory object tree.
50
@class NSDictionary, NSArray, NSSet, NSMutableSet;
52
@protocol EOQualifierEvaluation
53
- (BOOL)evaluateWithObject:(id)_object;
56
@interface EOQualifier : NSObject
58
+ (EOQualifier *)qualifierToMatchAnyValue:(NSDictionary *)_values;
59
+ (EOQualifier *)qualifierToMatchAllValues:(NSDictionary *)_values;
61
+ (SEL)operatorSelectorForString:(NSString *)_str;
62
+ (NSString *)stringForOperatorSelector:(SEL)_sel;
66
- (EOQualifier *)qualifierWithBindings:(NSDictionary *)_bindings
67
requiresAllVariables:(BOOL)_reqAll;
68
- (NSArray *)bindingKeys;
70
/* keys (new in WO 4.5) */
72
- (NSSet *)allQualifierKeys;
73
- (void)addQualifierKeysToSet:(NSMutableSet *)_keys;
77
- (BOOL)isEqual:(id)_obj;
78
- (BOOL)isEqualToQualifier:(EOQualifier *)_qual;
82
- (EOQualifier *)qualifierByApplyingTransformer:(id)_t inContext:(id)_ctx;
83
- (EOQualifier *)qualifierByApplyingKeyMap:(NSDictionary *)_map;
85
/* BDControl additions */
87
- (unsigned int)count;
88
- (NSArray *)subqualifiers;
92
+ (BOOL)isEvaluationDebuggingEnabled;
94
@end /* EOQualifier */
96
@interface EOQualifier(Parsing)
98
+ (EOQualifier *)qualifierWithQualifierFormat:(NSString *)_qualifierFormat, ...;
99
+ (EOQualifier *)qualifierWithQualifierFormat:(NSString *)_qualifierFormat
100
arguments:(NSArray *)_arguments;
102
/* this is used in "cast (xxx as mytypename)" expressions */
103
+ (void)registerValueClass:(Class)_valueClass forTypeName:(NSString *)_type;
107
@interface EOAndQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
113
- (id)initWithQualifierArray:(NSArray *)_qualifiers;
114
- (id)initWithQualifiers:(EOQualifier *)_qual1, ...;
115
- (NSArray *)qualifiers;
117
@end /* EOAndQualifier */
119
@interface EOOrQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
125
- (id)initWithQualifierArray:(NSArray *)_qualifiers; /* designated init */
126
- (id)initWithQualifiers:(EOQualifier *)_qual1, ...;
127
- (NSArray *)qualifiers;
129
@end /* EOOrQualifier */
131
@interface EONotQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
133
EOQualifier *qualifier;
136
- (id)initWithQualifier:(EOQualifier *)_qualifier; /* designated init */
137
- (EOQualifier *)qualifier;
139
@end /* EONotQualifier */
141
extern SEL EOQualifierOperatorEqual;
142
extern SEL EOQualifierOperatorNotEqual;
143
extern SEL EOQualifierOperatorLessThan;
144
extern SEL EOQualifierOperatorGreaterThan;
145
extern SEL EOQualifierOperatorLessThanOrEqualTo;
146
extern SEL EOQualifierOperatorGreaterThanOrEqualTo;
147
extern SEL EOQualifierOperatorContains;
148
extern SEL EOQualifierOperatorLike;
149
extern SEL EOQualifierOperatorCaseInsensitiveLike;
151
@interface EOKeyValueQualifier : EOQualifier < EOQualifierEvaluation, NSCoding >
153
/* this is a '%A selector %@' qualifier */
159
- (id)initWithKey:(NSString *)_key
160
operatorSelector:(SEL)_selector
169
@interface EOKeyComparisonQualifier : EOQualifier
170
< EOQualifierEvaluation, NSCoding >
172
/* this is a '%A selector %A' qualifier */
178
- (id)initWithLeftKey:(NSString *)_leftKey
179
operatorSelector:(SEL)_selector
180
rightKey:(NSString *)_rightKey;
182
- (NSString *)leftKey;
183
- (NSString *)rightKey;
190
#define EOQualifierOperatorEqual @selector(isEqualTo:)
191
#define EOQualifierOperatorNotEqual @selector(isNotEqualTo:)
192
#define EOQualifierOperatorLessThan @selector(isLessThan:)
193
#define EOQualifierOperatorGreaterThan @selector(isGreaterThan:)
194
#define EOQualifierOperatorLessThanOrEqualTo @selector(isLessThanOrEqualTo:)
195
#define EOQualifierOperatorGreaterThanOrEqualTo @selector(isGreaterThanOrEqualTo:)
196
#define EOQualifierOperatorContains @selector(doesContain:)
197
#define EOQualifierOperatorLike @selector(isLike:)
198
#define EOQualifierOperatorCaseInsensitiveLike @selector(isCaseInsensitiveLike:)
200
/* variable qualifier content */
202
@interface EOQualifierVariable : NSObject < NSCoding >
207
+ (id)variableWithKey:(NSString *)_key;
208
- (id)initWithKey:(NSString *)_key;
214
- (BOOL)isEqual:(id)_obj;
215
- (BOOL)isEqualToQualifierVariable:(EOQualifierVariable *)_obj;
219
/* define the appropriate selectors */
221
@interface NSObject(QualifierComparisions)
222
- (BOOL)isEqualTo:(id)_object;
223
- (BOOL)isNotEqualTo:(id)_object;
224
- (BOOL)isLessThan:(id)_object;
225
- (BOOL)isGreaterThan:(id)_object;
226
- (BOOL)isLessThanOrEqualTo:(id)_object;
227
- (BOOL)isGreaterThanOrEqualTo:(id)_object;
228
- (BOOL)doesContain:(id)_object;
229
- (BOOL)isLike:(id)_object;
230
- (BOOL)isCaseInsensitiveLike:(id)_object;
233
@interface NSObject(EOQualifierTransformer)
235
- (EOQualifier *)transformQualifier:(EOQualifier *)_q inContext:(id)_ctx;
236
- (EOQualifier *)transformAndQualifier:(EOAndQualifier *)_q inContext:(id)_ctx;
237
- (EOQualifier *)transformOrQualifier:(EOOrQualifier *)_q inContext:(id)_ctx;
238
- (EOQualifier *)transformNotQualifier:(EONotQualifier *)_q inContext:(id)_ctx;
240
- (EOQualifier *)transformKeyValueQualifier:(EOKeyValueQualifier *)_q
242
- (EOQualifier *)transformKeyComparisonQualifier:(EOKeyComparisonQualifier *)q
247
/* array qualification */
249
#import <Foundation/NSArray.h>
251
@interface NSArray(Qualification)
252
- (NSArray *)filteredArrayUsingQualifier:(EOQualifier *)_qualifier;
255
#endif /* __EOQualifier_h__ */