/* * 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 java.util.ArrayList; import java.util.List; 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.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.apache.directory.studio.common.ui.CommonUIUtils; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; 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.common.ui.wrappers.StringValueWrapper; import org.apache.directory.studio.openldap.common.ui.model.RequireConditionEnum; import org.apache.directory.studio.openldap.config.editor.OpenLDAPServerConfigurationEditor; import org.apache.directory.studio.openldap.config.editor.dialogs.OverlayDialog; import org.apache.directory.studio.openldap.config.editor.dialogs.SizeLimitDialog; import org.apache.directory.studio.openldap.config.editor.dialogs.TimeLimitDialog; import org.apache.directory.studio.openldap.config.editor.wrappers.LimitWrapper; import org.apache.directory.studio.openldap.config.editor.wrappers.TcpBufferDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.TcpBufferWrapper; import org.apache.directory.studio.openldap.config.editor.wrappers.TimeLimitDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.TimeLimitWrapper; import org.apache.directory.studio.openldap.config.model.OlcGlobal; /** * This class represents the Tuning Page of the Server Configuration Editor. We * manage the global tuning of the server, and more specifically, those parameters : * <ul> * <li>Network : * <ul> * <li>olcTCPBuffers</li> * <li>olcSockbufMaxIncoming</li> * <li>olcSockbufMaxIncomingAuth</li> * </ul> * </li> * <li>Concurrency : * <ul> * <li>olcConcurrency</li> * <li>olcConnMaxPending</li> * <li>olcConnMaxPendingAuth</li> * <li>olcListenerThreads</li> * <li>olcThreads</li> * <li>olcToolThreads</li> * </ul> * </li> * <li>LDAP limits : * <ul> * <li>olcIdleTimeout</li> * <li>olcSizeLimit</li> * <li>olcTimeLimit</li> * <li>olcWriteTimeout</li> * </ul> * </li> * <li>Index limits : * <ul> * <li>olcIndexIntLen</li> * <li>olcIndexSubstrAnyLen</li> * <li>olcIndexSubstrAnyStep</li> * <li>olcIndexSubstrIfMaxLen</li> * <li>olcIndexSubstrIfMinLen</li> * </ul> * </li> * </ul> * * <pre> * +---------------------------------------------------------------------------------+ * | Tuning | * +---------------------------------------------------------------------------------+ * | .-------------------------------------. .-------------------------------------. | * | | TCP configuration                   | | Concurrency | | * | +-------------------------------------+ +-------------------------------------+ | * | | TCPBuffers                          | | | | * | | +-----------------------+           | | Concurrency : [      ] | | * | | | xyz                   | (Add)     | | Max Pending Conn  : [      ] | | * | | | abc                   | (Edit)    | | Max Pending Conn Auth  : [      ] | | * | | |                       | (Delete)  | | Nb Threads  : [      ] | | * | | +-----------------------+           | | Nb Threads Tool Mode : [      ] | | * | |                                     | | Nb Listener threads  : [      ] | | * | | Max Incoming Buffer      : [      ] | | | | * | | Max Incoming Buffer Auth : [      ] | | | | * | +-------------------------------------+ +-------------------------------------+ | * | .-------------------------------------. .-------------------------------------. | * | | LDAP Limits                    | | Index Limits | | * | +-------------------------------------+ +-------------------------------------+ | * | | Write Timeout : [      ]  | | Integer Indices Length : [      ] | | * | | Idle Timeout : [      ]  | | Subany Indices Length  : [      ] | | * | | Size Limit : [ ] (Edit) | | Subany Indices Step   : [      ] | | * | | Time Limit : [ ] (Edit) | | Sub indices Max length : [      ] | | * | | +-----------------------+           | | Sub indices Min length : [      ] | | * | | | xyz                   | (Add)     | +-------------------------------------+ | * | | | abc                   | (Edit)    | | * | | |                       | (Delete)  | | * | | +-----------------------+           | | * | +-------------------------------------+ | * +---------------------------------------------------------------------------------+ * </pre> * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class TuningPage extends OpenLDAPServerConfigurationEditorPage { /** The Page ID*/ public static final String ID = TuningPage.class.getName(); //$NON-NLS-1$ /** The Page Title */ private static final String TITLE = Messages.getString( "OpenLDAPTuningPage.Title" ); // UI Controls for the Network part /** The olcSockbufMaxIncoming Text */ private Text sockbufMaxIncomingText; /** The olcSockbufMaxIncomingAuth Text */ private Text sockbufMaxIncomingAuthText; /** The olcTCPBuffer widget */ private TableWidget<TcpBufferWrapper> tcpBufferTableWidget; // UI Controls for the Concurrency part /** The olcConcurrency Text */ private Text concurrencyText; /** The olcConnMaxPending Text */ private Text connMaxPendingText; /** The olcConnMaxPendingAuth Text */ private Text connMaxPendingAuthText; /** The olcListenerThreads Text */ private Text listenerThreadsText; /** The olcThreads Text */ private Text threadsText; /** The olcToolThreads Text */ private Text toolThreadsText; // UI Controls for the LDAP Limits /** The olcSizeLimit */ private Text sizeLimitText; /** The SizeLimit edit Button */ private Button sizeLimitEditButton; /** The TimeLimit edit Button */ private TableWidget<TimeLimitWrapper> timeLimitTableViewer; /** The olcWriteTimeout */ private Text writeTimeoutText; /** The olcIdleTimeout */ private Text idleTimeoutText; // UI Controls for the Index Limits /** The olcIndexIntLenText Text */ private Text indexIntLenText; /** The olcIndexSubstrAnyLen Text */ private Text indexSubstrAnyLenText; /** The olcIndexSubstrAnyStep Text */ private Text indexSubstrAnyStepText; /** The olcIndexSubstrIfMaxLen Text */ private Text indexSubstrIfMaxLenText; /** The olcIndexSubstrIfMinLen Text */ private Text indexSubstrIfMinLenText; /** * Creates a new instance of TuningPage. * * @param editor the associated editor */ public TuningPage( OpenLDAPServerConfigurationEditor editor ) { super( editor, ID, TITLE ); } /** * The listener for the sockbufMaxIncomingText Text */ private ModifyListener sockbufMaxIncomingTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = sockbufMaxIncomingText.getDisplay(); try { int sockbufMaxIncomingValue = Integer.parseInt( sockbufMaxIncomingText.getText() ); // The value must be between 0 and 0x3FFFF if ( ( sockbufMaxIncomingValue < 0 ) || ( sockbufMaxIncomingValue > 0x3FFFF ) ) { sockbufMaxIncomingText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } sockbufMaxIncomingText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcSockbufMaxIncoming( sockbufMaxIncomingValue ); } catch ( NumberFormatException nfe ) { // Not even a number sockbufMaxIncomingText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the sockbufMaxIncomingAuthText Text */ private ModifyListener sockbufMaxIncomingAuthTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = sockbufMaxIncomingAuthText.getDisplay(); try { String sockbufMaxIncomingAuthstr = sockbufMaxIncomingAuthText.getText(); int sockbufMaxIncomingAuthValue = Integer.parseInt( sockbufMaxIncomingAuthstr ); // The value must be between 0 and 0x3FFFFF if ( ( sockbufMaxIncomingAuthValue < 0 ) || ( sockbufMaxIncomingAuthValue > 0x3FFFFF ) ) { sockbufMaxIncomingAuthText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } sockbufMaxIncomingAuthText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcSockbufMaxIncomingAuth( sockbufMaxIncomingAuthstr ); } catch ( NumberFormatException nfe ) { // Not even a number sockbufMaxIncomingAuthText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the concurrencyText Text */ private ModifyListener concurrencyTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = concurrencyText.getDisplay(); try { int concurrencyValue = Integer.parseInt( concurrencyText.getText() ); // The value must be >= 0 if ( concurrencyValue < 0 ) { concurrencyText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } concurrencyText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcConcurrency( concurrencyValue ); } catch ( NumberFormatException nfe ) { // Not even a number concurrencyText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the connMaxPendingText Text */ private ModifyListener connMaxPendingTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = connMaxPendingText.getDisplay(); try { int connMaxPendingValue = Integer.parseInt( connMaxPendingText.getText() ); // The value must be >= 0 if ( connMaxPendingValue < 0 ) { connMaxPendingText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } connMaxPendingText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcConnMaxPending( connMaxPendingValue ); } catch ( NumberFormatException nfe ) { // Not even a number connMaxPendingText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the connMaxPendingAuthText Text */ private ModifyListener connMaxPendingAuthTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = connMaxPendingAuthText.getDisplay(); try { int connMaxPendingAuthValue = Integer.parseInt( connMaxPendingAuthText.getText() ); // The value must be >= 0 if ( connMaxPendingAuthValue < 0 ) { connMaxPendingAuthText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } connMaxPendingAuthText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcConnMaxPendingAuth( connMaxPendingAuthValue ); } catch ( NumberFormatException nfe ) { // Not even a number connMaxPendingAuthText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the listenerThreadsText Text */ private ModifyListener listenerThreadsTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = listenerThreadsText.getDisplay(); try { int listenerThreadsValue = Integer.parseInt( listenerThreadsText.getText() ); // The value must be >= 0 if ( listenerThreadsValue < 0 ) { listenerThreadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } listenerThreadsText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcListenerThreads( listenerThreadsValue ); } catch ( NumberFormatException nfe ) { // Not even a number listenerThreadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the ThreadsText Text */ private ModifyListener threadsTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = threadsText.getDisplay(); try { int threadsValue = Integer.parseInt( threadsText.getText() ); // The value must be >= 0 if ( threadsValue < 0 ) { threadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } threadsText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcThreads( threadsValue ); } catch ( NumberFormatException nfe ) { // Not even a number threadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the ToolThreadsText Text */ private ModifyListener toolThreadsTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = toolThreadsText.getDisplay(); try { int toolThreadsValue = Integer.parseInt( toolThreadsText.getText() ); // The value must be >= 0 if ( toolThreadsValue < 0 ) { toolThreadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } toolThreadsText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcToolThreads( toolThreadsValue ); } catch ( NumberFormatException nfe ) { // Not even a number toolThreadsText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the IndexIntLenText Text */ private ModifyListener indexIntLenTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = indexIntLenText.getDisplay(); try { int indexIntLenValue = Integer.parseInt( indexIntLenText.getText() ); // The value must be >= 0 if ( indexIntLenValue < 0 ) { indexIntLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } indexIntLenText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIndexIntLen( indexIntLenValue ); } catch ( NumberFormatException nfe ) { // Not even a number indexIntLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the IndexSubstrAnyLenText Text */ private ModifyListener indexSubstrAnyLenTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = indexSubstrAnyLenText.getDisplay(); try { int indexSubstrAnyLenValue = Integer.parseInt( indexSubstrAnyLenText.getText() ); // The value must be >= 0 if ( indexSubstrAnyLenValue < 0 ) { indexSubstrAnyLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } indexSubstrAnyLenText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIndexSubstrAnyLen( indexSubstrAnyLenValue ); } catch ( NumberFormatException nfe ) { // Not even a number indexSubstrAnyLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the IndexSubstrAnyStepText Text */ private ModifyListener indexSubstrAnyStepTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = indexSubstrAnyStepText.getDisplay(); try { int indexSubstrAnyStepValue = Integer.parseInt( indexSubstrAnyStepText.getText() ); // The value must be >= 0 if ( indexSubstrAnyStepValue < 0 ) { indexSubstrAnyStepText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } indexSubstrAnyStepText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIndexSubstrAnyStep( indexSubstrAnyStepValue ); } catch ( NumberFormatException nfe ) { // Not even a number indexSubstrAnyStepText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the IndexSubstrIfMaxLenText Text */ private ModifyListener indexSubstrIfMaxLenTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = indexSubstrIfMaxLenText.getDisplay(); try { int indexSubstrIfMaxLenValue = Integer.parseInt( indexSubstrIfMaxLenText.getText() ); // The value must be >= 0 if ( indexSubstrIfMaxLenValue < 0 ) { indexSubstrIfMaxLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } indexSubstrIfMaxLenText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIndexSubstrIfMaxLen( indexSubstrIfMaxLenValue ); } catch ( NumberFormatException nfe ) { // Not even a number indexSubstrIfMaxLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the IndexSubstrIfMinLenText Text */ private ModifyListener indexSubstrIfMinLenTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = indexSubstrIfMinLenText.getDisplay(); try { int indexSubstrIfMinLenValue = Integer.parseInt( indexSubstrIfMinLenText.getText() ); // The value must be >= 0 if ( indexSubstrIfMinLenValue < 0 ) { indexSubstrIfMinLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } indexSubstrIfMinLenText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIndexSubstrIfMinLen( indexSubstrIfMinLenValue ); } catch ( NumberFormatException nfe ) { // Not even a number indexSubstrIfMinLenText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the writeTimeout Text */ private ModifyListener writeTimeoutTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = writeTimeoutText.getDisplay(); try { int writeTimeoutValue = Integer.parseInt( writeTimeoutText.getText() ); // The value must be >= 0 if ( writeTimeoutValue < 0 ) { writeTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } writeTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcWriteTimeout( writeTimeoutValue ); } catch ( NumberFormatException nfe ) { // Not even a number writeTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; /** * The listener for the idleTimeout Text */ private ModifyListener idleTimeoutTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { Display display = idleTimeoutText.getDisplay(); try { int idleTimeoutValue = Integer.parseInt( idleTimeoutText.getText() ); // The value must be >= 0 if ( idleTimeoutValue < 0 ) { idleTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); return; } idleTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_BLACK ) ); getConfiguration().getGlobal().setOlcIdleTimeout( idleTimeoutValue ); } catch ( NumberFormatException nfe ) { // Not even a number idleTimeoutText.setForeground( display.getSystemColor( SWT.COLOR_RED ) ); } } }; private WidgetModifyListener timeLimitTableListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> timeLimits = new ArrayList<String>(); for ( LimitWrapper limitWrapper : timeLimitTableViewer.getElements() ) { timeLimits.add( limitWrapper.toString() ); } getConfiguration().getGlobal().setOlcTimeLimit( timeLimits ); } }; /** * The listener for the sizeLimit Text */ private SelectionListener sizeLimitEditSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { SizeLimitDialog dialog = new SizeLimitDialog( sizeLimitText.getShell(), sizeLimitText.getText() ); if ( dialog.open() == OverlayDialog.OK ) { String newSizeLimitStr = dialog.getNewLimit(); if ( newSizeLimitStr != null ) { sizeLimitText.setText( newSizeLimitStr ); getConfiguration().getGlobal().setOlcSizeLimit( newSizeLimitStr ); } } } }; // The listener for the TcpBufferTableWidget private WidgetModifyListener tcpBufferTableWidgetListener = new WidgetModifyListener() { @Override public void widgetModified( WidgetModifyEvent event ) { // Process the parameter modification TableWidget<TcpBufferWrapper> tcpBufferWrapperTable = (TableWidget<TcpBufferWrapper>)event.getSource(); List<String> tcpBuffers = new ArrayList<String>(); for ( Object tcpBufferWrapper : tcpBufferWrapperTable.getElements() ) { String str = tcpBufferWrapper.toString(); tcpBuffers.add( str ); } getConfiguration().getGlobal().setOlcTCPBuffer( tcpBuffers ); } }; /** * Creates the OpenLDAP tuning config Tab. It contains 2 rows, with * 2 columns : * * <pre> * +-----------------------------------+---------------------------------+ * | | | * | Network | Concurrency | * | | | * +-----------------------------------+---------------------------------+ * | | | * | LDAP limits | Index limits | * | | | * +-----------------------------------+---------------------------------+ * </pre> * {@inheritDoc} */ protected void createFormContent( Composite parent, FormToolkit toolkit ) { TableWrapLayout twl = new TableWrapLayout(); twl.numColumns = 2; twl.makeColumnsEqualWidth = true; parent.setLayout( twl ); // The Network part Composite networkComposite = toolkit.createComposite( parent ); networkComposite.setLayout( new GridLayout() ); TableWrapData networkCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); networkCompositeTableWrapData.grabHorizontal = true; networkComposite.setLayoutData( networkCompositeTableWrapData ); // The Concurrency part Composite concurrencyComposite = toolkit.createComposite( parent ); concurrencyComposite.setLayout( new GridLayout() ); TableWrapData concurrencyCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); concurrencyCompositeTableWrapData.grabHorizontal = true; concurrencyComposite.setLayoutData( concurrencyCompositeTableWrapData ); // The LDAP Limits part Composite ldapLimitsComposite = toolkit.createComposite( parent ); ldapLimitsComposite.setLayout( new GridLayout() ); TableWrapData ldapLimitsCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); ldapLimitsCompositeTableWrapData.grabHorizontal = true; ldapLimitsComposite.setLayoutData( ldapLimitsCompositeTableWrapData ); // The Index Limits part Composite indexLimitsComposite = toolkit.createComposite( parent ); indexLimitsComposite.setLayout( new GridLayout() ); TableWrapData indexLimitsCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); indexLimitsCompositeTableWrapData.grabHorizontal = true; indexLimitsComposite.setLayoutData( indexLimitsCompositeTableWrapData ); // Now, create the sections createNetworkSection( toolkit, networkComposite ); createConcurrencySection( toolkit, concurrencyComposite ); createLdapLimitsSection( toolkit, ldapLimitsComposite ); createIndexLimitsSection( toolkit, indexLimitsComposite ); } /** * Creates the Network section. We support the configuration * of those parameters : * <ul> * <li>olcSockbufMaxIncoming</li> * <li>olcSockbufMaxIncomingAuth</li> * <li>olcTCPBuffer</li> * </ul> * * <pre> * .-------------------------------------. * | TCP configuration                   | * +-------------------------------------+ * | TCPBuffers                          | * | +-----------------------+           | * | | xyz                   | (Add)     | * | | abc                   | (Edit)    | * | |                       | (Delete)  | * | +-----------------------+           | * |                                     | * | Max Incoming Buffer      : [      ] | * | Max Incoming Buffer Auth : [      ] | * +-------------------------------------+ * </pre> * * * @param toolkit the toolkit * @param parent the parent composite */ private void createNetworkSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPTuningPage.NetworkSection" ) ); // The content Composite networkSectionComposite = createSectionComposite( toolkit, section, 2, false ); // The TCPBuffers Label Label serverIdLabel = toolkit.createLabel( networkSectionComposite, Messages.getString( "OpenLDAPTuningPage.TCPBuffers" ) ); //$NON-NLS-1$ serverIdLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) ); // The TCPBuffers widget tcpBufferTableWidget = new TableWidget<TcpBufferWrapper>( new TcpBufferDecorator( networkSectionComposite.getShell() ) ); tcpBufferTableWidget.createWidgetWithEdit( networkSectionComposite, toolkit ); tcpBufferTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) ); tcpBufferTableWidget.addWidgetModifyListener( tcpBufferTableWidgetListener ); // The olcSockbufMaxIncoming parameter. toolkit.createLabel( networkSectionComposite, Messages.getString( "OpenLDAPTuningPage.SockbufMaxIncoming" ) ); //$NON-NLS-1$ sockbufMaxIncomingText = toolkit.createText( networkSectionComposite, "" ); sockbufMaxIncomingText.setLayoutData( new GridData( SWT.LEFT, SWT.NONE, false, false ) ); // From 0 to 262 143 (0x3FFFF) sockbufMaxIncomingText.setTextLimit( 6 ); // Attach a listener to check the value sockbufMaxIncomingText.addModifyListener( sockbufMaxIncomingTextListener ); // The olcSockbufMaxIncomingAuth parameter. toolkit.createLabel( networkSectionComposite, Messages.getString( "OpenLDAPTuningPage.SockbufMaxIncomingAuth" ) ); //$NON-NLS-1$ sockbufMaxIncomingAuthText = toolkit.createText( networkSectionComposite, "" ); sockbufMaxIncomingAuthText.setLayoutData( new GridData( SWT.LEFT, SWT.NONE, false, false ) ); // From 0 to 4 193 303 (0x3FFFFF) sockbufMaxIncomingAuthText.setTextLimit( 7 ); // Attach a listener to check the value sockbufMaxIncomingAuthText.addModifyListener( sockbufMaxIncomingAuthTextListener ); } /** * Creates the Concurrency section. We support the configuration * of those parameters : * <ul> * <li>olcConcurrency</li> * <li>olcConnMaxPending</li> * <li>olcConnMaxPendingAuth</li> * <li>olcListenerThreads</li> * <li>olcThreads</li> * <li>olcToolThreads</li> * </ul> * * <pre> * .-------------------------------------. * | Concurrency | * +-------------------------------------+ * | Concurrency : [      ] | * | Max Pending Conn  : [      ] | * | Max Pending Conn Auth  : [      ] | * | Nb Threads  : [      ] | * | Nb Threads Tool Mode : [      ] | * | Nb Listener threads  : [      ] | * +-------------------------------------+ * </pre> * * @param toolkit the toolkit * @param parent the parent composite */ private void createConcurrencySection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPTuningPage.ConcurrencySection" ) ); // The content Composite concurrencySectionComposite = createSectionComposite( toolkit, section, 2, false ); // The olcConcurrency parameter. concurrencyText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.Concurrency" ), "", 5, concurrencyTextListener ); // The olcConnMaxPending parameter. connMaxPendingText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.ConnMaxPending" ), "", 5, connMaxPendingTextListener ); // The olcConnMaxPendingAuth parameter. connMaxPendingAuthText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.ConnMaxPendingAuth" ), "", 5, connMaxPendingAuthTextListener ); // The olcListenerThreads parameter. listenerThreadsText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.ListenerThreads" ), "", 5, listenerThreadsTextListener ); // The olcThreads parameter. threadsText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.Threads" ), "", 5, threadsTextListener ); // The olcToolThreads parameter. toolThreadsText = CommonUIUtils.createText( toolkit, concurrencySectionComposite, Messages.getString( "OpenLDAPTuningPage.ToolThreads" ), "", 5, toolThreadsTextListener ); } /** * The Index Limits section. We support the configuration * of those parameters : * <ul> * </ul> * <li>olcIdleTimeout</li> * <li>olcSizeLimit</li> * <li>olcTimeLimit</li> * <li>olcWriteTimeout</li> * <pre> * .-------------------------------------. * | LDAP Limits                    | * +-------------------------------------+ * | Write Timeout : [      ] | * | Idle Timeout : [      ] | * | Size Limit : [ ] | * | Time Limit : | * | +-----------------------+           | * | | xyz                   | (Add)     | * | | abc                   | (Edit)    | * | |                       | (Delete)  | * | +-----------------------+           | * | | * +-------------------------------------+ * </pre> * * @param toolkit the toolkit * @param parent the parent composite */ private void createLdapLimitsSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPTuningPage.LdapLimitsSection" ) ); // The content Composite ldapLimitSectionComposite = createSectionComposite( toolkit, section, 4, false ); // The olcWriteTimeout parameter. toolkit.createLabel( ldapLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.WriteTimeout" ) ); //$NON-NLS-1$ writeTimeoutText = toolkit.createText( ldapLimitSectionComposite, "" ); writeTimeoutText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) ); // Attach a listener to check the value writeTimeoutText.addModifyListener( writeTimeoutTextListener ); //toolkit.createLabel( ldapLimitSectionComposite, "" ); //toolkit.createLabel( ldapLimitSectionComposite, "" ); // The olcIdleTimeout parameter. toolkit.createLabel( ldapLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IdleTimeout" ) ); //$NON-NLS-1$ idleTimeoutText = toolkit.createText( ldapLimitSectionComposite, "" ); idleTimeoutText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) ); // Attach a listener to check the value idleTimeoutText.addModifyListener( idleTimeoutTextListener ); //toolkit.createLabel( ldapLimitSectionComposite, "" ); //toolkit.createLabel( ldapLimitSectionComposite, "" ); // The olcSizeLimit parameter. toolkit.createLabel( ldapLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.SizeLimit" ) ); //$NON-NLS-1$ sizeLimitText = toolkit.createText( ldapLimitSectionComposite, "" ); GridData sizeLimitData= new GridData( SWT.FILL, SWT.NONE, false, false, 1, 1 ); sizeLimitData.horizontalAlignment = SWT.FILL; Rectangle rect = sizeLimitText.getShell().getMonitor().getClientArea(); sizeLimitData.widthHint = rect.width/12; sizeLimitText.setLayoutData(sizeLimitData ); sizeLimitText.setEditable( false ); // The SizeLimit edit button sizeLimitEditButton = BaseWidgetUtils.createButton( ldapLimitSectionComposite, Messages.getString( "OpenLDAPSecurityPage.Edit" ), 1 ); //$NON-NLS-1$ sizeLimitEditButton.setLayoutData( new GridData( SWT.RIGHT, SWT.CENTER, false, false ) ); sizeLimitEditButton.addSelectionListener( sizeLimitEditSelectionListener ); toolkit.createLabel( ldapLimitSectionComposite, "" ); // The olcTimeLimit parameter. toolkit.createLabel( ldapLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.TimeLimit" ) ); //$NON-NLS-1$ timeLimitTableViewer = new TableWidget<TimeLimitWrapper>( new TimeLimitDecorator( ldapLimitSectionComposite.getShell() ) ); timeLimitTableViewer.createWidgetWithEdit( ldapLimitSectionComposite, toolkit ); timeLimitTableViewer.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) ); timeLimitTableViewer.addWidgetModifyListener( timeLimitTableListener ); /* toolkit.createLabel( ldapLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.TimeLimit" ) ); //$NON-NLS-1$ timeLimitText = toolkit.createText( ldapLimitSectionComposite, "" ); timeLimitText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); timeLimitText.setEditable( false ); // The TimeLimit edit button timeLimitEditButton = BaseWidgetUtils.createButton( ldapLimitSectionComposite, Messages.getString( "OpenLDAPSecurityPage.Edit" ), 1 ); timeLimitEditButton.setLayoutData( new GridData( SWT.RIGHT, SWT.CENTER, false, false ) ); timeLimitEditButton.addSelectionListener( timeLimitEditSelectionListener ); */ } /** * The Index Limits section. We support the configuration * of those parameters : * <ul> * <li>olcIndexIntLen</li> * <li>olcIndexSubstrAnyLen</li> * <li>olcIndexSubstrAnyStep</li> * <li>olcIndexSubstrIfMaxLen</li> * <li>olcIndexSubstrIfMinLen</li> * </ul> * * <pre> * .-------------------------------------. * | Concurrency | * +-------------------------------------+ * | Integer Indices Length : [      ] | * | Subany Indices Length  : [      ] | * | Subany Indices Step   : [      ] | * | Sub indices Max length : [      ] | * | Sub indices Min length : [      ] | * +-------------------------------------+ * </pre> * * @param toolkit the toolkit * @param parent the parent composite */ private void createIndexLimitsSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPTuningPage.IndexLimitsSection" ) ); // The content Composite indexLimitSectionComposite = createSectionComposite( toolkit, section, 2, false ); // The olcIndexIntLen parameter. indexIntLenText = CommonUIUtils.createText( toolkit, indexLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IndexIntLen" ), "", 5, indexIntLenTextListener ); // The olcIndexSubstrAnyLen parameter. indexSubstrAnyLenText = CommonUIUtils.createText( toolkit, indexLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IndexSubstrAnyLen" ), "", 5, indexSubstrAnyLenTextListener ); // The olcIndexSubstrAnyStep parameter. indexSubstrAnyStepText = CommonUIUtils.createText( toolkit, indexLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IndexSubstrAnyStep" ), "", 5, indexSubstrAnyStepTextListener ); // The olcIndexSubstrIfMaxLen parameter. indexSubstrIfMaxLenText = CommonUIUtils.createText( toolkit, indexLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IndexSubstrIfMaxLen" ), "", 5, indexSubstrIfMaxLenTextListener ); // The olcIndexSubstrIfMinLen parameter. indexSubstrIfMinLenText = CommonUIUtils.createText( toolkit, indexLimitSectionComposite, Messages.getString( "OpenLDAPTuningPage.IndexSubstrIfMinLen" ), "", 5, indexSubstrIfMinLenTextListener ); } /** * Construct a list of TcpBufferWrapper list from the String we get from the LDAP server. * We have to parse this : * <pre> * [listener=<URL>] [{read|write}=]<size> * </pre> * @param tcpBufferList * @return */ private List<TcpBufferWrapper> createTcpBufferList( List<String> tcpBufferList ) { List<TcpBufferWrapper> tcpBufferWrapperList = new ArrayList<TcpBufferWrapper>(); for ( String tcpBuffer : tcpBufferList ) { if ( tcpBuffer != null ) { TcpBufferWrapper tcpBufferWrapper = new TcpBufferWrapper( tcpBuffer ); tcpBufferWrapperList.add( tcpBufferWrapper ); } } return tcpBufferWrapperList; } /** * {@inheritDoc} */ public void refreshUI() { removeListeners(); // Getting the global configuration object OlcGlobal global = getConfiguration().getGlobal(); if ( global != null ) { // // Assigning values to UI Controls // // TCPBuffer Text List<TcpBufferWrapper> tcpBufferList = createTcpBufferList( global.getOlcTCPBuffer() ); tcpBufferTableWidget.setElements( tcpBufferList ); // Socket Buffer Max Incoming Text BaseWidgetUtils.setValue( global.getOlcSockbufMaxIncoming(), sockbufMaxIncomingText ); // Socket Buffer Max Incoming Text BaseWidgetUtils.setValue( global.getOlcSockbufMaxIncomingAuth(), sockbufMaxIncomingAuthText ); // Concurrency Text BaseWidgetUtils.setValue( global.getOlcConcurrency(), concurrencyText ); // ConnMaxPending Text BaseWidgetUtils.setValue( global.getOlcConnMaxPending(), connMaxPendingText ); // ConnMaxPendingAuth Text BaseWidgetUtils.setValue( global.getOlcConnMaxPendingAuth(), connMaxPendingAuthText ); // ListenerThreads Text BaseWidgetUtils.setValue( global.getOlcListenerThreads(), listenerThreadsText ); // Threads Text BaseWidgetUtils.setValue( global.getOlcThreads(), threadsText ); // ToolThreads Text BaseWidgetUtils.setValue( global.getOlcToolThreads(), toolThreadsText ); // IndexIntLen Text BaseWidgetUtils.setValue( global.getOlcIndexIntLen(), indexIntLenText ); // IndexSubstrAnyLen Text BaseWidgetUtils.setValue( global.getOlcIndexSubstrAnyLen(), indexSubstrAnyLenText ); // IndexSubstrAnyStep Text BaseWidgetUtils.setValue( global.getOlcIndexSubstrAnyStep(), indexSubstrAnyStepText ); // IndexSubstrIfMaxLen Text BaseWidgetUtils.setValue( global.getOlcIndexSubstrIfMaxLen(), indexSubstrIfMaxLenText ); // IndexSubstrIfMinLen Text BaseWidgetUtils.setValue( global.getOlcIndexSubstrIfMinLen(), indexSubstrIfMinLenText ); // IndexSubstrIfMinLen Text BaseWidgetUtils.setValue( global.getOlcWriteTimeout(), writeTimeoutText ); // IdleTiemout Text BaseWidgetUtils.setValue( global.getOlcIdleTimeout(), idleTimeoutText ); // SizeLimit Text BaseWidgetUtils.setValue( global.getOlcSizeLimit(), sizeLimitText ); // TimeLimit Text Text List<String> timeLimitList = getConfiguration().getGlobal().getOlcTimeLimit(); List<TimeLimitWrapper> limitWrappers = new ArrayList<TimeLimitWrapper>(); if ( ( timeLimitList != null ) && ( timeLimitList.size() > 0 ) ) { for ( String timeLimit : timeLimitList ) { limitWrappers.add( new TimeLimitWrapper( timeLimit ) ); } timeLimitTableViewer.setElements( limitWrappers ); } } addListeners(); } /** * Adds the listeners. */ private void addListeners() { addDirtyListener( tcpBufferTableWidget ); addDirtyListener( sockbufMaxIncomingText ); addDirtyListener( sockbufMaxIncomingAuthText ); addDirtyListener( concurrencyText ); addDirtyListener( connMaxPendingText ); addDirtyListener( connMaxPendingAuthText ); addDirtyListener( listenerThreadsText ); addDirtyListener( threadsText ); addDirtyListener( toolThreadsText ); addDirtyListener( indexIntLenText ); addDirtyListener( indexSubstrAnyLenText ); addDirtyListener( indexSubstrAnyStepText ); addDirtyListener( indexSubstrIfMaxLenText ); addDirtyListener( indexSubstrIfMinLenText ); addDirtyListener( writeTimeoutText ); addDirtyListener( idleTimeoutText); addDirtyListener( sizeLimitText ); addDirtyListener( timeLimitTableViewer ); } /** * Removes the listeners */ private void removeListeners() { removeDirtyListener( tcpBufferTableWidget ); removeDirtyListener( sockbufMaxIncomingText ); removeDirtyListener( sockbufMaxIncomingAuthText ); removeDirtyListener( concurrencyText ); removeDirtyListener( connMaxPendingText ); removeDirtyListener( connMaxPendingAuthText ); removeDirtyListener( listenerThreadsText ); removeDirtyListener( threadsText ); removeDirtyListener( toolThreadsText ); removeDirtyListener( indexIntLenText ); removeDirtyListener( indexSubstrAnyLenText ); removeDirtyListener( indexSubstrAnyStepText ); removeDirtyListener( indexSubstrIfMaxLenText ); removeDirtyListener( indexSubstrIfMinLenText ); removeDirtyListener( writeTimeoutText ); removeDirtyListener( idleTimeoutText); removeDirtyListener( sizeLimitText ); removeDirtyListener( timeLimitTableViewer ); } }