/* * 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.ldap; import java.util.*; import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.contactsource.*; import net.java.sip.communicator.service.credentialsstorage.*; import net.java.sip.communicator.service.ldap.*; import net.java.sip.communicator.util.*; import org.jitsi.service.configuration.*; import org.osgi.framework.*; /** * The LDAP service allows other modules to query an LDAP server. * * @author Sebastien Mazy */ public class LdapServiceImpl implements LdapService { /** * All the servers registered */ private LdapDirectorySet serverSet; /** * the LdapFactory, used to create LdapDirectory-s, * LdapDirectorySettings, ... */ private LdapFactory factory = new LdapFactoryImpl(); /** * The logger for this class. */ private static Logger logger = Logger .getLogger(LdapServiceImpl.class); /** * BundleContext from the OSGI bus. */ private static BundleContext bundleContext; /** * Reference to the configuration service */ private static ConfigurationService configService; /** * Reference to the credentials service */ private static CredentialsStorageService credentialsService; /** * Reference to the Certificate Verification Service. */ private static CertificateService certService = null; /** * Starts the service. * * @param bc BundleContext */ public void start(BundleContext bc) { logger.trace("Starting the LDAP implementation."); bundleContext = bc; serverSet = new LdapDirectorySetImpl(getConfigService()); loadPersistentConfig(); } /** * Stops the service. * * @param bc BundleContext */ public void stop(BundleContext bc) { logger.trace("Stopping the LDAP implementation."); } /** * Returns a reference to a ConfigurationService implementation currently * registered in the bundle context or null if no such implementation was * found. * * @return a currently valid implementation of the ConfigurationService. */ public static ConfigurationService getConfigService() { if(configService == null) { ServiceReference confReference = bundleContext.getServiceReference( ConfigurationService.class.getName()); configService = (ConfigurationService) bundleContext.getService( confReference); } return configService; } /** * Returns a reference to a CredentialsStorageConfigurationService * implementation currently registered in the bundle context or null if no * such implementation was found. * * @return a currently valid implementation of the * CredentialsStorageService. */ public static CredentialsStorageService getCredentialsService() { if(credentialsService == null) { ServiceReference confReference = bundleContext.getServiceReference( CredentialsStorageService.class.getName()); credentialsService = (CredentialsStorageService) bundleContext.getService( confReference); } return credentialsService; } /** * Gets the <tt>CertificateService</tt> to be used by the functionality of * the addrbook plug-in. * * @return the <tt>CertificateService</tt> to be used by the functionality * of the addrbook plug-in. */ public static CertificateService getCertificateService() { if (certService == null) { certService = ServiceUtils.getService( bundleContext, CertificateService.class); } return certService; } /** * Returns all the LDAP directories * * @return the LdapDirectorySet containing all the LdapDirectory(s) * registered * * @see net.java.sip.communicator.service.ldap#getServerSet */ public LdapDirectorySet getServerSet() { return serverSet; } /** * Required by interface LdapService. * Returns the LdapFactory, used to * create LdapDirectory-s, LdapDirectorySettings, LdapQuery, ... * * @return the LdapFactory * * @see net.java.sip.communicator.service.ldap#getFactory */ public LdapFactory getFactory() { return factory; } /** * Creates a contact source corresponding to the given ldap directory. * * @param ldapDir the ldap directory, for which we're creating the contact * source * @return the created contact source service */ public ContactSourceService createContactSource(LdapDirectory ldapDir) { return LdapActivator.registerContactSource(ldapDir); } /** * Removes the contact source corresponding to the given ldap directory. * * @param ldapDir the ldap directory, which contact source we'd like to * remove */ public void removeContactSource(LdapDirectory ldapDir) { LdapActivator.unregisterContactSource(ldapDir); } /** * Loads configuration form the user preferences in the serverSet */ private void loadPersistentConfig() { String name; LdapDirectorySettings settings = getFactory().createServerSettings(); LdapDirectory server; List<String> list = getConfigService(). getPropertyNamesByPrefix( "net.java.sip.communicator.impl.ldap.directories", true); for(Object configEntry : list) { name = getConfigService().getString(configEntry.toString()); if(name != null) { settings.persistentLoad(name); server = this.getFactory().createServer(settings); this.serverSet.addServer(server); } } } }