(Quick Reference)
find
Purpose
The
find
method allows you to search for objects in the DIT as defined in
grails.plugins.directoryService.dit
. See the
Configuration section on details of how
grails.plugins.directoryService.dit
is defined.
Currently,
Where
is implemented as a dynamic finder. I hope to be able to add the
By
dynamic finder in a future release (e.g.,
find*BySnAndDepartmentNumber
).
Examples
These examples assume the following was defined in
directoryService.dit
:
grails.plugins.directoryService.dit = [
'ou=people,dc=socialidm,dc=com':[
singular: 'person',
plural: 'people',
rdnAttribute: 'uid',
source: 'directory'
]
]
In the above configuration, we defined that the 'singular' version of this branch as 'person', and the 'plural' version as 'people'.
To understand how these work, see the examples, below:
// Find one 'person', i.e., person is 'singular'
directoryService.findPersonWhere('uid':'12345')// Even if you use an attribute that would potentially return more than one,
// you are only going to get one result with the 'singular' version!
directoryService.findPersonWhere('sn':'rockwell')// Find 'people', i.e., people is the 'plural' version
directoryService.findPeopleWhere('departmentNumber':'12345', 'manager':'0128653')// find also allows you to specify a simple string as a filter
directoryService.findPeopleWhere('(|(sn=rockwell)(sn=smith))')// You can not use a wildcard * or ? in a simple string filter because it will
// get escaped, so you have to use an UnboundID LDAP SDK Filter if you want
// a more complicated filter
def filter = <an UnboundID LDAP SDK Filter>
directoryService.findPeopleWhere(filter)
DirectoryService
AND
s together the arguments to the
find
method. If you want
OR
, or more complicated filters, like ones with wildcards, then you will have to construct an
UnboundID LDAP SDK Filter and supply that as the argument to
find
.
Description
Unlike GORM, with DirectoryService you do not define concrete classes which are then used to find objects. For instance, with GORM, you might have a Person domain class, and then you would find people like this:
// Returns zero or at most one
Person.findWhere('lastName':'rockwell')// Returns zero or more than one
Person.findAllWhere('lastName':'rockwell')
With DirectoryService, you use the singular and plural versions of the DIT branches (as defined in
directoryService.dit
) to determine if you want one or more results.
// Returns zero or at most one
directoryService.findPersonWhere('lastName':'rockwell')// Returns zero or more than one
directoryService.findPeopleWhere('lastName':'rockwell')
The table below compares the GORM and DirectoryService find differences.
Number of Results | GORM | DirectoryService |
---|
0 or 1 | findWhere | findPersonWhere |
0 or more | findAllWhere | findPeopleWhere |
In these examples, 'person' and 'people' are used only because they were defined in
grails.plugins.directoryService.dit
. If you define other names in
grails.plugins.directoryService.dit
, then you would have to use those names.