On 28 avr. 2011, at 15:40, Stefan Seelmann wrote: > On Thu, Apr 28, 2011 at 2:20 PM, Pierre-Arnaud Marcelot <[email protected]> > wrote: >> >> On 28 avr. 2011, at 13:39, Kiran Ayyagari wrote: >> >>> On Thu, Apr 28, 2011 at 4:38 PM, Emmanuel Lecharny <[email protected]> >>> wrote: >>>> Hi guys, >>>> >>>> yesterday, as I started to write the doc about the Search Operation, I >>>> faced >>>> some issue. Let me explain. >>>> >>>> When you do a simple search, you get back a cursor : >>>> >>>> SearchCursor cursor = connection.search( "ou=system", >>>> "(objectclass=*)", SearchScope.ONELEVEL ); >>>> >>>> The SearchCursor extends Cursor<Response>. >>>> >>>> That means you get some Response when you do a search, so you have to write >>>> such code to get back the entries : >>>> >>>> while ( cursor.next() ) >>>> { >>>> Entry entry = ((SearchResultEntry)(cursor.get())).getEntry(); >>>> >>>> which is just horrible. >> >> I completely agree. >> We are creating this API to make the user's life easier and not embarrass >> him with such constructions. >> I'm pretty sure 90% of the users of the API won't know there are multiple >> types of responses to search. >> Most of them only expect entries. >> >> On the other hand, LDAP experts know everything about the spec and the API >> should also ease their work and allow them to access everything. > > I totally agree with Pierre-Arnaud. For power-users the search() > method should return the data structures as defined in the LDAP spec. > But most users only want to get Entry objects (not even > SearchResultEntry objects). So I'd suggest to keep the current > search() methods as is and add another convenience search method. > > The LdapConnection interface already defines a lot of convenience methods: > - exists() > - lookup() > - move() > - moveAndRename() > - rename() > > So why not some more for search: > Cursor<Entry> searchForEntries( Dn baseDn, String filter, SearchScope > scope, String... attributes ) // skips SearchResultReference > Cursor<Entry> searchForEntries( Dn baseDn, String filter, SearchScope > scope, ReferralHandlingMethod referalHandling, String... attributes )
Great idea. I like how you twisted the problem. Instead of overloading the SearchCursor API with the addition of new methods, you create a dedicated Cursor<Entry> object as a result of new specific search methods. Clever... Regards, Pierre-Arnaud
