}
// If matchingAttributes is null/empty use a match for everything filter
if ( null == matchingAttributes || matchingAttributes.size() <= 0 )
{
PresenceNode filter = new PresenceNode( "objectClass" );
return getNexusProxy().search( target , getEnvironment(), filter, ctls );
}
/*
* Go through the set of attributes using each attribute value pair as
* an attribute value assertion within one big AND filter expression.
*/
Attribute attr;
SimpleNode node;
BranchNode filter = new BranchNode( BranchNode.AND );
NamingEnumeration list = matchingAttributes.getAll();
// Loop through each attribute value pair
while ( list.hasMore() )
{
attr = ( Attribute ) list.next();
/*
* According to JNDI if an attribute in the matchingAttributes
* list does not have any values then we match for just the presence
* of the attribute in the entry
*/
if ( attr.size() == 0 )
{
filter.addNode( new PresenceNode( attr.getID() ) );
continue;
}
/*
* With 1 or more value we build a set of simple nodes and add them
* to the AND node - each attribute value pair is a simple AVA node.
*/
for ( int ii = 0; ii < attr.size(); ii++ )
{
Object val = attr.get( ii );
// Add simpel AVA node if its value is a String
if ( val instanceof String )
{
node = new SimpleNode( attr.getID(), ( String ) val, SimpleNode.EQUALITY );
filter.addNode( node );
}
}
}
return getNexusProxy().search( target , getEnvironment(), filter, ctls );