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