/* * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. * * Distributable under LGPL license. * See terms of license at gnu.org. */ package net.java.sip.communicator.service.protocol.event; import java.beans.*; import net.java.sip.communicator.service.protocol.*; /** * Instances of this class represent a change in the status of the provider * that triggerred them. A status change may have occurred because the user * requested it or because an error or a failure have occurred, in which case * the reason and reason code would be set accordingly. * <p> * Keep in mind that reasons are not localized and services such as the user * interface should only show them in a "details box". In the rest of the time, * such services should consult the error code and provide corresponding, * localized, reason phrases. * <p> * Note, that we have tried to provide a maximum number of error codes in order * to enumerate all possible reason codes that may be returned from servers * in the various protocols. Each protocol would only return a subset of these. * <p> * @author Emil Ivov */ public class RegistrationStateChangeEvent extends PropertyChangeEvent { /** * Indicates that no reason is specified for this event transition. */ public static final int REASON_NOT_SPECIFIED = -1; /** * Indicates that the change in the registration state that has just * occurred has been requested by the user. */ public static final int REASON_USER_REQUEST = 0; /** * Indicates that the server has refused registration due to a problem with * the authentication (most probably a wrong password). */ public static final int REASON_AUTHENTICATION_FAILED = 1; /** * Indicates that the same user identifier has logged somewhere else. This * code is often returned when transitting into disconnected state. Some * protocols, however, support multiple logins and servers would only return * this code for purely informational reasons. */ public static final int REASON_MULTIPLE_LOGINS = 2; /** * Indicates that the server does not recognize the used idenfitier that * we tried to register with. */ public static final int REASON_NON_EXISTING_USER_ID = 3; /** * Indicates that we have too many existing registrations from the local * IP address and the server won't allow us to open any more of them. */ public static final int REASON_CLIENT_LIMIT_REACHED_FOR_IP = 4; /** * Indicates that we have been disconnecting and reconnecting to the server * at a rate that ha become too fast. We're temporarily banned and would * have to wait a bit before trying again. It is often a good idea for the * user interface to prevent the user from actually trying again for a * certain amount of time. */ public static final int REASON_RECONNECTION_RATE_LIMIT_EXCEEDED = 5; /** * Indicates that an internal application error has occurred and it resulted * in the state transition indicated by this event. */ public static final int REASON_INTERNAL_ERROR = 6; /** * Indicates that the specified server was not found (i.e. the fqdn was not * resolved or the ip address was not reachable). */ public static final int REASON_SERVER_NOT_FOUND = 8; /** * The reason code returned by the server in order to explain the state * transition. */ private int reasonCode = REASON_NOT_SPECIFIED; /** * A (non localized) String containing information further explaining the * reason code. */ private String reason = null; /** * Creates an event instance indicating a change of the provider state * from <tt>oldValue</tt> to <tt>newValue</tt>. * * @param source the provider that generated the event * @param oldValue the status the source provider was int before enetering * the new state. * @param newValue the status the source provider is currently in. * @param reasonCode a value corresponding to one of the REASON_XXX fields * of this class, indicating the reason for this state transition. * @param reason a String further explaining the reason code or null if * no such explanation is necessary. */ public RegistrationStateChangeEvent( ProtocolProviderService source, RegistrationState oldValue, RegistrationState newValue, int reasonCode, String reason) { super(source, RegistrationStateChangeEvent.class.getName(), oldValue, newValue); this.reasonCode = reasonCode; this.reason = reason; } /** * Returns the provider that has genereted this event * @return the provider that generated the event. */ public ProtocolProviderService getProvider() { return (ProtocolProviderService)getSource(); } /** * Returns the status of the provider before this event took place. * @return a RegistrationState instance indicating the event the source * provider was in before it entered its new state. */ public RegistrationState getOldState() { return (RegistrationState)super.getOldValue(); } /** * Returns the status of the provider after this event took place. * (i.e. at the time the event is being dispatched). * @return a RegistrationState instance indicating the event the source * provider is in after the status change occurred. */ public RegistrationState getNewState() { return (RegistrationState)super.getNewValue(); } /** * Returns a string representation of this event. * @return a String containing the name of the event as well as the names * of the old and new <tt>RegistrationState</tt>s */ public String toString() { return "RegistrationStateChangeEvent[ oldState=" + getOldState().getStateName() + "; newState="+ getNewState() + ";reasonCode=" + getReasonCode() + ";reason=" + getReason() + "]"; } /** * One of the REASON_XXX fields, indicating the reason code returned by the * server in order to explain the state transition. * * @return a value corresponding toone of the REASON_XXX fields of this * class. */ public int getReasonCode() { return reasonCode; } /** * Returns a (non localized) String containing information further * explaining the reason code, or null if no particular reason has been * specified. * * Keep in mind that reason String-s returned by this method are not * localized and services such as the user interface should only show them * in a "details box". In the rest of the time, such services should consult * the error code and provide corresponding, localized, reason phrases. * * @return a non localized String explaining the reason for the state * transition. */ public String getReason() { return reason; } }