/* * 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.impl.protocol.icq; import net.java.sip.communicator.service.protocol.*; import net.kano.joustsim.Screenname; /** * Contains methods that would allow service users to re-request authorizations * to add a contact to their contact list or, send them an authorization before * having been asked. * * @author Damian Minkov */ public class OperationSetExtendedAuthorizationsIcqImpl implements OperationSetExtendedAuthorizations { /** * A callback to the ICQ provider that created us. */ private ProtocolProviderServiceIcqImpl icqProvider = null; /** * Creates a new instance of OperationSetExtendedAuthorizationsIcqImpl * @param icqProvider IcqProtocolProviderServiceImpl */ public OperationSetExtendedAuthorizationsIcqImpl( ProtocolProviderServiceIcqImpl icqProvider) { this.icqProvider = icqProvider; } /** * Send an authorization request, requesting contact to add them * to our contact list? * * @param request the AuthorizationRequest that we'd like the * protocol provider to send to contact. * @param contact the Contact who we'd be asking for an * authorization. * @throws OperationFailedException if we fail sending the authorization * request. */ public void reRequestAuthorization(AuthorizationRequest request, Contact contact) throws OperationFailedException { assertConnected(); if(! (contact instanceof ContactIcqImpl) ) throw new IllegalArgumentException( "Argument is not an icq contact (contact=" + contact + ")"); icqProvider.getAimConnection().getSsiService().requestBuddyAuthorization( new Screenname(contact.getAddress()), request.getReason()); } /** * Send a positive authorization to contact thus allowing them to * add us to their contact list without needing to first request an * authorization. * * @param contact the Contact whom we're granting authorization * prior to receiving a request. * @throws OperationFailedException if we fail sending the authorization. */ public void explicitAuthorize(Contact contact) throws OperationFailedException { assertConnected(); if(! (contact instanceof ContactIcqImpl) ) throw new IllegalArgumentException( "Argument is not an icq contact (contact=" + contact + ")"); icqProvider.getAimConnection().getSsiService().sendFutureBuddyAuthorization( new Screenname(contact.getAddress()), ""); } /** * Utility method throwing an exception if the icq stack is not properly * initialized. * @throws java.lang.IllegalStateException if the underlying ICQ stack is * not registered and initialized. */ private void assertConnected() throws IllegalStateException { if (icqProvider == null) throw new IllegalStateException( "The icq provider must be non-null and signed on the ICQ " +"service before being able to communicate."); if (!icqProvider.isRegistered()) throw new IllegalStateException( "The icq provider must be signed on the ICQ service before " +"being able to communicate."); } }