]> err.no Git - sope/blob - sope-ldap/NGLdap/EOQualifier+LDAP.m
some code cleanups
[sope] / sope-ldap / NGLdap / EOQualifier+LDAP.m
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
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
9   later version.
10
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.
15
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
19   02111-1307, USA.
20 */
21
22 #include "EOQualifier+LDAP.h"
23 #include "common.h"
24
25 #if NeXT_RUNTIME
26 #define sel_eq(sel1, sel2) ((sel1)) == ((sel2))
27 #endif
28
29 @interface EOQualifier(LDAPPrivates)
30
31 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx;
32
33 @end
34
35 @implementation EOQualifier(LDAP)
36
37 - (id)initWithLDAPFilterString:(NSString *)_filter {
38   return nil;
39 }
40
41 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
42   [self doesNotRecognizeSelector:_cmd]; // subclass
43 }
44
45 - (NSString *)ldapFilterString {
46   NSMutableString *s;
47   NSString *is;
48
49   s = [[NSMutableString alloc] initWithCapacity:100];
50   [self addToLDAPFilterString:s inContext:nil];
51   is = [s copy];
52   [s release];
53   return [is autorelease];
54 }
55
56 @end /* EOQualifier(LDAP) */
57
58 @implementation EOAndQualifier(LDAP)
59
60 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
61   unsigned i, cnt;
62   NSArray  *array;
63
64   array = [self qualifiers];
65   cnt   = [array count];
66   
67   [_s appendString:@"(&"];
68   
69   for (i = 0; i < cnt; i++) {
70     EOQualifier *sq;
71
72     sq = [array objectAtIndex:i];
73     [sq addToLDAPFilterString:_s inContext:_ctx];
74   }
75   
76   [_s appendString:@")"];
77 }
78
79 @end /* EOAndQualifier(LDAP) */
80
81 @implementation EOOrQualifier(LDAP)
82
83 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
84   unsigned i, cnt;
85   NSArray  *array;
86
87   array = [self qualifiers];
88   cnt   = [array count];
89   
90   [_s appendString:@"(|"];
91   
92   for (i = 0; i < cnt; i++) {
93     EOQualifier *sq;
94
95     sq = [array objectAtIndex:i];
96     [sq addToLDAPFilterString:_s inContext:_ctx];
97   }
98   
99   [_s appendString:@")"];
100 }
101
102 @end /* EOOrQualifier(LDAP) */
103
104 @implementation EONotQualifier(LDAP)
105
106 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
107   [_s appendString:@"(!"];
108   [[self qualifier] addToLDAPFilterString:_s inContext:_ctx];
109   [_s appendString:@")"];
110 }
111
112 @end /* EONotQualifier(LDAP) */
113
114 @implementation EOKeyValueQualifier(LDAP)
115
116 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
117   // TODO: patterns are treated like regular strings or the reverse?
118   SEL sel;
119
120   sel = [self selector];
121
122   if (sel_eq(sel,  EOQualifierOperatorNotEqual))
123     [_s appendString:@"(!"];
124   
125   [_s appendString:@"("];
126   [_s appendString:[self key]];
127
128   if (sel_eq(sel,  EOQualifierOperatorEqual))
129     [_s appendString:@"="];
130   else if (sel_eq(sel,  EOQualifierOperatorNotEqual))
131     [_s appendString:@"="];
132   else if (sel_eq(sel,  EOQualifierOperatorLessThan))
133     [_s appendString:@"<"];
134   else if (sel_eq(sel,  EOQualifierOperatorGreaterThan))
135     [_s appendString:@">"];
136   else if (sel_eq(sel,  EOQualifierOperatorLessThanOrEqualTo))
137     [_s appendString:@"<="];
138   else if (sel_eq(sel,  EOQualifierOperatorGreaterThanOrEqualTo))
139     [_s appendString:@">="];
140   else if (sel_eq(sel,  EOQualifierOperatorContains))
141     [_s appendString:@"=*"];
142   else if (sel_eq(sel,  EOQualifierOperatorLike))
143     [_s appendString:@"="];
144   else if (sel_eq(sel,  EOQualifierOperatorCaseInsensitiveLike))
145     [_s appendString:@"="];
146   else {
147     NSLog(@"UNKNOWN operator: %@", NSStringFromSelector([self selector]));
148     [_s appendString:@"="];
149   }
150
151   [_s appendString:[[self value] description]];
152   [_s appendString:@")"];
153   
154   if (sel_eq(sel,  EOQualifierOperatorNotEqual))
155     [_s appendString:@")"];
156 }
157
158 @end /* EOKeyValueQualifier(LDAP) */
159
160 @implementation EOKeyComparisonQualifier(LDAP)
161
162 - (void)addToLDAPFilterString:(NSMutableString *)_s inContext:(id)_ctx {
163   /* ldap supports no comparison operations on keys */
164   SEL sel;
165
166   sel = [self selector];
167
168   if (sel_eq(sel,  EOQualifierOperatorNotEqual))
169     [_s appendString:@"(!"];
170   
171   [_s appendString:@"("];
172   [_s appendString:[self leftKey]];
173
174   if (sel_eq(sel,  EOQualifierOperatorEqual))
175     [_s appendString:@"="];
176   else if (sel_eq(sel,  EOQualifierOperatorNotEqual))
177     [_s appendString:@"="];
178   else if (sel_eq(sel,  EOQualifierOperatorLessThan))
179     [_s appendString:@"<"];
180   else if (sel_eq(sel,  EOQualifierOperatorGreaterThan))
181     [_s appendString:@">"];
182   else if (sel_eq(sel,  EOQualifierOperatorLessThanOrEqualTo))
183     [_s appendString:@"<="];
184   else if (sel_eq(sel,  EOQualifierOperatorGreaterThanOrEqualTo))
185     [_s appendString:@">="];
186   else if (sel_eq(sel,  EOQualifierOperatorContains))
187     [_s appendString:@"=*"];
188   else if (sel_eq(sel,  EOQualifierOperatorLike))
189     [_s appendString:@"="];
190   else if (sel_eq(sel,  EOQualifierOperatorCaseInsensitiveLike))
191     [_s appendString:@"="];
192   else {
193     NSLog(@"UNKNOWN operator: %@", NSStringFromSelector([self selector]));
194     [_s appendString:@"="];
195   }
196
197   [_s appendString:[self rightKey]];
198   [_s appendString:@")"];
199   
200   if (sel_eq(sel,  EOQualifierOperatorNotEqual))
201     [_s appendString:@")"];
202 }
203
204 @end /* EOKeyComparisonQualifier(LDAP) */