package com.hwlcn.ldap.ldap.sdk; import com.hwlcn.core.annotation.ThreadSafety; import com.hwlcn.ldap.util.ThreadSafetyLevel; import static com.hwlcn.ldap.ldap.sdk.LDAPMessages.*; import static com.hwlcn.ldap.util.StaticUtils.*; @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) public enum DisconnectType { UNBIND(INFO_DISCONNECT_TYPE_UNBIND.get(), ResultCode.LOCAL_ERROR), BIND_FAILED(INFO_DISCONNECT_TYPE_BIND_FAILED.get(), ResultCode.CONNECT_ERROR), RECONNECT(INFO_DISCONNECT_TYPE_RECONNECT.get(), ResultCode.SERVER_DOWN), REFERRAL(INFO_DISCONNECT_TYPE_REFERRAL.get(), ResultCode.LOCAL_ERROR), SERVER_CLOSED_WITH_NOTICE( INFO_DISCONNECT_TYPE_SERVER_CLOSED_WITH_NOTICE.get(), ResultCode.SERVER_DOWN), SERVER_CLOSED_WITHOUT_NOTICE( INFO_DISCONNECT_TYPE_SERVER_CLOSED_WITHOUT_NOTICE.get(), ResultCode.SERVER_DOWN), IO_ERROR(INFO_DISCONNECT_TYPE_IO_ERROR.get(), ResultCode.SERVER_DOWN), DECODE_ERROR(INFO_DISCONNECT_TYPE_DECODE_ERROR.get(), ResultCode.DECODING_ERROR), LOCAL_ERROR(INFO_DISCONNECT_TYPE_LOCAL_ERROR.get(), ResultCode.LOCAL_ERROR), SECURITY_PROBLEM(INFO_DISCONNECT_TYPE_SECURITY_PROBLEM.get(), ResultCode.LOCAL_ERROR), POOL_CLOSED(INFO_DISCONNECT_TYPE_POOL_CLOSED.get(), ResultCode.LOCAL_ERROR), POOL_CREATION_FAILURE(INFO_DISCONNECT_TYPE_POOL_CREATION_FAILURE.get(), ResultCode.CONNECT_ERROR), POOLED_CONNECTION_DEFUNCT( INFO_DISCONNECT_TYPE_POOLED_CONNECTION_DEFUNCT.get(), ResultCode.SERVER_DOWN), POOLED_CONNECTION_EXPIRED( INFO_DISCONNECT_TYPE_POOLED_CONNECTION_EXPIRED.get(), ResultCode.LOCAL_ERROR), POOLED_CONNECTION_UNNEEDED( INFO_DISCONNECT_TYPE_POOLED_CONNECTION_UNNEEDED.get(), ResultCode.LOCAL_ERROR), UNKNOWN(INFO_DISCONNECT_TYPE_UNKNOWN.get(), ResultCode.LOCAL_ERROR), CLOSED_BY_FINALIZER(INFO_DISCONNECT_TYPE_CLOSED_BY_FINALIZER.get(), ResultCode.LOCAL_ERROR), OTHER(INFO_DISCONNECT_TYPE_OTHER.get(), ResultCode.LOCAL_ERROR); private final ResultCode resultCode; private final String description; private DisconnectType(final String description, final ResultCode resultCode) { this.description = description; this.resultCode = resultCode; } public String getDescription() { return description; } public ResultCode getResultCode() { return resultCode; } public static DisconnectType forName(final String name) { final String lowerName = toLowerCase(name); if (lowerName.equals("unbind")) { return UNBIND; } else if (lowerName.equals("bind_failed")) { return BIND_FAILED; } else if (lowerName.equals("reconnect")) { return RECONNECT; } else if (lowerName.equals("referral")) { return REFERRAL; } else if (lowerName.equals("server_closed_with_notice")) { return SERVER_CLOSED_WITH_NOTICE; } else if (lowerName.equals("server_closed_without_notice")) { return SERVER_CLOSED_WITHOUT_NOTICE; } else if (lowerName.equals("io_error")) { return IO_ERROR; } else if (lowerName.equals("decode_error")) { return DECODE_ERROR; } else if (lowerName.equals("local_error")) { return LOCAL_ERROR; } else if (lowerName.equals("security_problem")) { return SECURITY_PROBLEM; } else if (lowerName.equals("pool_closed")) { return POOL_CLOSED; } else if (lowerName.equals("pool_creation_failure")) { return POOL_CREATION_FAILURE; } else if (lowerName.equals("pooled_connection_defunct")) { return POOLED_CONNECTION_DEFUNCT; } else if (lowerName.equals("pooled_connection_expired")) { return POOLED_CONNECTION_EXPIRED; } else if (lowerName.equals("pooled_connection_unneeded")) { return POOLED_CONNECTION_UNNEEDED; } else if (lowerName.equals("unknown")) { return UNKNOWN; } else if (lowerName.equals("closed_by_finalizer")) { return CLOSED_BY_FINALIZER; } else if (lowerName.equals("other")) { return OTHER; } return null; } public static boolean isExpected(final DisconnectType disconnectType) { switch (disconnectType) { case UNBIND: case RECONNECT: case REFERRAL: case POOL_CLOSED: case POOLED_CONNECTION_DEFUNCT: case POOLED_CONNECTION_EXPIRED: case POOLED_CONNECTION_UNNEEDED: case CLOSED_BY_FINALIZER: return true; default: return false; } } @Override() public String toString() { final StringBuilder buffer = new StringBuilder(); toString(buffer); return buffer.toString(); } public void toString(final StringBuilder buffer) { buffer.append("DisconnectType(name='"); buffer.append(name()); buffer.append("', resultCode='"); buffer.append(resultCode); buffer.append("', description='"); buffer.append(description); buffer.append("')"); } }