matchingAttributes = AttributeUtils.toCaseInsensitive( matchingAttributes );
if ( ( null == matchingAttributes ) || ( matchingAttributes.size() <= 0 ) )
{
PresenceNode filter = new PresenceNode( OBJECT_CLASS_AT );
AliasDerefMode aliasDerefMode = AliasDerefMode.getEnum( getEnvironment() );
try
{
EntryFilteringCursor cursor = doSearchOperation( target, aliasDerefMode, filter, ctls );
return new NamingEnumerationAdapter( cursor );
}
catch ( Exception e )
{
JndiUtils.wrap( e );
}
}
// Handle simple filter expressions without multiple terms
if ( matchingAttributes.size() == 1 )
{
NamingEnumeration<? extends javax.naming.directory.Attribute> list = matchingAttributes.getAll();
javax.naming.directory.Attribute attr = list.next();
list.close();
if ( attr.size() == 1 )
{
Object value = attr.get();
SimpleNode<?> node;
String attributeType = attr.getID();
if ( value instanceof byte[] )
{
node = new EqualityNode<byte[]>( attributeType, new BinaryValue( ( byte[] ) value ) );
}
else
{
node = new EqualityNode<String>( attributeType, new org.apache.directory.shared.ldap.model.entry.StringValue( ( String ) value ) );
}
AliasDerefMode aliasDerefMode = AliasDerefMode.getEnum( getEnvironment() );
try
{
EntryFilteringCursor cursor = doSearchOperation( target, aliasDerefMode, node, ctls );
return new NamingEnumerationAdapter( cursor );
}
catch ( Exception e )
{
JndiUtils.wrap(e);
return null; // shut compiler up
}
}
}
/*
* Go through the set of attributes using each attribute value pair as
* an attribute value assertion within one big AND filter expression.
*/
javax.naming.directory.Attribute attr;
SimpleNode node;
BranchNode filter = new AndNode();
NamingEnumeration<? extends javax.naming.directory.Attribute> list = matchingAttributes.getAll();
// Loop through each attribute value pair
while ( list.hasMore() )
{
attr = 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 EqualityNode<String>( attr.getID(), new org.apache.directory.shared.ldap.model.entry.StringValue( ( String ) val ) );
filter.addNode( node );
}
}
}
AliasDerefMode aliasDerefMode = AliasDerefMode.getEnum( getEnvironment() );
try
{
EntryFilteringCursor cursor = doSearchOperation( target, aliasDerefMode, filter, ctls );
return new NamingEnumerationAdapter( cursor );
}