Jitsi: the OpenSource Java VoIP and Instant Messaging client.

net.java.sip.communicator.impl.protocol.msn
Class OperationSetServerStoredAccountInfoMsnImpl

java.lang.Object
  extended by net.java.sip.communicator.service.protocol.AbstractOperationSetServerStoredAccountInfo
      extended by net.java.sip.communicator.impl.protocol.msn.OperationSetServerStoredAccountInfoMsnImpl
All Implemented Interfaces:
EventListener, RegistrationStateChangeListener, OperationSet, OperationSetServerStoredAccountInfo

public class OperationSetServerStoredAccountInfoMsnImpl
extends AbstractOperationSetServerStoredAccountInfo
implements RegistrationStateChangeListener

Saves account avatar image. If one is already saved we set it as initial one for the MsnOwner.

Author:
SR, Damian Minkov

Constructor Summary
protected OperationSetServerStoredAccountInfoMsnImpl(ProtocolProviderServiceMsnImpl msnProvider, String uin)
          Constructor.
 
Method Summary
 void addDetail(ServerStoredDetails.GenericDetail detail)
          Adds the specified detail to the list of details registered on-line for this account.
 Iterator<ServerStoredDetails.GenericDetail> getAllAvailableDetails()
          Returns all details currently available and set for our account.
