/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.service.protocol;
import java.util.*;
import net.java.sip.communicator.service.protocol.event.*;
/**
* Represents an <tt>OperationSet</tt> to query the <tt>OperationSet</tt>s
* supported for a specific <tt>Contact</tt>. The <tt>OperationSet</tt>s
* reported as supported for a specific <tt>Contact</tt> are considered by the
* associated protocol provider to be capabilities possessed by the
* <tt>Contact</tt> in question.
*
* @author Lyubomir Marinov
*/
public interface OperationSetContactCapabilities
extends OperationSet
{
/**
* Registers a specific <tt>ContactCapabilitiesListener</tt> to be notified
* about changes in the list of <tt>OperationSet</tt> capabilities of
* <tt>Contact</tt>s. If the specified <tt>listener</tt> has already been
* registered, adding it again has no effect.
*
* @param listener the <tt>ContactCapabilitiesListener</tt> which is to be
* notified about changes in the list of <tt>OperationSet</tt> capabilities
* of <tt>Contact</tt>s
*/
public void addContactCapabilitiesListener(
ContactCapabilitiesListener listener);
/**
* Gets the <tt>OperationSet</tt> corresponding to the specified
* <tt>Class</tt> and supported by the specified <tt>Contact</tt>. If the
* returned value is non-<tt>null</tt>, it indicates that the
* <tt>Contact</tt> is considered by the associated protocol provider to
* possess the <tt>opsetClass</tt> capability. Otherwise, the associated
* protocol provider considers <tt>contact</tt> to not have the
* <tt>opsetClass</tt> capability.
*
* @param <T> the type extending <tt>OperationSet</tt> for which the
* specified <tt>contact</tt> is to be checked whether it possesses it as a
* capability
* @param contact the <tt>Contact</tt> for which the <tt>opsetClass</tt>
* capability is to be queried
* @param opsetClass the <tt>OperationSet</tt> <tt>Class</tt> for which the
* specified <tt>contact</tt> is to be checked whether it possesses it as a
* capability
* @return the <tt>OperationSet</tt> corresponding to the specified
* <tt>opsetClass</tt> which is considered by the associated protocol
* provider to be possessed as a capability by the specified
* <tt>contact</tt>; otherwise, <tt>null</tt>
*/
public <T extends OperationSet> T getOperationSet(
Contact contact,
Class<T> opsetClass);
/**
* Gets the <tt>OperationSet</tt>s supported by a specific <tt>Contact</tt>.
* The returned <tt>OperationSet</tt>s are considered by the associated
* protocol provider to capabilities possessed by the specified
* <tt>contact</tt>.
*
* @param contact the <tt>Contact</tt> for which the supported
* <tt>OperationSet</tt> capabilities are to be retrieved
* @return a <tt>Map</tt> listing the <tt>OperationSet</tt>s considered by
* the associated protocol provider to be supported by the specified
* <tt>contact</tt> (i.e. to be possessed as capabilities). Each supported
* <tt>OperationSet</tt> capability is represented by a <tt>Map.Entry</tt>
* with key equal to the <tt>OperationSet</tt> class name and value equal to
* the respective <tt>OperationSet</tt> instance
*/
public Map<String, OperationSet> getSupportedOperationSets(Contact contact);
/**
* Unregisters a specific <tt>ContactCapabilitiesListener</tt> to no longer
* be notified about changes in the list of <tt>OperationSet</tt>
* capabilities of <tt>Contact</tt>s. If the specified <tt>listener</tt> has
* already been unregistered or has never been registered, removing it has
* no effect.
*
* @param listener the <tt>ContactCapabilitiesListener</tt> which is to no
* longer be notified about changes in the list of <tt>OperationSet</tt>
* capabilities of <tt>Contact</tt>s
*/
public void removeContactCapabilitiesListener(
ContactCapabilitiesListener listener);
}