list = substringEnumerator.enumerate( ( SubstringNode ) leaf );
list = substringEnumerator.enumerate( leaf );
    public NamingEnumeration enumerate( ExprNode node ) throws NamingException    {        NamingEnumeration list = null;        if ( node instanceof ScopeNode )        {            list = scopeEnumerator.enumerate( ( ScopeNode ) node );        }        else if ( node instanceof AssertionNode )        {            throw new IllegalArgumentException( "Cannot produce enumeration "                 + "on an AssertionNode" );        }        else if ( node.isLeaf() )         {            LeafNode leaf = ( LeafNode ) node;            switch( leaf.getAssertionType() )            {            case( LeafNode.APPROXIMATE ):                list = enumEquality( ( SimpleNode ) node );                break;            case( LeafNode.EQUALITY ):                list = enumEquality( ( SimpleNode ) node );                break;            case( LeafNode.EXTENSIBLE ):                // N O T   I M P L E M E N T E D   Y E T !                throw new NotImplementedException();            case( LeafNode.GREATEREQ ):                list = enumGreater( ( SimpleNode ) node, true );                break;            case( LeafNode.LESSEQ ):                list = enumGreater( ( SimpleNode ) node, false );                break;            case( LeafNode.PRESENCE ):                list = enumPresence( ( PresenceNode ) node );                break;            case( LeafNode.SUBSTRING ):                list = substringEnumerator.enumerate( ( SubstringNode )                    leaf );                break;            default:                throw new IllegalArgumentException( "Unknown leaf assertion" );            }        }         else         {            BranchNode branch = ( BranchNode ) node;                        switch( branch.getOperator() )            {            case( BranchNode.AND ):                list = enumConj( branch );                break;            case( BranchNode.NOT ):                list = enumNeg( branch );                break;            case( BranchNode.OR ):                list = enumDisj( branch );                break;            default:                throw new IllegalArgumentException(                     "Unknown branch logical operator" );            }        }        return list;    }