/*
* 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.thunderbird;
import java.util.*;
import net.java.sip.communicator.service.contactsource.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
import org.jitsi.service.configuration.*;
import org.jitsi.service.resources.*;
import org.osgi.framework.*;
/**
* Bundle-Activator for the Thunderbird address book contact source plug-in.
*
* @author Ingo Bauersachs
*/
public class ThunderbirdActivator
implements BundleActivator
{
/** OSGi context. */
private static BundleContext bundleContext;
/** Active address book registrations. */
private static Map<ThunderbirdContactSourceService, ServiceRegistration>
registrations;
/**
* The registered PhoneNumberI18nService.
*/
private static PhoneNumberI18nService phoneNumberI18nService;
/**
* Gets the configuration service.
* @return the configuration service.
*/
static ConfigurationService getConfigService()
{
return ServiceUtils.getService(bundleContext,
ConfigurationService.class);
}
/**
* Gets the resource service.
* @return the resource service.
*/
static ResourceManagementService getResources()
{
return ServiceUtils.getService(bundleContext,
ResourceManagementService.class);
}
/**
* Gets all registered Thunderbird address book services.
* @return all registered Thunderbird address book services.
*/
static List<ThunderbirdContactSourceService> getActiveServices()
{
return new LinkedList<ThunderbirdContactSourceService>(
registrations.keySet());
}
/**
* Loads and registers an address book service.
* @param config the name of the base property of the service to load.
*/
static void add(String config)
{
ThunderbirdContactSourceService service
= new ThunderbirdContactSourceService(config);
registrations.put(service,
bundleContext.registerService(
ContactSourceService.class.getName(), service, null));
}
/**
* Stops an address book service and deletes the corresponding configuration
* data.
*
* @param service the address book instance to remove.
*/
static void remove(ThunderbirdContactSourceService service)
{
registrations.get(service).unregister();
registrations.remove(service);
ConfigurationService config = getConfigService();
config.removeProperty(service.getBaseConfigProperty());
for (String prop : config.getPropertyNamesByPrefix(
service.getBaseConfigProperty(), false))
{
config.removeProperty(prop);
}
}
/**
* Searches the configuration for Thunderbird address books and registers a
* {@link ContactSourceService} for each found config.
*/
public void start(BundleContext bundleContext) throws Exception
{
ThunderbirdActivator.bundleContext = bundleContext;
ConfigurationService config = getConfigService();
List<String> configs =
config.getPropertyNamesByPrefix(
ThunderbirdContactSourceService.PNAME_BASE_THUNDERBIRD_CONFIG,
false);
registrations = new HashMap
<ThunderbirdContactSourceService, ServiceRegistration>();
for (String cfg : configs)
{
String value = config.getString(cfg);
if (value != null && cfg.endsWith(value))
{
add(cfg);
}
}
/* registers the configuration form */
Dictionary<String, String> properties
= new Hashtable<String, String>();
properties.put(
ConfigurationForm.FORM_TYPE,
ConfigurationForm.CONTACT_SOURCE_TYPE);
bundleContext.registerService(
ConfigurationForm.class.getName(),
new LazyConfigurationForm(
ThunderbirdConfigForm.class.getName(),
getClass().getClassLoader(),
null,
"plugin.thunderbird.CONFIG_FORM_TITLE"),
properties);
}
/**
* Unregisters all {@link ContactSourceService}s that were registered by
* this activator.
*/
public void stop(BundleContext bundleContext) throws Exception
{
for (ServiceRegistration sr : registrations.values())
{
sr.unregister();
}
registrations = null;
}
/**
* Returns the PhoneNumberI18nService.
* @return returns the PhoneNumberI18nService.
*/
public static PhoneNumberI18nService getPhoneNumberI18nService()
{
if(phoneNumberI18nService == null)
{
phoneNumberI18nService = ServiceUtils.getService(
bundleContext,
PhoneNumberI18nService.class);
}
return phoneNumberI18nService;
}
}