/*
* 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.plugin.spellcheck;
import java.util.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.util.*;
import org.jitsi.service.configuration.*;
import org.jitsi.service.fileaccess.*;
import org.osgi.framework.*;
import javax.swing.*;
/**
* Enabling and disabling osgi functionality for the spell checker.
*
* @author Damian Johnson
*/
public class SpellCheckActivator
extends AbstractServiceDependentActivator
{
/**
* Our Logger.
*/
private static final Logger logger = Logger
.getLogger(SpellCheckActivator.class);
static BundleContext bundleContext;
private static UIService uiService;
private static FileAccessService faService;
private static ConfigurationService configService;
private static SpellChecker checker = null;
/**
* Called when this bundle is started.
*
* @param dependentService the service we depend on.
*/
@Override
public void start(Object dependentService)
{
// UI-Service started.
// adds button to toggle spell checker
Hashtable<String, String> containerFilter =
new Hashtable<String, String>();
containerFilter.put(Container.CONTAINER_ID,
Container.CONTAINER_CHAT_TOOL_BAR.getID());
// adds field to change language
bundleContext.registerService(
PluginComponentFactory.class.getName(),
new PluginComponentFactory(Container.CONTAINER_CHAT_TOOL_BAR,
Container.RIGHT,
-1,
false)
{
@Override
protected PluginComponent getPluginInstance()
{
LanguageMenuBarCreator creator =
new LanguageMenuBarCreator(this);
try
{
if(!SwingUtilities.isEventDispatchThread())
SwingUtilities.invokeAndWait(creator);
else
creator.run();
return creator.menuBar;
}
catch(Throwable t)
{
logger.error("Error creating LanguageMenuBar", t);
}
return null;
}
},
containerFilter);
}
/**
* Setting context to the activator, as soon as we have one.
*
* @param context the context to set.
*/
@Override
public void setBundleContext(BundleContext context)
{
bundleContext = context;
}
/**
* This activator depends on UIService.
* @return the class name of uiService.
*/
@Override
public Class<?> getDependentServiceClass()
{
return UIService.class;
}
/**
* Creates and loads everything when needed.
*/
private class LanguageMenuBarCreator
implements Runnable
{
LanguageMenuBar menuBar;
final PluginComponentFactory parentFactory;
LanguageMenuBarCreator(PluginComponentFactory parentFactory)
{
this.parentFactory = parentFactory;
}
public void run()
{
synchronized(SpellCheckActivator.this)
{
if(checker == null)
{
checker = new SpellChecker();
}
}
try
{
checker.start(bundleContext);
}
catch(Exception ex)
{
logger.error("Error starting SpellChecker", ex);
}
menuBar = new LanguageMenuBar(checker, parentFactory);
menuBar.createSpellCheckerWorker(checker.getLocale()).start();
}
}
/**
* Returns the <tt>UIService</tt>.
*
* @return the <tt>UIService</tt>
*/
public static UIService getUIService()
{
if (uiService != null)
return uiService;
// retrieves needed services
ServiceReference uiServiceRef =
bundleContext.getServiceReference(UIService.class.getName());
uiService = (UIService) bundleContext.getService(uiServiceRef);
return uiService;
}
/**
* Returns the <tt>FileAccessService</tt>.
*
* @return the <tt>FileAccessService</tt>
*/
public static FileAccessService getFileAccessService()
{
if (faService != null)
return faService;
ServiceReference faServiceReference =
bundleContext
.getServiceReference(FileAccessService.class.getName());
faService =
(FileAccessService) bundleContext.getService(faServiceReference);
return faService;
}
/**
* Returns the <tt>ConfigurationService</tt>.
*
* @return the <tt>ConfigurationService</tt>
*/
public static ConfigurationService getConfigService()
{
if (configService != null)
return configService;
ServiceReference configServiceRef =
bundleContext.getServiceReference(ConfigurationService.class
.getName());
configService =
(ConfigurationService) bundleContext.getService(configServiceRef);
return configService;
}
/**
* Stops this bundles.
*/
public void stop(BundleContext arg0) throws Exception
{
}
}