org.apache.directory.studio.ldapservers.LdapServerAdapterExtensionsManager.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.ldapservers.LdapServerAdapterExtensionsManager.java

Source

/*
 *  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);
    }
}