/* * 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.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; 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.AllowFeatureEnum; import org.apache.directory.studio.openldap.common.ui.model.AuthzPolicyEnum; import org.apache.directory.studio.openldap.common.ui.model.DisallowFeatureEnum; import org.apache.directory.studio.openldap.common.ui.model.RequireConditionEnum; import org.apache.directory.studio.openldap.common.ui.model.RestrictOperationEnum; import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPluginUtils; import org.apache.directory.studio.openldap.config.editor.OpenLDAPServerConfigurationEditor; import org.apache.directory.studio.openldap.config.editor.wrappers.AllowFeatureDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.DisallowFeatureDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.OrderedStringValueDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.OrderedStringValueWrapper; import org.apache.directory.studio.openldap.config.editor.wrappers.RequireConditionDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.RestrictOperationDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.StringValueDecorator; import org.apache.directory.studio.openldap.config.model.OlcGlobal; 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.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.Group; 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; /** * This class represents the Options Page of the Server Configuration Editor. We manage the * following parameters : * <ul> * <li>Operations and features : * <ul> * <li>olcAllows</li> * <li>olcDisallows</li> * <li>olcRequires</li> * <li>olcRestrict</li> * </ul> * </li> * <li>Authorization regexp & rewrite rules : * <ul> * <li>olcAuthIDRewrite</li> * <li>olcAuthzRegexp</li> * </ul> * </li> * <li>Miscellaneous options : * <ul> * <li>olcArgsFile</li> * <li>olcPluginLogFile</li> * <li>olcReferral</li> * <li>olcAuthzPolicy</li> * <li>olcRootDSE</li> * <li>olcReadOnly</li> * <li>olcGentleHUP</li> * <li>olcReadOnly</li> * <li>olcReverseLookup</li> * </ul> * </li> * </ul> * Here is the content of this page : * <pre> * .--------------------------------------------------------------------------------------. * | Options | * +--------------------------------------------------------------------------------------+ * | .---------------------------------------. .----------------------------------------. | * | |V Features | |V Operations | | * | +---------------------------------------+ +----------------------------------------+ | * | | | | | | * | | Allowed Features : | | Required Conditions : | | * | | +--------------------------+ | | +--------------------------+ | | * | | | xyz | (Add...) | | | xyz | (Add...) | | * | | | abcde | | | | abcde | | | * | | | aaa | (Delete) | | | aaa | (Delete) | | * | | +--------------------------+ | | +--------------------------+ | | * | | | | | | * | | Disallowed Features : | | Restricted Operations : | | * | | +--------------------------+ | | +--------------------------+ | | * | | | xyz | (Add...) | | | xyz | (Add...) | | * | | | abcde | | | | abcde | | | * | | | aaa | (Delete) | | | aaa | (Delete) | | * | | +--------------------------+ | | +--------------------------+ | | * | +---------------------------------------+ +----------------------------------------+ | * | .---------------------------------------. .----------------------------------------. | * | |V Authentication ID rewrite rules | |V Authorisation Regexp | | * | +---------------------------------------+ +----------------------------------------+ | * | | +--------------------------+ | | +--------------------------+ | | * | | | xyz | (Add...) | | | xyz | (Add...) | | * | | | abcde | (Edit) | | | abcde | (Edit...) | | * | | | aaa | (Delete) | | | aaa | (Delete) | | * | | | | -------- | | | | --------- | | * | | | | (Up...) | | | | (Up...) | | * | | +--------------------------+ (Down) | | +--------------------------+ (Down...) | | * | +---------------------------------------+ +----------------------------------------+ | * | .----------------------------------------------------------------------------------. | * | |V Miscellaneous options | | * | +----------------------------------------------------------------------------------+ | * | | Args File : [///////////////////////] Plugin Log File : [//////////////////] | | * | | | | * | | Referral : [///////////////////////] Authz Policy : [------------------] | | * | | | | * | | Root DSE : Other : | | * | | +--------------------------+ .------------------------------------. | | * | | | xyz | (Add...) | [X] Read Only | | | * | | | abcde | (Edit) | [X] GentleHUP | | | * | | | aaa | (Delete) | [X] Reverse Lookup | | | * | | +--------------------------+ '------------------------------------' | | * | +----------------------------------------------------------------------------------+ | * +--------------------------------------------------------------------------------------+ * </pre> * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OptionsPage extends OpenLDAPServerConfigurationEditorPage { /** The Page ID*/ public static final String ID = OptionsPage.class.getName(); //$NON-NLS-1$ /** The Page Title */ private static final String TITLE = Messages.getString( "OpenLDAPOptionsPage.Title" ); // UI Controls // Operations and features /** The olcAllows parameter */ private TableWidget<AllowFeatureEnum> allowFeatureTableWidget; /** The olcDisallows parameter */ private TableWidget<DisallowFeatureEnum> disallowFeatureTableWidget; /** The olcRequires parameter */ private TableWidget<RequireConditionEnum> requireConditionTableWidget; /** The olcRestrict parameter */ private TableWidget<RestrictOperationEnum> restrictOperationTableWidget; // The Authz regexp and rewrite rules /** The olcAuthIDRewrite parameter */ private TableWidget<OrderedStringValueWrapper> authIdRewriteTableWidget; /** The olcAuthzRegexp parameter */ private TableWidget<OrderedStringValueWrapper> authzRegexpTableWidget; // The miscellaneous parameters /** The olcArgsFile parameter */ private Text argsFileText; /** The olcPluginLogFile parameter */ private Text pluginLogFileText; /** The olcReferral parameter */ private Text referralText; /** The olcRootDSE parameter */ private TableWidget<StringValueWrapper> rootDseTableWidget; /** The olcAuthzPolicy parameter */ private Combo authzPolicyCombo; /** The olcGentleHUP parameter */ private Button gentleHupCheckbox; /** The olcReadOnly parameter */ private Button readOnlyCheckbox; /** The olcReverseLookup parameter */ private Button reverseLookupCheckbox; /** * The olcAllows listener */ private WidgetModifyListener allowFeatureListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> allowFeatures = new ArrayList<String>(); for ( AllowFeatureEnum allowFeature : allowFeatureTableWidget.getElements() ) { allowFeatures.add( allowFeature.getName() ); } getConfiguration().getGlobal().setOlcAllows( allowFeatures ); } }; /** * The olcDisallows listener */ private WidgetModifyListener disallowFeatureListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> disallowFeatures = new ArrayList<String>(); for ( DisallowFeatureEnum disallowFeature : disallowFeatureTableWidget.getElements() ) { disallowFeatures.add( disallowFeature.getName() ); } getConfiguration().getGlobal().setOlcDisallows( disallowFeatures ); } }; /** * The olcRequires listener */ private WidgetModifyListener requireConditionListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> requires = new ArrayList<String>(); for ( RequireConditionEnum requireCondition : requireConditionTableWidget.getElements() ) { requires.add( requireCondition.getName() ); } getConfiguration().getGlobal().setOlcRequires( requires ); } }; /** * The olcRestrict listener */ private WidgetModifyListener restrictOperationListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> restricts = new ArrayList<String>(); for ( RestrictOperationEnum restrictOperation : restrictOperationTableWidget.getElements() ) { restricts.add( restrictOperation.getName() ); } getConfiguration().getGlobal().setOlcRestrict( restricts ); } }; /** * The olcAuthIdRewrite listener */ private WidgetModifyListener authIdRewriteListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> authIdRewrites = new ArrayList<String>(); for ( OrderedStringValueWrapper authIdRewrite : authIdRewriteTableWidget.getElements() ) { authIdRewrites.add( authIdRewrite.toString() ); } getConfiguration().getGlobal().setOlcAuthIDRewrite( authIdRewrites ); } }; /** * The olcAuthzRegexp listener */ private WidgetModifyListener authzRegexpListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> authzRegexps = new ArrayList<String>(); for ( OrderedStringValueWrapper authzRegexp : authzRegexpTableWidget.getElements() ) { authzRegexps.add( authzRegexp.toString() ); } getConfiguration().getGlobal().setOlcAuthzRegexp( authzRegexps ); } }; /** * The olcArgsFile listener */ private ModifyListener argsFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcArgsFile( argsFileText.getText() ); } }; /** * The olcPluginFileLog listener */ private ModifyListener pluginLogFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcPluginLogFile( pluginLogFileText.getText() ); } }; /** * The olcReferral listener */ private ModifyListener referralTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcReferral( referralText.getText() ); } }; /** * The olcRootDSE listener */ private WidgetModifyListener rootDseTableListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> rootDses = new ArrayList<String>(); for ( StringValueWrapper rootDse : rootDseTableWidget.getElements() ) { rootDses.add( rootDse.getValue() ); } getConfiguration().getGlobal().setOlcRootDSE( rootDses ); } }; /** * The olcAuthzPolicy listener */ private SelectionListener authzPolicyComboListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcAuthzPolicy( authzPolicyCombo.getText() ); } }; /** * The olcGentleHup listener */ private SelectionListener gentleHupCheckboxSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcGentleHUP( gentleHupCheckbox.getSelection() ); } }; /** * The olcReadOnly listener */ private SelectionListener readOnlyCheckboxSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcReadOnly( readOnlyCheckbox.getSelection() ); } }; /** * The olcReverseLookup listener */ private SelectionListener reverseLookupCheckboxSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcReverseLookup( reverseLookupCheckbox.getSelection() ); } }; /** * Creates a new instance of OptionsPage. * * @param editor the associated editor */ public OptionsPage( OpenLDAPServerConfigurationEditor editor ) { super( editor, ID, TITLE ); } /** * {@inheritDoc} * Creates the OpenLDAP options config Tab. It contains 5 sections, in " * columns and 2 rows * * <pre> * +--------------+---------------+ * | | | * | Features | Operations | * | | | * +--------------+---------------+ * | | | * | rewrite | regexp | * | | | * +--------------+---------------+ * | | * | Miscellaneous | * | | * +------------------------------+ */ protected void createFormContent( Composite parent, FormToolkit toolkit ) { TableWrapLayout twl = new TableWrapLayout(); twl.numColumns = 2; parent.setLayout( twl ); // The upper left part Composite uperLeftComposite = toolkit.createComposite( parent ); uperLeftComposite.setLayout( new GridLayout() ); TableWrapData upperLeftCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 1 ); upperLeftCompositeTableWrapData.grabHorizontal = true; uperLeftComposite.setLayoutData( upperLeftCompositeTableWrapData ); // The upper right part Composite upperRightComposite = toolkit.createComposite( parent ); upperRightComposite.setLayout( new GridLayout() ); TableWrapData upperRightCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 1 ); upperRightCompositeTableWrapData.grabHorizontal = true; upperRightComposite.setLayoutData( upperRightCompositeTableWrapData ); // The middle left part Composite middleLeftComposite = toolkit.createComposite( parent ); middleLeftComposite.setLayout( new GridLayout() ); TableWrapData middleLeftCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 1 ); middleLeftCompositeTableWrapData.grabHorizontal = true; middleLeftComposite.setLayoutData( middleLeftCompositeTableWrapData ); // The middle right part Composite middleRightComposite = toolkit.createComposite( parent ); middleRightComposite.setLayout( new GridLayout() ); TableWrapData middleRightCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 1 ); middleRightCompositeTableWrapData.grabHorizontal = true; middleRightComposite.setLayoutData( middleRightCompositeTableWrapData ); // The lower part Composite lowerComposite = toolkit.createComposite( parent ); lowerComposite.setLayout( new GridLayout() ); TableWrapData lowerCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 1, 2 ); lowerCompositeTableWrapData.grabHorizontal = true; lowerComposite.setLayoutData( lowerCompositeTableWrapData ); createFeaturesSection( toolkit, middleLeftComposite ); createOperationsSection( toolkit, middleRightComposite ); createAuthIdRewriteSection( toolkit, middleLeftComposite ); createAuthzRegexpsSection( toolkit, middleRightComposite ); createMiscellaneousSection( toolkit, lowerComposite ); } /** * Creates the Features section. * *<pre> * .---------------------------------------. * |V Features | * +---------------------------------------+ * | | * | Allowed Features : | * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | | * | | aaa | (Delete) | * | +--------------------------+ | * | | * | Disallowed Features : | * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | | * | | aaa | (Delete) | * | +--------------------------+ | * +---------------------------------------+ *</pre> * @param toolkit the toolkit * @param parent the parent composite */ private void createFeaturesSection( FormToolkit toolkit, Composite parent ) { // The Features section, which can be expanded or compacted Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPOptionsPage.FeaturesSection" ) ); Composite composite = createSectionComposite( toolkit, section, 2, false ); // The olcAllows parameter label Label allowFeatureLabel = toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.AllowFeature" ) ); //$NON-NLS-1$ allowFeatureLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) ); // The olcAllows parameter table allowFeatureTableWidget = new TableWidget<AllowFeatureEnum>( new AllowFeatureDecorator( composite.getShell() ) ); allowFeatureTableWidget.createWidgetNoEdit( composite, toolkit ); allowFeatureTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( allowFeatureTableWidget, allowFeatureListener ); // The olcDisallows parameter label Label disallowFeatureLabel = toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.DisallowFeature" ) ); //$NON-NLS-1$ disallowFeatureLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) ); // The olcDisallows parameter table disallowFeatureTableWidget = new TableWidget<DisallowFeatureEnum>( new DisallowFeatureDecorator( composite.getShell() ) ); disallowFeatureTableWidget.createWidgetNoEdit( composite, toolkit ); disallowFeatureTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( disallowFeatureTableWidget, disallowFeatureListener ); } /** * Creates the Operations section. * <pre> * .----------------------------------------. * |V Operations | * +----------------------------------------+ * | | * | Required Conditions : | * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | | * | | aaa | (Delete) | * | +--------------------------+ | * | | * | Restricted Operations : | * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | | * | | aaa | (Delete) | * | +--------------------------+ | * +----------------------------------------+ * </pre> * @param toolkit the toolkit * @param parent the parent composite */ private void createOperationsSection( FormToolkit toolkit, Composite parent ) { // The Operations section, which can be expanded or compacted Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPOptionsPage.OperationsSection" ) ); Composite composite = createSectionComposite( toolkit, section, 2, false ); // The olcRequires parameter label Label requireConditionLabel = toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.RequireCondition" ) ); //$NON-NLS-1$ requireConditionLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) ); // The olcRequires parameter table requireConditionTableWidget = new TableWidget<RequireConditionEnum>( new RequireConditionDecorator( composite.getShell() ) ); requireConditionTableWidget.createWidgetNoEdit( composite, toolkit ); requireConditionTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( requireConditionTableWidget, requireConditionListener ); // The olcRestrict parameter label Label restrictOperationLabel = toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.RestrictOperation" ) ); //$NON-NLS-1$ restrictOperationLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) ); // The olcRestrict parameter table restrictOperationTableWidget = new TableWidget<RestrictOperationEnum>( new RestrictOperationDecorator( composite.getShell() ) ); restrictOperationTableWidget.createWidgetNoEdit( composite, toolkit ); restrictOperationTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( restrictOperationTableWidget, restrictOperationListener ); } /** * Creates the Authentication ID Rewrite Rules section. * <pre> * .----------------------------------------. * |V Authentication ID rewrite rules | * +----------------------------------------+ * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | (Edit...) | * | | aaa | (Delete) | * | | | --------- | * | | | (Up...) | * | +--------------------------+ (Down...) | * +----------------------------------------+ * </pre> * @param toolkit the toolkit * @param parent the parent composite */ private void createAuthIdRewriteSection( FormToolkit toolkit, Composite parent ) { Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPOptionsPage.AuthIdRewrite" ) ); Composite composite = createSectionComposite( toolkit, section, 2, false ); // The olcAuthIdRewrite parameter table authIdRewriteTableWidget = new TableWidget<OrderedStringValueWrapper>( new OrderedStringValueDecorator( composite.getShell() , "authIdRewrite") ); authIdRewriteTableWidget.createOrderedWidgetWithEdit( composite, toolkit ); authIdRewriteTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( authIdRewriteTableWidget, authIdRewriteListener ); } /** * Creates the Authz Regexp section. * <pre> * .----------------------------------------. * |V Authorization Regexps | * +----------------------------------------+ * | +--------------------------+ | * | | xyz | (Add...) | * | | abcde | (Edit...) | * | | aaa | (Delete) | * | | | --------- | * | | | (Up...) | * | +--------------------------+ (Down...) | * +----------------------------------------+ * </pre> * @param toolkit the toolkit * @param parent the parent composite */ private void createAuthzRegexpsSection( FormToolkit toolkit, Composite parent ) { Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPOptionsPage.AuthzRegexp" ) ); Composite composite = createSectionComposite( toolkit, section, 2, false ); // The olcAuthzRegexp parameter table authzRegexpTableWidget = new TableWidget<OrderedStringValueWrapper>( new OrderedStringValueDecorator( composite.getShell(), "AuthzRegexp" ) ); authzRegexpTableWidget.createOrderedWidgetWithEdit( composite, toolkit ); authzRegexpTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( authzRegexpTableWidget, authzRegexpListener ); } /** * Creates the miscellaneous section. * <pre> * .----------------------------------------------------------------------------------. * |V Miscellaneous options | * +----------------------------------------------------------------------------------+ * | Args File : [///////////////////////] Plugin Log File : [//////////////////] | * | | * | Referral : [///////////////////////] Authz Policy : [------------------] | * | | * | Root DSE : Other : | * | +--------------------------+ .------------------------------------. | * | | xyz | (Add...) | [X] Read Only | | * | | abcde | (Edit) | [X] GentleHUP | | * | | aaa | (Delete) | [X] Reverse Lookup | | * | +--------------------------+ '------------------------------------' | * +----------------------------------------------------------------------------------+ * </pre> * @param toolkit the toolkit * @param parent the parent composite */ private void createMiscellaneousSection( FormToolkit toolkit, Composite parent ) { Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPOptionsPage.Miscellaneous" ) ); Composite composite = createSectionComposite( toolkit, section, 5, false ); // The olcArgFile parameter. argsFileText = CommonUIUtils.createText( toolkit, composite, Messages.getString( "OpenLDAPOptionsPage.ArgsFile" ), "", -1, argsFileTextListener ); toolkit.createLabel( composite, "" ); // The olcPluginLogFile parameter. pluginLogFileText = CommonUIUtils.createText( toolkit, composite, Messages.getString( "OpenLDAPOptionsPage.PluginLogFile" ), "", -1, pluginLogFileTextListener ); // The olcReferral parameter. referralText = CommonUIUtils.createText( toolkit, composite, Messages.getString( "OpenLDAPOptionsPage.Referral" ), "", -1, referralTextListener ); toolkit.createLabel( composite, "" ); // The authzPolicy parameter toolkit.createLabel( composite, Messages.getString( "OpenLDAPSecurityPage.AuthzPolicy" ) ); //$NON-NLS-1$ authzPolicyCombo = BaseWidgetUtils.createCombo( composite, AuthzPolicyEnum.getNames(), -1, 1 ); authzPolicyCombo.addSelectionListener( authzPolicyComboListener ); // The olcRootDSE label. toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.RootDSEs" ) ); toolkit.createLabel( composite, "" ); toolkit.createLabel( composite, "" ); // The olcOther label. toolkit.createLabel( composite, Messages.getString( "OpenLDAPOptionsPage.Others" ) ); toolkit.createLabel( composite, "" ); // The olcRootDSE parameter. rootDseTableWidget = new TableWidget<StringValueWrapper>( new StringValueDecorator( composite.getShell(), Messages.getString( "OpenLDAPOptionsPage.RootDSE" ) ) ); rootDseTableWidget.createWidgetWithEdit( composite, toolkit ); rootDseTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); addModifyListener( rootDseTableWidget, rootDseTableListener ); toolkit.createLabel( composite, "" ); // A group for the others checkboxes Group othersGroup = BaseWidgetUtils.createGroup( composite, null, 2 ); GridLayout othersGroupGridLayout = new GridLayout( 3, false ); othersGroup.setLayout( othersGroupGridLayout ); othersGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); // The olcGentleHUP Button gentleHupCheckbox = BaseWidgetUtils.createCheckbox( othersGroup, Messages.getString( "OpenLDAPOptionsPage.GentleHUP" ), 1 ); gentleHupCheckbox.addSelectionListener( gentleHupCheckboxSelectionListener ); // The olcReadOnly Button readOnlyCheckbox = BaseWidgetUtils.createCheckbox( othersGroup, Messages.getString( "OpenLDAPOptionsPage.ReadOnly" ), 1 ); readOnlyCheckbox.addSelectionListener( readOnlyCheckboxSelectionListener ); toolkit.createLabel( composite, "" ); // The olcReverseLookup Button reverseLookupCheckbox = BaseWidgetUtils.createCheckbox( othersGroup, Messages.getString( "OpenLDAPOptionsPage.ReverseLookup" ), 1 ); reverseLookupCheckbox.addSelectionListener( reverseLookupCheckboxSelectionListener ); } /** * Adds listeners to UI Controls. */ private void addListeners() { addDirtyListener( allowFeatureTableWidget ); addDirtyListener( disallowFeatureTableWidget ); addDirtyListener( requireConditionTableWidget ); addDirtyListener( restrictOperationTableWidget ); addDirtyListener( authIdRewriteTableWidget ); addDirtyListener( authzRegexpTableWidget ); addDirtyListener( argsFileText ); addDirtyListener( pluginLogFileText ); addDirtyListener( referralText ); addDirtyListener( authzPolicyCombo ); addDirtyListener( rootDseTableWidget ); addDirtyListener( gentleHupCheckbox ); addDirtyListener( readOnlyCheckbox ); addDirtyListener( reverseLookupCheckbox ); } /** * Removes listeners to UI Controls. */ private void removeListeners() { removeDirtyListener( allowFeatureTableWidget ); removeDirtyListener( disallowFeatureTableWidget ); removeDirtyListener( requireConditionTableWidget ); removeDirtyListener( restrictOperationTableWidget ); removeDirtyListener( authIdRewriteTableWidget ); removeDirtyListener( authzRegexpTableWidget ); removeDirtyListener( argsFileText ); removeDirtyListener( pluginLogFileText ); removeDirtyListener( referralText ); removeDirtyListener( authzPolicyCombo ); removeDirtyListener( rootDseTableWidget ); removeDirtyListener( gentleHupCheckbox ); removeDirtyListener( readOnlyCheckbox ); removeDirtyListener( reverseLookupCheckbox ); } private void refreshAllowFeatures( OlcGlobal global ) { List<String> allowedFeatures = global.getOlcAllows(); List<AllowFeatureEnum> alloweds = new ArrayList<AllowFeatureEnum>(); if ( allowedFeatures != null ) { for ( String allowedFeature : allowedFeatures ) { alloweds.add( AllowFeatureEnum.getAllowFeature( allowedFeature ) ); } } allowFeatureTableWidget.setElements( alloweds ); } private void refreshDisllowFeatures( OlcGlobal global ) { List<String> disallowedFeatures = global.getOlcDisallows(); List<DisallowFeatureEnum> disalloweds = new ArrayList<DisallowFeatureEnum>(); if ( disallowedFeatures != null ) { for ( String disallowedFeature : disallowedFeatures ) { disalloweds.add( DisallowFeatureEnum.getFeature( disallowedFeature ) ); } } disallowFeatureTableWidget.setElements( disalloweds ); } private void refreshRequireConditions( OlcGlobal global ) { List<String> requireConditions = global.getOlcRequires(); List<RequireConditionEnum> requires = new ArrayList<RequireConditionEnum>(); if ( requireConditions != null ) { for ( String requireCondition : requireConditions ) { requires.add( RequireConditionEnum.getCondition( requireCondition ) ); } } requireConditionTableWidget.setElements( requires ); } private void refreshRestrictOperations( OlcGlobal global ) { List<String> restrictOperations = global.getOlcRestrict(); List<RestrictOperationEnum> restricts = new ArrayList<RestrictOperationEnum>(); if ( restrictOperations != null ) { for ( String restrictOperation : restrictOperations ) { restricts.add( RestrictOperationEnum.getRestrictOperation( restrictOperation ) ); } } restrictOperationTableWidget.setElements( restricts ); } /** * The AuthIdRewrite table is ordered, we need to deal with that. */ private void refreshAuthIdRewrites( OlcGlobal global ) { List<String> authIdRewrites = global.getOlcAuthIDRewrite(); if ( authIdRewrites != null ) { int nbElements = authIdRewrites.size(); List<OrderedStringValueWrapper> rewrites = new ArrayList<OrderedStringValueWrapper>( nbElements ); int[] valuePrefixes = new int[nbElements]; Map<Integer, String> values = new HashMap<Integer, String>(nbElements); int pos = 0; // First gather the values for ( String rewrite : authIdRewrites ) { // Parse the prefix, and set the element at the right place int prefix = OpenLdapConfigurationPluginUtils.getOrderingPrefix( rewrite ); valuePrefixes[pos++] = prefix; values.put( prefix, OpenLdapConfigurationPluginUtils.stripOrderingPrefix( rewrite ) ); } // Now, order them Arrays.sort( valuePrefixes ); // Ok, store the elements accordingly to their prefix now for ( int prefix : valuePrefixes ) { String value = values.get( prefix ); rewrites.add( new OrderedStringValueWrapper( prefix, value, true ) ); } authIdRewriteTableWidget.setElements( rewrites ); } else { // Store an empty list List<OrderedStringValueWrapper> rewrites = new ArrayList<OrderedStringValueWrapper>(); authIdRewriteTableWidget.setElements( rewrites ); } } private void refreshAuthzRegexps( OlcGlobal global ) { List<String> authzRegexps = global.getOlcAuthzRegexp(); if ( authzRegexps != null ) { int nbElements = authzRegexps.size(); List<OrderedStringValueWrapper> regexps = new ArrayList<OrderedStringValueWrapper>( nbElements ); int[] valuePrefixes = new int[nbElements]; Map<Integer, String> values = new HashMap<Integer, String>(nbElements); int pos = 0; // First gather the values for ( String regexp : authzRegexps ) { // Parse the prefix, and set the element at the right place int prefix = OpenLdapConfigurationPluginUtils.getOrderingPrefix( regexp ); valuePrefixes[pos] = prefix; values.put( prefix, OpenLdapConfigurationPluginUtils.stripOrderingPrefix( regexp ) ); } // Now, order them Arrays.sort( valuePrefixes ); // Ok, store the elements accordingly to their prefix now for ( int prefix : valuePrefixes ) { String value = values.get( prefix ); regexps.add( new OrderedStringValueWrapper( prefix, value, true ) ); } authzRegexpTableWidget.setElements( regexps ); } else { // Store an empty list List<OrderedStringValueWrapper> regexps = new ArrayList<OrderedStringValueWrapper>(); authzRegexpTableWidget.setElements( regexps ); } } private void refreshRootDseFiles( OlcGlobal global ) { List<String> rootDses = global.getOlcRootDSE(); List<StringValueWrapper> roots = new ArrayList<StringValueWrapper>(); if ( rootDses != null ) { for ( String rootDse : rootDses ) { roots.add( new StringValueWrapper( rootDse, true ) ); } } rootDseTableWidget.setElements( roots ); } /** * {@inheritDoc} */ public void refreshUI() { removeListeners(); // Getting the global configuration object OlcGlobal global = getConfiguration().getGlobal(); if ( global != null ) { // // Assigning values to UI Controls // // Allow Feature Table Widget refreshAllowFeatures( global ); // Disallow Feature Table Widget refreshDisllowFeatures( global ); // Require Condition Table Widget refreshRequireConditions( global ); // Restrict Operation Condition Table Widget refreshRestrictOperations( global ); // AuthID Rewrite Table Widget refreshAuthIdRewrites( global ); // Authz Regexp Table Widget refreshAuthzRegexps( global ); // Update the ArgsFileText BaseWidgetUtils.setValue( global.getOlcArgsFile(), argsFileText ); // Update the PluginLogFileText BaseWidgetUtils.setValue( global.getOlcPluginLogFile(), pluginLogFileText ); // Update the ReferralText BaseWidgetUtils.setValue( global.getOlcReferral(), referralText ); // AuthzPolicyl Combo String authzPolicy = global.getOlcAuthzPolicy(); if ( authzPolicy != null ) { // Select the right one boolean found = false; for ( String authzPolicyStr : AuthzPolicyEnum.getNames() ) { if ( authzPolicyStr.equalsIgnoreCase( authzPolicy ) ) { authzPolicyCombo.setText( authzPolicyStr ); found = true; break; } } if ( !found ) { authzPolicyCombo.setText( AuthzPolicyEnum.UNKNOWN.getName() ); } } else { authzPolicyCombo.setText( AuthzPolicyEnum.UNKNOWN.getName() ); } // Update the RootDSEText refreshRootDseFiles( global ); // Update the GentleHupCheckbox BaseWidgetUtils.setValue( global.getOlcGentleHUP(), gentleHupCheckbox ); // Update the ReadOnlyCheckbox BaseWidgetUtils.setValue( global.getOlcReadOnly(), readOnlyCheckbox ); // Update the GentleHupCheckbox BaseWidgetUtils.setValue( global.getOlcReverseLookup(), reverseLookupCheckbox ); addListeners(); } } }