org.apache.directory.studio.ldapservers.wizards.NewServerWizardSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.directory.studio.ldapservers.wizards.NewServerWizardSelectionPage.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.wizards;

import java.util.regex.Pattern;

import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.ldapservers.LdapServersManager;
import org.apache.directory.studio.ldapservers.LdapServersPlugin;
import org.apache.directory.studio.ldapservers.LdapServersPluginConstants;
import org.apache.directory.studio.ldapservers.model.LdapServerAdapterExtension;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;

/**
 * This class implements the wizard page for the new server wizard selection page.
 *
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 */
public class NewServerWizardSelectionPage extends WizardPage {
    /** The servers handler */
    private LdapServersManager ldapServersManager;

    /** The content provider of the TreeViewer */
    private LdapServerAdapterExtensionsContentProvider contentProvider;

    /** The label provider of the TreeViewer */
    private LdapServerAdapterExtensionsLabelProvider labelProvider;

    // UI fields
    private Label filterLabel;
    private Text filterText;
    private TreeViewer ldapServerAdaptersTreeViewer;
    private Text serverNameText;

    /**
     * Creates a new instance of NewServerWizardSelectionPage.
     */
    public NewServerWizardSelectionPage() {
        super(NewServerWizardSelectionPage.class.getCanonicalName());
        setTitle(Messages.getString("NewServerWizardSelectionPage.CreateAnLdapServer")); //$NON-NLS-1$
        setDescription(Messages.getString("NewServerWizardSelectionPage.ChooseTypeOfServerAndSpecifyName")); //$NON-NLS-1$
        setImageDescriptor(LdapServersPlugin.getDefault()
                .getImageDescriptor(LdapServersPluginConstants.IMG_SERVER_NEW_WIZARD));
        setPageComplete(false);
        ldapServersManager = LdapServersManager.getDefault();
    }

    /**
     * {@inheritDoc}
     */
    public void createControl(Composite parent) {
        // Creating the composite to hold the UI
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(2, false));

