public static ResultCodeEnum getBestEstimate()

in ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/ResultCodeEnum.java [1591:1685]


    public static ResultCodeEnum getBestEstimate( Throwable t, MessageTypeEnum type )
    {
        Set<ResultCodeEnum> set = getResultCodes( t );

        if ( set.isEmpty() )
        {
            return ResultCodeEnum.OTHER;
        }

        if ( set.size() == 1 )
        {
            return set.iterator().next();
        }

        if ( type == null )
        {
            Set<ResultCodeEnum> tmp = new HashSet<>();
            tmp.addAll( set );
            tmp.removeAll( NON_ERRONEOUS_CODES );

            if ( tmp.isEmpty() )
            {
                return ResultCodeEnum.OTHER;
            }

            return tmp.iterator().next();
        }

        Set<ResultCodeEnum> candidates;

        switch ( type )
        {
            case ABANDON_REQUEST:
                return set.iterator().next();

            case ADD_REQUEST:
            case ADD_RESPONSE:
                candidates = intersection( set, ADD_CODES );
                break;

            case BIND_REQUEST:
            case BIND_RESPONSE:
                candidates = intersection( set, BIND_CODES );
                break;

            case COMPARE_REQUEST:
            case COMPARE_RESPONSE:
                candidates = intersection( set, COMPARE_CODES );
                break;

            case DEL_REQUEST:
            case DEL_RESPONSE:
                candidates = intersection( set, DELETE_CODES );
                break;

            case EXTENDED_REQUEST:
            case EXTENDED_RESPONSE:
                candidates = intersection( set, EXTENDED_CODES );
                break;

            case MODIFYDN_REQUEST:
            case MODIFYDN_RESPONSE:
                candidates = intersection( set, MODIFYDN_CODES );
                break;

            case MODIFY_REQUEST:
            case MODIFY_RESPONSE:
                candidates = intersection( set, MODIFY_CODES );
                break;

            case SEARCH_REQUEST:
            case SEARCH_RESULT_DONE:
            case SEARCH_RESULT_ENTRY:
            case SEARCH_RESULT_REFERENCE:
            case INTERMEDIATE_RESPONSE:
                candidates = intersection( set, SEARCH_CODES );
                break;

            case UNBIND_REQUEST:
                return set.iterator().next();

            default:
                throw new IllegalArgumentException( I18n.err( I18n.ERR_13516_UNEXPECTED_MESSAGE_TYPE, type ) );
        }

        // we don't want any codes that do not have anything to do w/ errors
        candidates.removeAll( NON_ERRONEOUS_CODES );

        if ( candidates.isEmpty() )
        {
            return ResultCodeEnum.OTHER;
        }

        return candidates.iterator().next();
    }