/* * 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.impl.gui.main.chat.menus; import java.awt.*; import java.awt.event.*; import java.util.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.event.*; import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.gui.Container; import net.java.sip.communicator.util.*; import org.osgi.framework.*; /** * The <tt>HelpMenu</tt> is a menu in the main application menu bar. * * @author Yana Stamcheva * @author Lubomir Marinov */ public class HelpMenu extends SIPCommMenu implements ActionListener, PluginComponentListener { private final Logger logger = Logger.getLogger(HelpMenu.class.getName()); /** * Creates an instance of <tt>HelpMenu</tt>. * @param chatWindow The parent <tt>MainFrame</tt>. */ public HelpMenu(ChatWindow chatWindow) { super(GuiActivator.getResources().getI18NString("service.gui.HELP")); this.setMnemonic( GuiActivator.getResources().getI18nMnemonic("service.gui.HELP")); this.initPluginComponents(); } /** * Runs clean-up for associated resources which need explicit disposal (e.g. * listeners keeping this instance alive because they were added to the * model which operationally outlives this instance). */ public void dispose() { GuiActivator.getUIService().removePluginComponentListener(this); /* * Let go of all Components contributed by PluginComponents because the * latter will still live in the contribution store. */ removeAll(); } /** * Initialize plugin components already registered for this container. */ private void initPluginComponents() { // Search for plugin components registered through the OSGI bundle // context. Collection<ServiceReference<PluginComponentFactory>> serRefs; String osgiFilter = "(" + Container.CONTAINER_ID + "=" + Container.CONTAINER_CHAT_HELP_MENU.getID() + ")"; try { serRefs = GuiActivator.bundleContext.getServiceReferences( PluginComponentFactory.class, osgiFilter); } catch (InvalidSyntaxException ex) { serRefs = null; logger.error("Could not obtain plugin reference.", ex); } if ((serRefs != null) && !serRefs.isEmpty()) { for (ServiceReference<PluginComponentFactory> serRef : serRefs) { PluginComponentFactory factory = GuiActivator.bundleContext.getService(serRef); PluginComponent component = factory.getPluginComponentInstance(HelpMenu.this); add((Component) component.getComponent()); } } GuiActivator.getUIService().addPluginComponentListener(this); } /** * Handles the <tt>ActionEvent</tt> when one of the menu items is * selected. */ public void actionPerformed(ActionEvent e) { } public void pluginComponentAdded(PluginComponentEvent event) { PluginComponentFactory factory = event.getPluginComponentFactory(); if (factory.getContainer().equals(Container.CONTAINER_CHAT_HELP_MENU)) { this.add( (Component)factory.getPluginComponentInstance(HelpMenu.this) .getComponent()); this.revalidate(); this.repaint(); } } public void pluginComponentRemoved(PluginComponentEvent event) { PluginComponentFactory factory = event.getPluginComponentFactory(); if (factory.getContainer().equals(Container.CONTAINER_CHAT_HELP_MENU)) { this.remove( (Component)factory.getPluginComponentInstance(HelpMenu.this) .getComponent()); } } }