code: @Override
      public <T> List<T> find(Name base, Filter filter, SearchControls searchControls, final Class<T> clazz) {
      	Filter finalFilter = odm.filterFor(clazz, filter);
  
          // Search from the root if we are not told where to search from
          Name localBase = base;
          if (base == null || base.size() == 0) {
              localBase = LdapUtils.emptyLdapName();
          }
  
          // extend search controls with the attributes to return
          String[] attributes = odm.manageClass(clazz);
          searchControls.setReturningAttributes(attributes);
          
          if (LOG.isDebugEnabled()) {
              LOG.debug(String.format("Searching - base=%1$s, finalFilter=%2$s, scope=%3$s", base, finalFilter, searchControls));
          }
  
          List<T> result = search(localBase, finalFilter.encode(), searchControls, new ContextMapper<T>() {
              @Override
              public T mapFromContext(Object ctx) throws javax.naming.NamingException {
                  return odm.mapFromLdapDataEntry((DirContextOperations) ctx, clazz);
              }
          });
          result.remove(null);
  
          if (LOG.isDebugEnabled()) {
              LOG.debug(String.format("Found %1$s Entries - %2$s", result.size(), result));
          }
  
          return result;
      }
docs: {@inheritDoc}