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();
}