/* * 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.openldap.config.editor.pages; import org.apache.directory.studio.common.ui.CommonUIConstants; import org.apache.directory.studio.common.ui.widgets.TableWidget; import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent; import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener; import org.apache.directory.studio.openldap.config.actions.EditorExportConfigurationAction; import org.apache.directory.studio.openldap.config.actions.EditorImportConfigurationAction; import org.apache.directory.studio.openldap.config.editor.Messages; import org.apache.directory.studio.openldap.config.editor.OpenLDAPServerConfigurationEditor; import org.apache.directory.studio.openldap.config.model.OpenLdapConfiguration; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; /** * This class represents the General Page of the Server Configuration Editor. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public abstract class OpenLDAPServerConfigurationEditorPage extends FormPage { protected static final String TABULATION = " "; /** A flag to indicate if the page is initialized */ protected boolean isInitialized = false; /** * A listener used to set the dirty flag when a Text is updated */ protected ModifyListener dirtyModifyListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { setEditorDirty(); } }; /** * A listener used to set the dirty flag when a widget is selected */ private SelectionListener dirtySelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { setEditorDirty(); } }; /** * A listener used to set the dirty flag when a widget is updated */ protected WidgetModifyListener dirtyWidgetModifyListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent event ) { setEditorDirty(); } }; /** * Creates a new instance of GeneralPage. * * @param editor the associated editor */ public OpenLDAPServerConfigurationEditorPage( OpenLDAPServerConfigurationEditor editor, String id, String title ) { super( editor, id, title ); } /** * Gets the ServerConfigurationEditor object associated with the page. * * @return the ServerConfigurationEditor object associated with the page */ public OpenLDAPServerConfigurationEditor getServerConfigurationEditor() { return ( OpenLDAPServerConfigurationEditor ) getEditor(); } /** * Sets the associated editor dirty. */ private void setEditorDirty() { getServerConfigurationEditor().setDirty( true ); } /** * Gets the configuration associated with the editor. * * @return the configuration associated with the editor */ public OpenLdapConfiguration getConfiguration() { OpenLdapConfiguration configuration = getServerConfigurationEditor().getConfiguration(); if ( configuration == null ) { configuration = new OpenLdapConfiguration(); getServerConfigurationEditor().setConfiguration( configuration ); } return configuration; } /** * {@inheritDoc} */ protected void createFormContent( IManagedForm managedForm ) { ScrolledForm form = managedForm.getForm(); form.setText( getTitle() ); Composite parent = form.getBody(); parent.setLayout( new GridLayout() ); FormToolkit toolkit = managedForm.getToolkit(); toolkit.decorateFormHeading( form.getForm() ); OpenLDAPServerConfigurationEditor editor = ( OpenLDAPServerConfigurationEditor ) getEditor(); IToolBarManager toolbarManager = form.getToolBarManager(); toolbarManager.add( new EditorImportConfigurationAction( editor ) ); toolbarManager.add( new Separator() ); toolbarManager.add( new EditorExportConfigurationAction( editor ) ); toolbarManager.update( true ); createFormContent( parent, toolkit ); isInitialized = true; } /** * Subclasses must implement this method to create the content of their form. * * @param parent the parent element * @param toolkit the form toolkit */ protected abstract void createFormContent( Composite parent, FormToolkit toolkit ); /** * Refreshes the UI. */ public abstract void refreshUI(); /** * Indicates if the page is initialized. * * @return <code>true</code> if the page is initialized, * <code>false</code> if not. */ public boolean isInitialized() { return isInitialized; } /** * Creates a Text that can be used to enter a port number. * * @param toolkit the toolkit * @param parent the parent * @return a Text that can be used to enter a port number */ protected Text createPortText( FormToolkit toolkit, Composite parent ) { Text portText = toolkit.createText( parent, "" ); //$NON-NLS-1$ GridData gd = new GridData( SWT.NONE, SWT.NONE, false, false ); gd.widthHint = 42; portText.setLayoutData( gd ); portText.addVerifyListener( new VerifyListener() { public void verifyText( VerifyEvent e ) { if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$ { e.doit = false; } } } ); portText.setTextLimit( 5 ); return portText; } /** * A shared method used to create a Section, based on a GridLayout. * * @param toolkit The Form toolkit * @param parent The parent * @param title The Section title * @param nbColumns The number of columns for the inner grid * * @return The created Composite */ protected Composite createSection( FormToolkit toolkit, Composite parent, String title, int nbColumns, int style ) { Section section = toolkit.createSection( parent, style ); section.setText( Messages.getString( title ) ); section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite composite = toolkit.createComposite( section ); toolkit.paintBordersFor( composite ); GridLayout gridLayout = new GridLayout( nbColumns, false ); gridLayout.marginHeight = 0; gridLayout.marginWidth = 0; composite.setLayout( gridLayout ); section.setClient( composite ); return composite; } /** * Creates default value Label. * * @param toolkit the toolkit * @param parent the parent * @param text the text string * @return a default value Label */ protected Label createDefaultValueLabel( FormToolkit toolkit, Composite parent, String text ) { Label label = toolkit.createLabel( parent, NLS.bind( "(Default: {0})", text ) ); label.setForeground( CommonUIConstants.M_GREY_COLOR ); return label; } /** * Adds a modify listener to the given Text. * * @param text the Text control * @param listener the listener */ protected void addModifyListener( Text text, ModifyListener listener ) { if ( ( text != null ) && ( !text.isDisposed() ) && ( listener != null ) ) { text.addModifyListener( listener ); } } /** * Adds a selection listener to the given Button. * * @param button the Button control * @param listener the listener */ protected void addSelectionListener( Button button, SelectionListener listener ) { if ( ( button != null ) && ( !button.isDisposed() ) && ( listener != null ) ) { button.addSelectionListener( listener ); } } /** * Adds a selection listener to the given Combo. * * @param combo the Combo control * @param listener the listener */ protected void addSelectionListener( Combo combo, SelectionListener listener ) { if ( ( combo != null ) && ( !combo.isDisposed() ) && ( listener != null ) ) { combo.addSelectionListener( listener ); } } /** * Adds a modify listener to the given TableWidget. * * @param tableWidget the TableWidget control * @param listener the listener */ protected void addModifyListener( TableWidget<?> tableWidget, WidgetModifyListener listener ) { if ( ( tableWidget != null ) && ( listener != null ) ) { tableWidget.addWidgetModifyListener( listener ); } } /** * Removes a modify listener to the given Text. * * @param text the Text control * @param listener the listener */ protected void removeModifyListener( Text text, ModifyListener listener ) { if ( ( text != null ) && ( !text.isDisposed() ) && ( listener != null ) ) { text.removeModifyListener( listener ); } } /** * Removes a selection listener to the given Button. * * @param button the Button control * @param listener the listener */ protected void removeSelectionListener( Button button, SelectionListener listener ) { if ( ( button != null ) && ( !button.isDisposed() ) && ( listener != null ) ) { button.removeSelectionListener( listener ); } } /** * Removes a selection listener to the given Combo. * * @param combo the Combo control * @param listener the listener */ protected void removeSelectionListener( Combo combo, SelectionListener listener ) { if ( ( combo != null ) && ( !combo.isDisposed() ) && ( listener != null ) ) { combo.removeSelectionListener( listener ); } } /** * Removes a modify listener to the given TableWidget. * * @param tableWidget the TableWidget control * @param listener the listener */ protected void removeModifyListener( TableWidget<?> tableWidget, WidgetModifyListener listener ) { if ( ( tableWidget != null ) && ( listener != null ) ) { tableWidget.removeWidgetModifyListener( listener ); } } /** * Adds a 'dirty' listener to the given Text. * * @param text the Text control */ protected void addDirtyListener( Text text ) { addModifyListener( text, dirtyModifyListener ); } /** * Adds a 'dirty' listener to the given Button. * * @param button the Button control */ protected void addDirtyListener( Button button ) { addSelectionListener( button, dirtySelectionListener ); } /** * Adds a 'dirty' listener to the given Combo. * * @param button the Button control */ protected void addDirtyListener( Combo combo ) { addSelectionListener( combo, dirtySelectionListener ); } /** * Adds a 'dirty' listener to the given TableWidget. * * @param tableWidget the TableWidget control */ protected void addDirtyListener( TableWidget<?> tableWidget ) { addModifyListener( tableWidget, dirtyWidgetModifyListener ); } /** * Removes a 'dirty' listener to the given Text. * * @param text the Text control */ protected void removeDirtyListener( Text text ) { removeModifyListener( text, dirtyModifyListener ); } /** * Removes a 'dirty' listener to the given Button. * * @param button the Button control */ protected void removeDirtyListener( Button button ) { removeSelectionListener( button, dirtySelectionListener ); } /** * Removes a 'dirty' listener to the given Combo. * * @param combo the Combo control */ protected void removeDirtyListener( Combo combo ) { removeSelectionListener( combo, dirtySelectionListener ); } /** * Removes a 'dirty' listener to the given TableWidget. * * @param tableWidget the TableWidget control */ protected void removeDirtyListener( TableWidget<?> tableWidget ) { removeModifyListener( tableWidget, dirtyWidgetModifyListener ); } /** * Sets the selection state of the button widget. * <p> * Verifies that the button exists and is not disposed * before applying the new selection state. * * @param button the button * @param selected the new selection state */ protected void setSelection( Button button, boolean selected ) { if ( ( button != null ) && ( !button.isDisposed() ) ) { button.setSelection( selected ); } } /** * Sets the contents of the text widget. * <p> * Verifies that the button exists and is not disposed * before applying the new text. * * @param text the text * @param string the new text */ protected void setText( Text text, String string ) { if ( ( text != null ) && ( !text.isDisposed() ) ) { text.setText( string ); } } protected void setFocus( Control control ) { if ( ( control != null ) && ( !control.isDisposed() ) ) { control.setFocus(); } } /** * Create an expandable Section with a title */ protected Section createSection( FormToolkit toolkit, Composite parent, String title ) { Section section = toolkit.createSection( parent, Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED); section.setText( title ); //$NON-NLS-1$ section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); return section; } /** * Creates a composite for the given section. * * @param toolkit the toolkit * @param section the section * @param numColumns the number of columns in the grid * @param makeColumnsEqualWidth whether or not the columns will have equal width * * @return a composite for the given section. */ protected Composite createSectionComposite( FormToolkit toolkit, Section section, int numColumns, boolean makeColumnsEqualWidth ) { Composite composite = toolkit.createComposite( section ); toolkit.paintBordersFor( composite ); GridLayout gridLayout = new GridLayout( numColumns, makeColumnsEqualWidth ); gridLayout.marginHeight = gridLayout.marginWidth = 0; composite.setLayout( gridLayout ); section.setClient( composite ); return composite; } }