/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.directory.studio.ldapservers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.directory.studio.ldapservers.model.LdapServerAdapter;
import org.apache.directory.studio.ldapservers.model.LdapServerAdapterExtension;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* This class implements the LDAP Server Extensions Manager.
* <p>
* It is used to store all the LDAP Server Extensions.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class LdapServerAdapterExtensionsManager
{
// Attributes names used in 'plugin.xml' file
public static final String ID_ATTR = "id"; //$NON-NLS-1$
public static final String NAME_ATTR = "name"; //$NON-NLS-1$
public static final String VERSION_ATTR = "version"; //$NON-NLS-1$
public static final String VENDOR_ATTR = "vendor"; //$NON-NLS-1$
public static final String CLASS_ATTR = "class"; //$NON-NLS-1$
public static final String DESCRIPTION_ATTR = "description"; //$NON-NLS-1$
public static final String ICON_ATTR = "icon"; //$NON-NLS-1$
public static final String CONFIGURATION_PAGE_ATTR = "configurationPage"; //$NON-NLS-1$
public static final String OPEN_CONFIGURATION_ACTION_ENABLED_ATTR = "openConfigurationActionEnabled"; //$NON-NLS-1$
/** The default instance */
private static LdapServerAdapterExtensionsManager instance;
/** The list and map for LDAP Server Adapter Extensions */
private List<LdapServerAdapterExtension> ldapServerAdapterExtensionsList;
/** The map and map for LDAP Server Adapter Extensions */
private Map<String, LdapServerAdapterExtension> ldapServerAdapterExtensionsByIdMap;
/**
* Creates a new instance of LdapServerAdapterExtensionsManager.
*/
private LdapServerAdapterExtensionsManager()
{
}
/**
* Loads the LDAP Server Adapter Extensions.
*/
public void loadLdapServerAdapterExtensions()
{
// Initializing the list and map for LDAP Server Adapter Extensions
ldapServerAdapterExtensionsList = new ArrayList<LdapServerAdapterExtension>();
ldapServerAdapterExtensionsByIdMap = new HashMap<String, LdapServerAdapterExtension>();
// Getting members of LDAP Server Adapters Extension Point
IConfigurationElement[] members = Platform.getExtensionRegistry()
.getExtensionPoint( LdapServersPluginConstants.LDAP_SERVER_ADAPTERS_EXTENSION_POINT )
.getConfigurationElements();
// Creating an object associated with each member
for ( IConfigurationElement member : members )
{
// Creating the LdapServerAdapterExtension object container
LdapServerAdapterExtension ldapServerAdapterExtension = new LdapServerAdapterExtension();
// Getting the ID of the extending plugin
String extendingPluginId = member.getDeclaringExtension().getNamespaceIdentifier();
// Setting each parameter to the LDAP Server Adapter Extension
ldapServerAdapterExtension.setExtensionPointConfiguration( member );
ldapServerAdapterExtension.setId( member.getAttribute( ID_ATTR ) );
ldapServerAdapterExtension.setName( member.getAttribute( NAME_ATTR ) );
ldapServerAdapterExtension.setVersion( member.getAttribute( VERSION_ATTR ) );
ldapServerAdapterExtension.setVendor( member.getAttribute( VENDOR_ATTR ) );
ldapServerAdapterExtension.setClassName( member.getAttribute( CLASS_ATTR ) );
try
{
ldapServerAdapterExtension.setInstance( ( LdapServerAdapter ) member
.createExecutableExtension( CLASS_ATTR ) );
}
catch ( CoreException e )
{
// Will never happen
}
ldapServerAdapterExtension.setDescription( member.getAttribute( DESCRIPTION_ATTR ) );
String iconPath = member.getAttribute( ICON_ATTR );
if ( iconPath != null )
{
ImageDescriptor icon = AbstractUIPlugin.imageDescriptorFromPlugin( extendingPluginId, iconPath );
if ( icon == null )
{
icon = ImageDescriptor.getMissingImageDescriptor();
}
ldapServerAdapterExtension.setIcon( icon );
}
ldapServerAdapterExtension.setConfigurationPageClassName( member.getAttribute( CONFIGURATION_PAGE_ATTR ) );
String openConfigurationActionEnabled = member.getAttribute( OPEN_CONFIGURATION_ACTION_ENABLED_ATTR );
if ( openConfigurationActionEnabled != null )
{
ldapServerAdapterExtension.setOpenConfigurationActionEnabled( Boolean
.parseBoolean( openConfigurationActionEnabled ) );
}
else
{
// Enabled by default
ldapServerAdapterExtension.setOpenConfigurationActionEnabled( true );
}
ldapServerAdapterExtensionsList.add( ldapServerAdapterExtension );
ldapServerAdapterExtensionsByIdMap.put( ldapServerAdapterExtension.getId(), ldapServerAdapterExtension );
}
}
/**
* Gets the default {@link LdapServerAdapterExtensionsManager} (singleton pattern).
*
* @return
* the default {@link LdapServerAdapterExtensionsManager}
*/
public static LdapServerAdapterExtensionsManager getDefault()
{
if ( instance == null )
{
instance = new LdapServerAdapterExtensionsManager();
}
return instance;
}
/**
* Gets the LDAP Server Adapter Extensions list.
*
* @return
* the LDAP Server Adapter Extensions list.
*/
public List<LdapServerAdapterExtension> getLdapServerAdapterExtensions()
{
return ldapServerAdapterExtensionsList;
}
/**
* Gets the LDAP Server Adapter Extension associated with the given id.
*
* @return
* the LDAP Server Adapter Extension associated with the given id.
*/
public LdapServerAdapterExtension getLdapServerAdapterExtensionById( String id )
{
return ldapServerAdapterExtensionsByIdMap.get( id );
}
}