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:(NSString *)_object;
230 - (BOOL)isCaseInsensitiveLike:(NSString *)_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__ */