/*
* 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.gui;
import java.awt.*;
import java.util.*;
import java.util.List;
import net.java.sip.communicator.service.contactsource.*;
import net.java.sip.communicator.service.gui.event.*;
/**
* The <tt>ContactList</tt> interface represents a contact list. All contact
* list components that need to be available as a service could implement
* this interface.
*
* @author Yana Stamcheva
*/
public interface ContactList
extends ContactQueryListener,
MetaContactQueryListener
{
/**
* Returns the actual component corresponding to the contact list.
*
* @return the actual component corresponding to the contact list
*/
public Component getComponent();
/**
* Returns the list of registered contact sources to search in.
*
* @return the list of registered contact sources to search in
*/
public Collection<UIContactSource> getContactSources();
/**
* Returns the <tt>ExternalContactSource</tt> corresponding to the given
* <tt>ContactSourceService</tt>.
*
* @param contactSource the <tt>ContactSourceService</tt>, which
* corresponding external source implementation we're looking for
* @return the <tt>ExternalContactSource</tt> corresponding to the given
* <tt>ContactSourceService</tt>
*/
public UIContactSource getContactSource(ContactSourceService contactSource);
/**
* Adds the given contact source to the list of available contact sources.
*
* @param contactSource the <tt>ContactSourceService</tt>
*/
public void addContactSource(ContactSourceService contactSource);
/**
* Removes the given contact source from the list of available contact
* sources.
*
* @param contactSource
*/
public void removeContactSource(ContactSourceService contactSource);
/**
* Removes all stored contact sources.
*/
public void removeAllContactSources();
/**
* Sets the default filter to the given <tt>filter</tt>.
* @param filter the <tt>ContactListFilter</tt> to set as default
*/
public void setDefaultFilter(ContactListFilter filter);
/**
* Gets the default filter for this contact list.
*
* @return the default filter for this contact list
*/
public ContactListFilter getDefaultFilter();
/**
* Returns all <tt>UIContactSource</tt>s of the given type.
*
* @param type the type of sources we're looking for
* @return a list of all <tt>UIContactSource</tt>s of the given type
*/
public List<UIContactSource> getContactSources(int type);
/**
* Adds the given group to this list.
*
* @param group the <tt>UIGroup</tt> to add
* @param isSorted indicates if the contact should be sorted regarding to
* the <tt>GroupNode</tt> policy
*/
public void addGroup(final UIGroup group, final boolean isSorted);
/**
* Removes the given group and its children from the list.
*
* @param group the <tt>UIGroup</tt> to remove
*/
public void removeGroup(final UIGroup group);
/**
* Adds the given <tt>contact</tt> to this list.
*
* @param contact the <tt>UIContact</tt> to add
* @param group the <tt>UIGroup</tt> to add to
* @param isContactSorted indicates if the contact should be sorted
* regarding to the <tt>GroupNode</tt> policy
* @param isGroupSorted indicates if the group should be sorted regarding to
* the <tt>GroupNode</tt> policy in case it doesn't exist and should be
* added
*/
public void addContact( final UIContact contact,
final UIGroup group,
final boolean isContactSorted,
final boolean isGroupSorted);
/**
* Adds the given <tt>contact</tt> to this list.
*
* @param query the <tt>ContactQuery</tt> that adds the given contact
* @param contact the <tt>UIContact</tt> to add
* @param group the <tt>UIGroup</tt> to add to
* @param isSorted indicates if the contact should be sorted regarding to
* the <tt>GroupNode</tt> policy
*/
public void addContact(final ContactQuery query,
final UIContact contact,
final UIGroup group,
final boolean isSorted);
/**
* Removes the node corresponding to the given <tt>MetaContact</tt> from
* this list.
*
* @param contact the <tt>UIContact</tt> to remove
* @param removeEmptyGroup whether we should delete the group if is empty
*/
public void removeContact( final UIContact contact,
final boolean removeEmptyGroup);
/**
* Removes the node corresponding to the given <tt>MetaContact</tt> from
* this list.
*
* @param contact the <tt>UIContact</tt> to remove
*/
public void removeContact(UIContact contact);
/**
* Removes all entries in this contact list.
*/
public void removeAll();
/**
* Returns a collection of all direct child <tt>UIContact</tt>s of the given
* <tt>UIGroup</tt>.
*
* @param group the parent <tt>UIGroup</tt>
* @return a collection of all direct child <tt>UIContact</tt>s of the given
* <tt>UIGroup</tt>
*/
public Collection<UIContact> getContacts(final UIGroup group);
/**
* Returns the currently applied filter.
*
* @return the currently applied filter
*/
public ContactListFilter getCurrentFilter();
/**
* Returns the currently applied filter.
*
* @return the currently applied filter
*/
public FilterQuery getCurrentFilterQuery();
/**
* Applies the given <tt>filter</tt>.
*
* @param filter the <tt>ContactListFilter</tt> to apply.
* @return the filter query
*/
public FilterQuery applyFilter(ContactListFilter filter);
/**
* Applies the default filter.
*
* @return the filter query that keeps track of the filtering results
*/
public FilterQuery applyDefaultFilter();
/**
* Returns the currently selected <tt>UIContact</tt>. In case of a multiple
* selection returns the first contact in the selection.
*
* @return the currently selected <tt>UIContact</tt> if there's one.
*/
public UIContact getSelectedContact();
/**
* Returns the list of selected contacts.
*
* @return the list of selected contacts
*/
public List<UIContact> getSelectedContacts();
/**
* Returns the currently selected <tt>UIGroup</tt> if there's one.
*
* @return the currently selected <tt>UIGroup</tt> if there's one.
*/
public UIGroup getSelectedGroup();
/**
* Selects the given <tt>UIContact</tt> in the contact list.
*
* @param uiContact the contact to select
*/
public void setSelectedContact(UIContact uiContact);
/**
* Selects the given <tt>UIGroup</tt> in the contact list.
*
* @param uiGroup the group to select
*/
public void setSelectedGroup(UIGroup uiGroup);
/**
* Selects the first found contact node from the beginning of the contact
* list.
*/
public void selectFirstContact();
/**
* Removes the current selection.
*/
public void removeSelection();
/**
* Adds a listener for <tt>ContactListEvent</tt>s.
*
* @param listener the listener to add
*/
public void addContactListListener(ContactListListener listener);
/**
* Removes a listener previously added with <tt>addContactListListener</tt>.
*
* @param listener the listener to remove
*/
public void removeContactListListener(ContactListListener listener);
/**
* Refreshes the given <tt>UIContact</tt>.
*
* @param uiContact the contact to refresh
*/
public void refreshContact(UIContact uiContact);
/**
* Indicates if this contact list is empty.
*
* @return <tt>true</tt> if this contact list contains no children,
* otherwise returns <tt>false</tt>
*/
public boolean isEmpty();
/**
* Shows/hides buttons shown in contact row.
*
* @param isVisible <tt>true</tt> to show contact buttons, <tt>false</tt> -
* otherwise.
*/
public void setContactButtonsVisible(boolean isVisible);
/**
* Shows/hides buttons shown in contact row.
*
* return <tt>true</tt> to indicate that contact buttons are shown,
* <tt>false</tt> - otherwise.
*/
public boolean isContactButtonsVisible();
/**
* Enables/disables multiple selection.
*
* @param isEnabled <tt>true</tt> to enable multiple selection,
* <tt>false</tt> - otherwise
*/
public void setMultipleSelectionEnabled(boolean isEnabled);
/**
* Enables/disables drag operations on this contact list.
*
* @param isEnabled <tt>true</tt> to enable drag operations, <tt>false</tt>
* otherwise
*/
public void setDragEnabled(boolean isEnabled);
/**
* Enables/disables the right mouse click menu.
*
* @param isEnabled <tt>true</tt> to enable right button menu,
* <tt>false</tt> otherwise.
*/
public void setRightButtonMenuEnabled(boolean isEnabled);
}