1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.ldap.client.api.search;
21
22
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.directory.api.ldap.model.filter.FilterEncoder;
27 import org.apache.directory.api.util.Strings;
28
29
30
31
32
33
34
35 class SubstringFilter extends AbstractFilter
36 {
37
38 private String attribute;
39
40
41 private String initial;
42
43
44 private String[] any;
45
46
47 private String end;
48
49
50
51
52
53 private SubstringFilter( String attribute, String initial, String[] any, String end )
54 {
55 this.attribute = attribute;
56 this.initial = initial;
57
58
59 if ( ( any != null ) && ( any.length != 0 ) )
60 {
61 List<String> anyList = new ArrayList<String>();
62
63 for ( String string : any )
64 {
65 if ( !Strings.isEmpty( string ) )
66 {
67 anyList.add( string );
68 }
69 }
70
71 if ( anyList.size() > 0 )
72 {
73 this.any = anyList.toArray( new String[]
74 {} );
75 }
76 }
77
78 this.end = end;
79 }
80
81
82
83
84
85
86
87
88
89
90
91 public static SubstringFilter startsWith( String attribute, String... parts )
92 {
93 if ( ( parts != null ) && ( parts.length > 0 ) )
94 {
95 if ( parts.length > 1 )
96 {
97 String[] any = new String[parts.length - 1];
98 System.arraycopy( parts, 1, any, 0, any.length );
99
100 return new SubstringFilter( attribute, parts[0], any, null );
101 }
102 else
103 {
104 return new SubstringFilter( attribute, parts[0], null, null );
105 }
106 }
107 else
108 {
109
110 return new SubstringFilter( attribute, null, null, null );
111 }
112 }
113
114
115
116
117
118
119
120
121
122
123
124 public static SubstringFilter endsWith( String attribute, String... parts )
125 {
126 if ( ( parts != null ) && ( parts.length > 0 ) )
127 {
128 if ( parts.length > 1 )
129 {
130 String[] any = new String[parts.length - 1];
131 System.arraycopy( parts, 0, any, 0, any.length );
132
133 return new SubstringFilter( attribute, null, any, parts[parts.length - 1] );
134 }
135 else
136 {
137 return new SubstringFilter( attribute, null, null, parts[0] );
138 }
139 }
140 else
141 {
142
143 return new SubstringFilter( attribute, null, null, null );
144 }
145 }
146
147
148
149
150
151
152
153
154
155
156
157 public static SubstringFilter contains( String attribute, String... parts )
158 {
159 if ( ( parts != null ) && ( parts.length > 0 ) )
160 {
161 if ( parts.length > 1 )
162 {
163 String[] any = new String[parts.length];
164 System.arraycopy( parts, 0, any, 0, any.length );
165
166 return new SubstringFilter( attribute, null, any, null );
167 }
168 else
169 {
170 return new SubstringFilter( attribute, null, parts, null );
171 }
172 }
173 else
174 {
175
176 return new SubstringFilter( attribute, null, null, null );
177 }
178 }
179
180
181
182
183
184
185
186
187
188
189
190 public static SubstringFilter substring( String attribute, String... parts )
191 {
192 if ( ( parts != null ) && ( parts.length > 0 ) )
193 {
194 if ( parts.length > 2 )
195 {
196
197 String[] any = new String[parts.length - 2];
198 System.arraycopy( parts, 1, any, 0, any.length );
199
200 return new SubstringFilter( attribute, parts[0], any, parts[parts.length - 1] );
201 }
202 else if ( parts.length > 1 )
203 {
204
205 return new SubstringFilter( attribute, parts[0], null, parts[1] );
206 }
207 else
208 {
209
210 return new SubstringFilter( attribute, parts[0], null, null );
211 }
212 }
213 else
214 {
215
216 return new SubstringFilter( attribute, null, null, null );
217 }
218 }
219
220
221
222
223
224 @Override
225 public StringBuilder build( StringBuilder builder )
226 {
227 builder.append( "(" ).append( attribute ).append( '=' );
228
229 if ( !Strings.isEmpty( initial ) )
230 {
231 builder.append( FilterEncoder.encodeFilterValue( initial ) );
232 }
233
234 if ( any != null )
235 {
236 for ( String string : any )
237 {
238 builder.append( '*' ).append( FilterEncoder.encodeFilterValue( string ) );
239 }
240 }
241
242 builder.append( '*' );
243
244 if ( !Strings.isEmpty( end ) )
245 {
246 builder.append( FilterEncoder.encodeFilterValue( end ) );
247 }
248
249 builder.append( ")" );
250
251 return builder;
252 }
253 }