1
1
/*
2
- * Copyright 2005-2022 the original author or authors.
2
+ * Copyright 2005-2023 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
75
75
* @see org.springframework.ldap.core.ContextSource
76
76
* @author Mattias Hellborg Arthursson
77
77
* @author Ulrik Sandberg
78
+ * @author Roman Zabaluev
78
79
*/
79
80
public class LdapTemplate implements LdapOperations , InitializingBean {
80
81
@@ -253,15 +254,10 @@ public void search(final Name base, final String filter, final SearchControls co
253
254
NameClassPairCallbackHandler handler ) {
254
255
255
256
// Create a SearchExecutor to perform the search.
256
- SearchExecutor se = new SearchExecutor () {
257
- public NamingEnumeration executeSearch (DirContext ctx ) throws javax .naming .NamingException {
258
- return ctx .search (base , filter , controls );
259
- }
260
- };
261
257
if (handler instanceof ContextMapperCallbackHandler ) {
262
258
assureReturnObjFlagSet (controls );
263
259
}
264
- search (se , handler );
260
+ search (searchExecutorWithLogging ( base , filter , controls ) , handler );
265
261
}
266
262
267
263
/**
@@ -272,15 +268,10 @@ public void search(final String base, final String filter, final SearchControls
272
268
NameClassPairCallbackHandler handler ) {
273
269
274
270
// Create a SearchExecutor to perform the search.
275
- SearchExecutor se = new SearchExecutor () {
276
- public NamingEnumeration executeSearch (DirContext ctx ) throws javax .naming .NamingException {
277
- return ctx .search (base , filter , controls );
278
- }
279
- };
280
271
if (handler instanceof ContextMapperCallbackHandler ) {
281
272
assureReturnObjFlagSet (controls );
282
273
}
283
- search (se , handler );
274
+ search (searchExecutorWithLogging ( base , filter , controls ) , handler );
284
275
}
285
276
286
277
/**
@@ -291,15 +282,10 @@ public void search(final Name base, final String filter, final SearchControls co
291
282
NameClassPairCallbackHandler handler , DirContextProcessor processor ) {
292
283
293
284
// Create a SearchExecutor to perform the search.
294
- SearchExecutor se = new SearchExecutor () {
295
- public NamingEnumeration executeSearch (DirContext ctx ) throws javax .naming .NamingException {
296
- return ctx .search (base , filter , controls );
297
- }
298
- };
299
285
if (handler instanceof ContextMapperCallbackHandler ) {
300
286
assureReturnObjFlagSet (controls );
301
287
}
302
- search (se , handler , processor );
288
+ search (searchExecutorWithLogging ( base , filter , controls ) , handler , processor );
303
289
}
304
290
305
291
/**
@@ -310,15 +296,10 @@ public void search(final String base, final String filter, final SearchControls
310
296
NameClassPairCallbackHandler handler , DirContextProcessor processor ) {
311
297
312
298
// Create a SearchExecutor to perform the search.
313
- SearchExecutor se = new SearchExecutor () {
314
- public NamingEnumeration executeSearch (DirContext ctx ) throws javax .naming .NamingException {
315
- return ctx .search (base , filter , controls );
316
- }
317
- };
318
299
if (handler instanceof ContextMapperCallbackHandler ) {
319
300
assureReturnObjFlagSet (controls );
320
301
}
321
- search (se , handler , processor );
302
+ search (searchExecutorWithLogging ( base , filter , controls ) , handler , processor );
322
303
}
323
304
324
305
/**
@@ -1689,7 +1670,7 @@ <T> Stream<T> searchForStream(LdapQuery query, Function<SearchResult, T> mapper)
1689
1670
1690
1671
assureReturnObjFlagSet (searchControls );
1691
1672
1692
- NamingEnumeration <SearchResult > results = unchecked (() -> ctx . search ( base , encodedFilter , searchControls ));
1673
+ NamingEnumeration <SearchResult > results = unchecked (searchSupplier ( ctx , base , encodedFilter , searchControls ));
1693
1674
if (results == null ) {
1694
1675
return Stream .empty ();
1695
1676
}
@@ -1918,6 +1899,38 @@ public <T> Stream<T> findForStream(LdapQuery query, Class<T> clazz) {
1918
1899
return searchForStream (builder .filter (includeClass ), contextMapper );
1919
1900
}
1920
1901
1902
+ private SearchExecutor searchExecutorWithLogging (final Name base , final String filter ,
1903
+ final SearchControls controls ) {
1904
+ return ctx -> {
1905
+ if (LOG .isDebugEnabled ()) {
1906
+ LOG .debug ("Executing search with base [{}] and filter [{}]" , base , filter );
1907
+ }
1908
+ return ctx .search (base , filter , controls );
1909
+ };
1910
+ }
1911
+
1912
+ private SearchExecutor searchExecutorWithLogging (final String base , final String filter ,
1913
+ final SearchControls controls ) {
1914
+ return ctx -> {
1915
+ if (LOG .isDebugEnabled ()) {
1916
+ LOG .debug ("Executing search with base [{}] and filter [{}]" , base , filter );
1917
+ }
1918
+ return ctx .search (base , filter , controls );
1919
+ };
1920
+ }
1921
+
1922
+ private CheckedSupplier <NamingEnumeration <SearchResult >> searchSupplier (final DirContext ctx ,
1923
+ final Name base ,
1924
+ final String filter ,
1925
+ final SearchControls controls ) {
1926
+ return () -> {
1927
+ if (LOG .isDebugEnabled ()) {
1928
+ LOG .debug ("Executing search with base [{}] and filter [{}]" , base , filter );
1929
+ }
1930
+ return ctx .search (base , filter , controls );
1931
+ };
1932
+ }
1933
+
1921
1934
private <T > T unchecked (CheckedSupplier <T > supplier ) {
1922
1935
try {
1923
1936
return supplier .get ();
0 commit comments