(package private)  List<ServerStoredDetails.GenericDetail> getContactDetails(String contactAddress)
          request the full info for the given contactAddress waits and return this details
 Iterator<ServerStoredDetails.GenericDetail> getDetails(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
          Returns an iterator over all details that are instances of exactly the same class as the one specified.
 Iterator<ServerStoredDetails.GenericDetail> getDetailsAndDescendants(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
          Returns an iterator over all details that are instances or descendants of the specified class.
 int getMaxDetailInstances(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
          The method returns the number of instances supported for a particular detail type.
 Iterator<Class<? extends ServerStoredDetails.GenericDetail>> getSupportedDetailTypes()
          Returns all detail Class-es that the underlying implementation supports setting.
 boolean isDetailClassSupported(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
          Determines whether a detail class represents a detail supported by the underlying implementation or not.
 void registrationStateChanged(RegistrationStateChangeEvent evt)
          The method is called by a ProtocolProviderService implementation whenever a change in the registration state of the corresponding provider had occurred.
 boolean removeDetail(ServerStoredDetails.GenericDetail detail)
          Removes the specified detail from the list of details stored online for this account.
 boolean replaceDetail(ServerStoredDetails.GenericDetail currentDetailValue, ServerStoredDetails.GenericDetail newDetailValue)
          Replaces the currentDetailValue detail with newDetailValue and returns true if the operation was a success or false if currentDetailValue did not previously exist (in this case an additional call to addDetail is required).
 
Methods inherited from class net.java.sip.communicator.service.protocol.AbstractOperationSetServerStoredAccountInfo
addServerStoredDetailsChangeListener, fireServerStoredDetailsChangeEvent, removeServerStoredDetailsChangeListener
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OperationSetServerStoredAccountInfoMsnImpl

protected OperationSetServerStoredAccountInfoMsnImpl(ProtocolProviderServiceMsnImpl msnProvider,
                                                     String uin)
Constructor.

Parameters:
msnProvider - MSN service provider
uin - MSN UIN
Method Detail

getDetailsAndDescendants

public Iterator<ServerStoredDetails.GenericDetail> getDetailsAndDescendants(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
Returns an iterator over all details that are instances or descendants of the specified class. If for example an our account has a work address and an address detail, a call to this method with AddressDetail.class would return both of them.

Specified by:
getDetailsAndDescendants in interface OperationSetServerStoredAccountInfo
Parameters:
detailClass - one of the detail classes defined in the ServerStoredDetails class, indicating the kind of details we're interested in.

Returns:
a java.util.Iterator over all details that are instances or descendants of the specified class.

getContactDetails

List<ServerStoredDetails.GenericDetail> getContactDetails(String contactAddress)
request the full info for the given contactAddress waits and return this details

Parameters:
contactAddress - String
Returns:
Vector the details

getDetails

public Iterator<ServerStoredDetails.GenericDetail> getDetails(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
Returns an iterator over all details that are instances of exactly the same class as the one specified. Not that, contrary to the getDetailsAndDescendants() method this one would only return details that are instances of the specified class and not only its descendants. If for example our account has both a work address and an address detail, a call to this method with AddressDetail.class would return only the AddressDetail instance and not the WorkAddressDetail instance.

Specified by:
getDetails in interface OperationSetServerStoredAccountInfo
Parameters:
detailClass - one of the detail classes defined in the ServerStoredDetails class, indicating the kind of details we're interested in.

Returns:
a java.util.Iterator over all details of specified class.

getAllAvailableDetails

public Iterator<ServerStoredDetails.GenericDetail> getAllAvailableDetails()
Returns all details currently available and set for our account.

Specified by:
getAllAvailableDetails in interface OperationSetServerStoredAccountInfo
Returns:
a java.util.Iterator over all details currently set our account.

getSupportedDetailTypes

public Iterator<Class<? extends ServerStoredDetails.GenericDetail>> getSupportedDetailTypes()
Returns all detail Class-es that the underlying implementation supports setting. Note that if you call one of the modification methods (add remove or replace) with a detail not contained by the iterator returned by this method, an IllegalArgumentException will be thrown.

Specified by:
getSupportedDetailTypes in interface OperationSetServerStoredAccountInfo
Returns:
a java.util.Iterator over all detail classes supported by the implementation.

isDetailClassSupported

public boolean isDetailClassSupported(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
Determines whether a detail class represents a detail supported by the underlying implementation or not. Note that if you call one of the modification methods (add remove or replace) with a detail that this method has determined to be unsupported (returned false) this would lead to an IllegalArgumentException being thrown.

Specified by:
isDetailClassSupported in interface OperationSetServerStoredAccountInfo
Parameters:
detailClass - the class the support for which we'd like to determine.

Returns:
true if the underlying implementation supports setting details of this type and false otherwise.

getMaxDetailInstances

public int getMaxDetailInstances(Class<? extends ServerStoredDetails.GenericDetail> detailClass)
The method returns the number of instances supported for a particular detail type. Some protocols offer storing multiple values for a particular detail type. Spoken languages are a good example.

Specified by:
getMaxDetailInstances in interface OperationSetServerStoredAccountInfo
Parameters:
detailClass - the class whose max instance number we'd like to find out.

Returns:
int the maximum number of detail instances.

addDetail

public void addDetail(ServerStoredDetails.GenericDetail detail)
               throws IllegalArgumentException,
                      OperationFailedException,
                      ArrayIndexOutOfBoundsException
Adds the specified detail to the list of details registered on-line for this account. If such a detail already exists its max instance number is consulted and if it allows it - a second instance is added or otherwise and illegal argument exception is thrown. An IllegalArgumentException is also thrown in case the class of the specified detail is not supported by the underlying implementation, i.e. its class name was not returned by the getSupportedDetailTypes() method.

Specified by:
addDetail in interface OperationSetServerStoredAccountInfo
Parameters:
detail - the detail that we'd like registered on the server.

Throws:
IllegalArgumentException - if such a detail already exists and its max instances number has been attained or if the underlying implementation does not support setting details of the corresponding class.
OperationFailedException - with code Network Failure if putting the new value online has failed
ArrayIndexOutOfBoundsException - if the number of instances currently registered by the application is already equal to the maximum number of supported instances (@see getMaxDetailInstances())

removeDetail

public boolean removeDetail(ServerStoredDetails.GenericDetail detail)
                     throws OperationFailedException
Removes the specified detail from the list of details stored online for this account. The method returns a boolean indicating if such a detail was found (and removed) or not.

Specified by:
removeDetail in interface OperationSetServerStoredAccountInfo
Parameters:
detail - the detail to remove
Returns:
true if the specified detail existed and was successfully removed and false otherwise.
Throws:
OperationFailedException - with code Network Failure if removing the detail from the server has failed

replaceDetail

public boolean replaceDetail(ServerStoredDetails.GenericDetail currentDetailValue,
                             ServerStoredDetails.GenericDetail newDetailValue)
                      throws ClassCastException,
                             OperationFailedException
Replaces the currentDetailValue detail with newDetailValue and returns true if the operation was a success or false if currentDetailValue did not previously exist (in this case an additional call to addDetail is required).

Specified by:
replaceDetail in interface OperationSetServerStoredAccountInfo
Parameters:
currentDetailValue - the detail value we'd like to replace.
newDetailValue - the value of the detail that we'd like to replace currentDetailValue with.
Returns:
true if the operation was a success or false if currentDetailValue did not previously exist (in this case an additional call to addDetail is required).
Throws:
ClassCastException - if newDetailValue is not an instance of the same class as currentDetailValue.
OperationFailedException - with code Network Failure if putting the new value back online has failed

registrationStateChanged

public void registrationStateChanged(RegistrationStateChangeEvent evt)
The method is called by a ProtocolProviderService implementation whenever a change in the registration state of the corresponding provider had occurred.

Specified by:
registrationStateChanged in interface RegistrationStateChangeListener
Parameters:
evt - the event describing the status change.

Jitsi: the OpenSource Java VoIP and Instant Messaging client.

Jitsi, the OpenSource Java VoIP and Instant Messaging client.
Distributable under LGPL license.