/*
* 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 net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.protocol.*;
/**
* The <tt>PluginComponent</tt> is an interface meant to be implemented by
* all plugins that would like to add a user interface component to a particular
* container in the graphical user interface (GUI). In order to appear in the
* GUI all implementations of this interface should be registered through the
* OSGI bundle context using <tt>PluginComponentFactory</tt>.
* <p>
* All components interested in the current contact or group that they're
* dealing with (i.g. the one selected in the contact list for example), should
* implement the <tt>setCurrentContact</tt> and
* <tt>setCurrentContactGroup</tt> methods.
* <p>
* <p>
* All components interested in the current account that they're dealing
* with (i.g. the one selected in the account list for example), should
* implement the <tt>setCurrentAccountID</tt> method.
* <p>
* Note that <tt>getComponent</tt> should return a valid AWT, SWT or Swing
* control in order to appear properly in the GUI.
*
* @author Yana Stamcheva
*/
public interface PluginComponent
{
/**
* Returns the name of this plugin component. This name could be used as a
* label when the component is added to a container, which requires a title.
* A container that could request a name is for example a tabbed pane.
*
* @return the name of this plugin component
*/
public String getName();
/**
* Returns the component that should be added. This method should return a
* valid AWT, SWT or Swing object in order to appear properly in the user
* interface.
*
* @return the component that should be added.
*/
public Object getComponent();
/**
* Returns the position of this <tt>PluginComponent</tt> within its
* <tt>Container</tt>
*
* @return The position of this <tt>PluginComponent</tt> within its
* <tt>Container</tt>
*/
public int getPositionIndex();
/**
* Sets the current contact. Meant to be used by plugin components that
* are interested of the current contact. The current contact is the contact
* for the currently selected chat transport.
*
* @param contact the current contact
*/
public void setCurrentContact(Contact contact);
/**
* Sets the current contact. Meant to be used by plugin components that
* are interested of the current contact. The current contact is the contact
* for the currently selected chat transport.
*
* @param contact the current contact
* @param resourceName the <tt>ContactResource</tt> name. Some components
* may be interested in a particular ContactResource of a contact.
*/
public void setCurrentContact(Contact contact, String resourceName);
/**
* Sets the current meta contact. Meant to be used by plugin components that
* are interested of the current contact. The current contact could be the
* contact currently selected in the contact list or the contact for the
* currently selected chat, etc. It depends on the container, where this
* component is meant to be added.
*
* @param metaContact the current meta contact
*/
public void setCurrentContact(MetaContact metaContact);
/**
* Sets the current meta group. Meant to be used by plugin components that
* are interested of the current meta group. The current group is always
* the currently selected group in the contact list. If the group passed
* here is null, this means that no group is selected.
*
* @param metaGroup the current meta contact group
*/
public void setCurrentContactGroup(MetaContactGroup metaGroup);
/**
* Sets the current AccountID. Meant to be used by plugin components that are
* interested in the current AccountID. The current AccountID could be that
* of a currently selected account in the account list. It depends on the
* container, where this component is meant to be added.
*
* @param account the current account.
*/
public void setCurrentAccountID(AccountID accountID);
/**
* Returns the factory that has created the component.
* @return the parent factory.
*/
public PluginComponentFactory getParentFactory();
}