        // Filter Label
        filterLabel = BaseWidgetUtils.createLabel(composite,
                Messages.getString("NewServerWizardSelectionPage.SelectServerType"), 2); //$NON-NLS-1$
        filterLabel.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1));

        // Filter Text
        filterText = new Text(composite, SWT.BORDER | SWT.SEARCH | SWT.CANCEL);
        filterText.setMessage(Messages.getString("NewServerWizardSelectionPage.TypeFilterHere")); //$NON-NLS-1$
        filterText.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1));

        // LDAP Server Adapters Tree Viewer
        ldapServerAdaptersTreeViewer = new TreeViewer(
                new Tree(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER));
        GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
        gd.heightHint = 90;
        ldapServerAdaptersTreeViewer.getTree().setLayoutData(gd);
        contentProvider = new LdapServerAdapterExtensionsContentProvider();
        ldapServerAdaptersTreeViewer.setContentProvider(contentProvider);
        labelProvider = new LdapServerAdapterExtensionsLabelProvider();
        ldapServerAdaptersTreeViewer.setLabelProvider(labelProvider);
        ldapServerAdaptersTreeViewer.setInput("LDAP Server Adapters Tree Viewer Input"); //$NON-NLS-1$
        ldapServerAdaptersTreeViewer.expandAll();
        ldapServerAdaptersTreeViewer.addFilter(new ViewerFilter() {
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                // The current element is a Vendor
                if (element instanceof String) {
                    Object[] children = contentProvider.getChildren(element);
                    for (Object child : children) {
                        String label = labelProvider.getText(child);

                        return getFilterPattern().matcher(label).matches();
                    }
                }
                // The current element is an LdapServerAdapterExtension
                else if (element instanceof LdapServerAdapterExtension) {
                    String label = labelProvider.getText(element);

                    return getFilterPattern().matcher(label).matches();
                }

                return false;
            }

            /**
             * Gets the filter pattern.
             *
             * @return
             *      the filter pattern
             */
            private Pattern getFilterPattern() {
                String filter = filterText.getText();

                return Pattern.compile(((filter == null) ? ".*" : ".*" + filter + ".*"), Pattern.CASE_INSENSITIVE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            }
        });

        // Filler
        Label filler = new Label(composite, SWT.NONE);
        filler.setLayoutData(new GridData(SWT.NONE, SWT.NONE, true, false, 2, 1));

        // Server Name Label
        BaseWidgetUtils.createLabel(composite, Messages.getString("NewServerWizardSelectionPage.ServerName"), 1); //$NON-NLS-1$

        // Server Name Text
        serverNameText = BaseWidgetUtils.createText(composite, "", 1); //$NON-NLS-1$

        // Adding listeners
        addListeners();

        // Setting the control on the composite and setting focus
        setControl(composite);
        composite.setFocus();
    }

    /**
     * Adding listeners to UI elements.
     */
    private void addListeners() {
        // Filter Text
        filterText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                // Refreshing the LDAP Server Adapters Tree Viewer
                ldapServerAdaptersTreeViewer.refresh();
                ldapServerAdaptersTreeViewer.expandAll();
            }
        });

        // LDAP Server Adapters Tree Viewer
        ldapServerAdaptersTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                // Assigning an automatic name to the LDAP Server based on the selected LDAP Server Adapter Extension
                serverNameText
                        .setText(getServerName((StructuredSelection) ldapServerAdaptersTreeViewer.getSelection()));

                //                getContainer().updateButtons();

                validate();
            }

            /**
             * Get a name for the server based on the current selection.
             *
             * @param selection
             *      the current selection
             * @return
             *      a name for the server based on the current selection
             */
            private String getServerName(StructuredSelection selection) {
                if (!selection.isEmpty()) {
                    Object selectedObject = selection.getFirstElement();
                    if (selectedObject instanceof LdapServerAdapterExtension) {
                        // Getting the name of the LDAP Server Adapter Extension
                        String serverName = labelProvider.getText(selection.getFirstElement());

                        // Checking if the name if available
                        if (ldapServersManager.isNameAvailable(serverName)) {
                            return serverName;
                        } else {
                            // The name is not available, looking for another name
                            String newServerName = serverName;

                            for (int i = 2; !ldapServersManager.isNameAvailable(newServerName); i++) {
                                newServerName = serverName + " (" + i + ")"; //$NON-NLS-1$ //$NON-NLS-2$
                            }

                            return newServerName;
                        }
                    }
                }

                // Returning an empty string if the selection is empty or if the current selection is a vendor
                return ""; //$NON-NLS-1$
            }
        });

        // Server Name Text
        serverNameText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                validate();
            }
        });
    }

    /**
     * Validates the page.
     */
    private void validate() {
        displayErrorMessage(null);

        // LDAP Server Adapters Tree Viewer
        StructuredSelection selection = (StructuredSelection) ldapServerAdaptersTreeViewer.getSelection();
        if (selection.isEmpty()) {
            displayErrorMessage(Messages.getString("NewServerWizardSelectionPage.ChooseTypeOfServerToCreate")); //$NON-NLS-1$
            return;
        } else {
            Object selectedObject = selection.getFirstElement();
            if (selectedObject instanceof String) {
                displayErrorMessage(Messages.getString("NewServerWizardSelectionPage.ChooseTypeOfServerToCreate")); //$NON-NLS-1$
                return;
            }
        }

        // Server Name Text
        String name = serverNameText.getText();
        if ((name != null)) {
            if ("".equals(name)) //$NON-NLS-1$
            {
                displayErrorMessage(Messages.getString("NewServerWizardSelectionPage.EnterANameForLdapServer")); //$NON-NLS-1$
                return;
            }
            if (!ldapServersManager.isNameAvailable(name)) {
                displayErrorMessage(
                        Messages.getString("NewServerWizardSelectionPage.LdapServerWithSameNameAlreadyExists")); //$NON-NLS-1$
                return;
            }
        }
    }

    /**
     * Displays an error message and set the page status as incomplete
     * if the message is not null.
     *
     * @param message
     *      the message to display
     */
    protected void displayErrorMessage(String message) {
        setErrorMessage(message);
        setPageComplete(message == null);
    }

    /**
     * Gets the name of the server.
     *
     * @return
     *      the name of the server
     */
    public String getServerName() {
        return serverNameText.getText();
    }

    /**
     * Gets the Ldap Server Adapter Extension.
     *
     * @return
     *      the Ldap Server Adapter Extension
     */
    public LdapServerAdapterExtension getLdapServerAdapterExtension() {
        StructuredSelection selection = (StructuredSelection) ldapServerAdaptersTreeViewer.getSelection();
        if (!selection.isEmpty()) {
            Object selectedObject = selection.getFirstElement();
            if (selectedObject instanceof LdapServerAdapterExtension) {
                return (LdapServerAdapterExtension) selectedObject;
            }
        }

        return null;
    }
}