/* * 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.acl.widgets; import java.text.MessageFormat; import org.apache.directory.studio.common.ui.widgets.AbstractWidget; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPlugin; import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPluginConstants; import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext; import org.apache.directory.studio.openldap.config.acl.dialogs.OpenLdapAccessLevelDialog; import org.apache.directory.studio.openldap.config.acl.model.AclAccessLevel; import org.apache.directory.studio.openldap.config.acl.model.AclAccessLevelLevelEnum; import org.apache.directory.studio.openldap.config.acl.model.AclControlEnum; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClause; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseAnonymous; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseDn; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseDnAttr; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseEnum; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseGroup; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseSaslSsf; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseSelf; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseSsf; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseStar; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseTlsSsf; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseTransportSsf; import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseUsers; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseDnAttributeComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseDnComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseGroupComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseSaslSsfComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseSsfComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseTlsSsfComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhoClauseTransportSsfComposite; /** * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OpenLdapAclWhoClauseWidget extends AbstractWidget implements SelectionListener { /** The ACL context */ private OpenLdapAclValueWithContext context; /** The array of clauses */ private Object[] clauses = new Object[] { new ClauseComboViewerName(), AclWhoClauseEnum.STAR, AclWhoClauseEnum.ANONYMOUS, AclWhoClauseEnum.USERS, AclWhoClauseEnum.SELF, AclWhoClauseEnum.DN, AclWhoClauseEnum.DNATTR, AclWhoClauseEnum.GROUP, AclWhoClauseEnum.SASL_SSF, AclWhoClauseEnum.SSF, AclWhoClauseEnum.TLS_SSF, AclWhoClauseEnum.TRANSPORT_SSF }; /** The array of access levels */ private Object[] accessLevels = new Object[] { new AccessLevelComboViewerName(), AclAccessLevelLevelEnum.MANAGE, AclAccessLevelLevelEnum.WRITE, AclAccessLevelLevelEnum.READ, AclAccessLevelLevelEnum.SEARCH, AclAccessLevelLevelEnum.COMPARE, AclAccessLevelLevelEnum.AUTH, AclAccessLevelLevelEnum.DISCLOSE, AclAccessLevelLevelEnum.NONE, new AccessLevelComboViewerCustom() }; /** The array of controls */ private Object[] controls = new Object[] { new ControlComboViewerName(), AclControlEnum.STOP, AclControlEnum.CONTINUE, AclControlEnum.BREAK }; /** The parent builder widget */ private OpenLdapAclWhoClausesBuilderWidget builderWidget; /** The row index */ private int index; /** The clause */ private AclWhoClause clause; /** The current clause selection */ private Object currentClauseSelection = clauses[0]; /** The current access level selection */ private Object currentAccessLevelSelection = accessLevels[0]; /** The current control selection */ private Object currentControlSelection = controls[0]; /** The current custom access level */ private AclAccessLevel currentCustomAccessLevel; // UI Widgets private Composite composite; private Composite configurationComposite; private ComboViewer clauseComboViewer; private ComboViewer accessLevelComboViewer; private ComboViewer controlComboViewer; private ToolBar toolbar; private ToolItem addButton; private ToolItem deleteButton; private ToolItem moveUpButton; private ToolItem moveDownButton; // Listeners /** The listener for the clause combo viewer */ private ISelectionChangedListener clauseComboViewerListener = new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event ) { // Getting the selected clause Object selection = ( ( StructuredSelection ) clauseComboViewer .getSelection() ).getFirstElement(); // Only changing the UI when the selection is different if ( currentClauseSelection != selection ) { // Storing the current selection currentClauseSelection = selection; // Disposing the current composite if ( ( configurationComposite != null ) && ( !configurationComposite.isDisposed() ) ) { configurationComposite.dispose(); configurationComposite = null; } // Setting the clause from the current selection setClause(); // Creating the configuration UI createConfigurationUI(); // Notifying listeners notifyListeners(); } } }; /** The listener for the access level combo viewer */ private ISelectionChangedListener accessLevelComboViewerListener = new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event ) { // Getting the selected access level Object selection = ( ( StructuredSelection ) accessLevelComboViewer .getSelection() ).getFirstElement(); // Special case for the 'custom' item if ( accessLevels[accessLevels.length - 1].equals( selection ) ) { // Getting the current access level AclAccessLevel accessLevel = null; if ( clause != null ) { accessLevel = clause.getAccessLevel(); } // Opening a dialog to edit the access level OpenLdapAccessLevelDialog accessLevelDialog = new OpenLdapAccessLevelDialog( accessLevel ); if ( accessLevelDialog.open() == OpenLdapAccessLevelDialog.OK ) { // Getting the access level from the dialog currentCustomAccessLevel = accessLevelDialog.getAccessLevel(); } else { // The dialog has been canceled // Only changing the UI when the selection is different if ( currentAccessLevelSelection != selection ) { accessLevelComboViewer.removeSelectionChangedListener( accessLevelComboViewerListener ); accessLevelComboViewer .setSelection( new StructuredSelection( currentAccessLevelSelection ) ); accessLevelComboViewer.addSelectionChangedListener( accessLevelComboViewerListener ); } // We exit here return; } } // Only changing the UI when the selection is different or we have a custom access level value to store if ( ( currentAccessLevelSelection != selection ) || ( currentCustomAccessLevel != null ) ) { // Storing the current selection currentAccessLevelSelection = selection; // Setting the access level from the current selection setAccessLevel(); // Is it a simple access level? AclAccessLevel accessLevel = clause.getAccessLevel(); if ( isSimple( accessLevel ) ) { currentAccessLevelSelection = accessLevel.getLevel(); } // Is it a custom access level? else if ( isCustom( accessLevel ) ) { currentAccessLevelSelection = accessLevels[accessLevels.length - 1]; } // Bogus case else { currentAccessLevelSelection = accessLevels[0]; } // Setting the correct selection and refreshing the combo viewer to update the labels accessLevelComboViewer.removeSelectionChangedListener( accessLevelComboViewerListener ); accessLevelComboViewer .setSelection( new StructuredSelection( currentAccessLevelSelection ) ); accessLevelComboViewer.addSelectionChangedListener( accessLevelComboViewerListener ); accessLevelComboViewer.refresh(); // Notifying listeners notifyListeners(); } } }; /** The listener for the control combo viewer */ private ISelectionChangedListener controlComboViewerListener = new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event ) { // Getting the selected control Object selection = ( ( StructuredSelection ) controlComboViewer .getSelection() ).getFirstElement(); // Only changing the UI when the selection is different if ( currentControlSelection != selection ) { // Storing the current selection currentControlSelection = selection; // Setting the control from the current selection setControl(); // Notifying listeners notifyListeners(); } } }; /** * Creates a new instance of OpenLdapAclWhoClauseWidget. * * @param builderWidget the parent builder widget * @param index the row index */ public OpenLdapAclWhoClauseWidget( OpenLdapAclWhoClausesBuilderWidget builderWidget, OpenLdapAclValueWithContext context, AclWhoClause clause, int index ) { this.builderWidget = builderWidget; this.clause = clause; this.index = index; this.context = context; } public void create( Composite parent ) { // Creating the widget base composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); // Creating the top composites Composite topComposite = BaseWidgetUtils.createColumnContainer( composite, 2, 1 ); Composite topSubComposite = BaseWidgetUtils.createColumnContainer( topComposite, 3, true, 1 ); // Creating the clause, access level and control combo viewers createClauseComboViewer( topSubComposite ); createAccessLevelComboViewer( topSubComposite ); createControlComboViewer( topSubComposite ); // Creating the toolbar and buttons createToolbarAndButtons( topComposite ); // Initializing the UI with the clause initWithClause(); // Adding the listeners to the UI widgets addListeners(); } /** * Initializes the UI with the clause */ private void initWithClause() { if ( clause != null ) { // Clause currentClauseSelection = AclWhoClauseEnum.get( clause ); // Access Level AclAccessLevel accessLevel = clause.getAccessLevel(); if ( accessLevel == null ) { currentAccessLevelSelection = accessLevels[0]; } else { // Is it a simple access level? if ( isSimple( accessLevel ) ) { currentAccessLevelSelection = accessLevel.getLevel(); } // Is it a custom access level? else if ( isCustom( accessLevel ) ) { currentAccessLevelSelection = accessLevels[accessLevels.length - 1]; } // Bogus case else { currentAccessLevelSelection = accessLevels[0]; } } // Control AclControlEnum control = clause.getControl(); if ( control == null ) { currentControlSelection = controls[0]; } else { currentControlSelection = control; } } else { // Defaulting to the first row of the arrays currentClauseSelection = clauses[0]; currentAccessLevelSelection = accessLevels[0]; currentControlSelection = controls[0]; } // Setting the selection for the combo viewers clauseComboViewer.setSelection( new StructuredSelection( currentClauseSelection ) ); accessLevelComboViewer.setSelection( new StructuredSelection( currentAccessLevelSelection ) ); controlComboViewer.setSelection( new StructuredSelection( currentControlSelection ) ); } /** * Indicates if the given access level is simple or not. * * @param accessLevel the access level * @return <code>true</code> if the access level is simple, * <code>false</code> if not */ private boolean isSimple( AclAccessLevel accessLevel ) { if ( accessLevel != null ) { return ( !accessLevel.isSelf() ) && ( accessLevel.getLevel() != null ); } return false; } /** * Indicates if the given access level is complex or not. * * @param accessLevel the access level * @return <code>true</code> if the access complex is simple, * <code>false</code> if not */ private boolean isCustom( AclAccessLevel accessLevel ) { if ( accessLevel != null ) { return ( accessLevel.isSelf() ) || ( ( accessLevel.getPrivilegeModifier() != null ) && ( accessLevel.getPrivileges().size() > 0 ) ); } return false; } /** * Creates the clause combo viewer. * * @param parent the parent composite */ private void createClauseComboViewer( Composite parent ) { clauseComboViewer = new ComboViewer( BaseWidgetUtils.createReadonlyCombo( parent, new String[0], -1, 1 ) ); clauseComboViewer.setContentProvider( new ArrayContentProvider() ); clauseComboViewer.setLabelProvider( new LabelProvider() { public String getText( Object element ) { if ( element instanceof ClauseComboViewerName ) { return "< Clause >"; } else if ( element instanceof AclWhoClauseEnum ) { AclWhoClauseEnum value = ( AclWhoClauseEnum ) element; switch ( value ) { case STAR: return "Anyone (*)"; case ANONYMOUS: return "Anonymous"; case USERS: return "Users"; case SELF: return "Self"; case DN: return "DN"; case DNATTR: return "DN in attribute"; case GROUP: return "Group"; case SASL_SSF: return "SASL SSF"; case SSF: return "SSF"; case TLS_SSF: return "TLS SSF"; case TRANSPORT_SSF: return "Transport SSF"; } } return super.getText( element ); } } ); clauseComboViewer.setInput( clauses ); clauseComboViewer.setSelection( new StructuredSelection( currentClauseSelection ) ); } /** * Creating the access level combo viewer. * * @param parent the parent composite */ private void createAccessLevelComboViewer( Composite parent ) { accessLevelComboViewer = new ComboViewer( BaseWidgetUtils.createReadonlyCombo( parent, new String[0], -1, 1 ) ); accessLevelComboViewer.setContentProvider( new ArrayContentProvider() ); accessLevelComboViewer.setLabelProvider( new LabelProvider() { public String getText( Object element ) { if ( element instanceof AccessLevelComboViewerName ) { return "< Access Level >"; } else if ( element instanceof AccessLevelComboViewerCustom ) { if ( ( clause != null ) && ( isCustom( clause.getAccessLevel() ) ) ) { return MessageFormat.format( "Custom... [{0}]", clause.getAccessLevel() ); } return "Custom..."; } else if ( element instanceof AclAccessLevelLevelEnum ) { AclAccessLevelLevelEnum value = ( AclAccessLevelLevelEnum ) element; switch ( value ) { case MANAGE: return "Manage"; case WRITE: return "Write"; case READ: return "Read"; case SEARCH: return "Search"; case COMPARE: return "Compare"; case AUTH: return "Auth"; case DISCLOSE: return "Disclose"; case NONE: return "None"; } } return super.getText( element ); } } ); accessLevelComboViewer.setInput( accessLevels ); accessLevelComboViewer.setSelection( new StructuredSelection( currentAccessLevelSelection ) ); } /** * Creates the control combo viewer. * * @param parent the parent composite */ private void createControlComboViewer( Composite parent ) { controlComboViewer = new ComboViewer( BaseWidgetUtils.createReadonlyCombo( parent, new String[0], -1, 1 ) ); controlComboViewer.setContentProvider( new ArrayContentProvider() ); controlComboViewer.setLabelProvider( new LabelProvider() { public String getText( Object element ) { if ( element instanceof ControlComboViewerName ) { return "< Control >"; } else if ( element instanceof AclControlEnum ) { AclControlEnum value = ( AclControlEnum ) element; switch ( value ) { case STOP: return "Stop"; case CONTINUE: return "Continue"; case BREAK: return "Break"; } } return super.getText( element ); } } ); controlComboViewer.setInput( controls ); controlComboViewer.setSelection( new StructuredSelection( currentControlSelection ) ); } /** * Creates the toolbar and buttons. * * @param parent the parent composite */ private void createToolbarAndButtons( Composite parent ) { // Creating the toolbar toolbar = new ToolBar( parent, SWT.HORIZONTAL ); // Creating the 'Add' button addButton = new ToolItem( toolbar, SWT.PUSH ); addButton.setToolTipText( "Add" ); addButton.setImage( OpenLdapAclEditorPlugin.getDefault().getImage( OpenLdapAclEditorPluginConstants.IMG_ADD ) ); // Creating the 'Delete' button deleteButton = new ToolItem( toolbar, SWT.PUSH ); deleteButton.setToolTipText( "Delete" ); deleteButton.setImage( OpenLdapAclEditorPlugin.getDefault().getImage( OpenLdapAclEditorPluginConstants.IMG_DELETE ) ); // Creating the 'Move Up' button moveUpButton = new ToolItem( toolbar, SWT.PUSH ); moveUpButton.setToolTipText( "Move Up" ); moveUpButton.setImage( OpenLdapAclEditorPlugin.getDefault().getImage( OpenLdapAclEditorPluginConstants.IMG_UP ) ); // Creating the 'Move Down' button moveDownButton = new ToolItem( toolbar, SWT.PUSH ); moveDownButton.setToolTipText( "Move Down" ); moveDownButton.setImage( OpenLdapAclEditorPlugin.getDefault().getImage( OpenLdapAclEditorPluginConstants.IMG_DOWN ) ); } /** * Adds the listeners to the UI widgets. */ private void addListeners() { // Adding the selection listener for the clause combo viewer clauseComboViewer.addSelectionChangedListener( clauseComboViewerListener ); // Adding the selection listener for the access level combo viewer accessLevelComboViewer.addSelectionChangedListener( accessLevelComboViewerListener ); // Adding the selection listener for the control combo viewer controlComboViewer.addSelectionChangedListener( controlComboViewerListener ); // Adding toolbar buttons listeners addButton.addSelectionListener( this ); deleteButton.addSelectionListener( this ); moveUpButton.addSelectionListener( this ); moveDownButton.addSelectionListener( this ); } /** * Create the configuration UI. */ private void createConfigurationUI() { if ( currentClauseSelection instanceof AclWhoClauseEnum ) { AclWhoClauseEnum currentClauseSelectionValue = ( AclWhoClauseEnum ) currentClauseSelection; switch ( currentClauseSelectionValue ) { case STAR: break; // Nothing to configure case ANONYMOUS: break; // Nothing to configure case USERS: break; // Nothing to configure case SELF: break; // Nothing to configure case DN: createUIWhoClauseDn(); break; case DNATTR: createUIWhoClauseDnAttr(); break; case GROUP: createUIWhoClauseGroup(); break; case SASL_SSF: createCompositeWhoClauseSaslSsf(); break; case SSF: createCompositeWhoClauseSsf(); break; case TLS_SSF: createCompositeWhoClauseTlsSsf(); break; case TRANSPORT_SSF: createCompositeWhoClauseTransportSsf(); break; } } } /** * Creates the UI for the DN who clause. */ private void createUIWhoClauseDn() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseDnComposite composite = new WhoClauseDnComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the DN Attribute who clause. */ private void createUIWhoClauseDnAttr() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseDnAttributeComposite composite = new WhoClauseDnAttributeComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the Group who clause. */ private void createUIWhoClauseGroup() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseGroupComposite composite = new WhoClauseGroupComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the SASL SSF who clause. */ private void createCompositeWhoClauseSaslSsf() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseSaslSsfComposite composite = new WhoClauseSaslSsfComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the SSF who clause. */ private void createCompositeWhoClauseSsf() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseSsfComposite composite = new WhoClauseSsfComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the TLS SSF who clause. */ private void createCompositeWhoClauseTlsSsf() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseTlsSsfComposite composite = new WhoClauseTlsSsfComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates the UI for the Transport SSF who clause. */ private void createCompositeWhoClauseTransportSsf() { configurationComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 1 ); WhoClauseTransportSsfComposite composite = new WhoClauseTransportSsfComposite( context, builderWidget.visualEditorComposite ); composite.createComposite( configurationComposite ); } /** * Creates a basic access level. * * @param level the level * @return a basic access level */ private AclAccessLevel createBasicAccessLevel( AclAccessLevelLevelEnum level ) { AclAccessLevel accessLevel = new AclAccessLevel(); accessLevel.setLevel( level ); return accessLevel; } /** * Sets the clause from the current selection. */ private void setClause() { if ( currentClauseSelection instanceof AclWhoClauseEnum ) { AclWhoClauseEnum clauseSelection = ( AclWhoClauseEnum ) currentClauseSelection; // Creating the clause associated with the selection switch ( clauseSelection ) { case STAR: clause = new AclWhoClauseStar(); break; case ANONYMOUS: clause = new AclWhoClauseAnonymous(); break; case USERS: clause = new AclWhoClauseUsers(); break; case SELF: clause = new AclWhoClauseSelf(); break; case DN: clause = new AclWhoClauseDn(); break; case DNATTR: clause = new AclWhoClauseDnAttr(); break; case GROUP: clause = new AclWhoClauseGroup(); break; case SASL_SSF: clause = new AclWhoClauseSaslSsf(); break; case SSF: clause = new AclWhoClauseSsf(); break; case TLS_SSF: clause = new AclWhoClauseTlsSsf(); break; case TRANSPORT_SSF: clause = new AclWhoClauseTransportSsf(); break; } // Also setting access level and control setAccessLevel(); setControl(); } else { clause = null; } } /** * Sets the access level from the current selection. */ private void setAccessLevel() { if ( currentAccessLevelSelection instanceof AclAccessLevelLevelEnum ) { AclAccessLevelLevelEnum accessLevelSelection = ( AclAccessLevelLevelEnum ) currentAccessLevelSelection; // Creating the access level associated with the selection switch ( accessLevelSelection ) { case MANAGE: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.MANAGE ) ); break; case WRITE: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.WRITE ) ); break; case READ: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.READ ) ); break; case SEARCH: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.SEARCH ) ); break; case COMPARE: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.COMPARE ) ); break; case AUTH: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.AUTH ) ); break; case DISCLOSE: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.DISCLOSE ) ); break; case NONE: setAccessLevel( createBasicAccessLevel( AclAccessLevelLevelEnum.NONE ) ); break; } } else if ( currentAccessLevelSelection instanceof AccessLevelComboViewerCustom ) { setAccessLevel( currentCustomAccessLevel ); currentCustomAccessLevel = null; } else { // Resetting access level setAccessLevel( null ); } } /** * Sets the access level to the clause (if any). * * @param accessLevel the access level */ private void setAccessLevel( AclAccessLevel accessLevel ) { if ( clause != null ) { clause.setAccessLevel( accessLevel ); } } /** * Sets the control from the current selection */ private void setControl() { if ( currentControlSelection instanceof AclControlEnum ) { AclControlEnum controlSelection = ( AclControlEnum ) currentControlSelection; // Creating the clause associated with the selection switch ( controlSelection ) { case STOP: setControl( AclControlEnum.STOP ); break; case CONTINUE: setControl( AclControlEnum.CONTINUE ); break; case BREAK: setControl( AclControlEnum.BREAK ); break; } } else { // Resetting control setControl( null ); } } /** * Sets the control to the clause (if any). * * @param control the control */ private void setControl( AclControlEnum control ) { if ( clause != null ) { clause.setControl( control ); } } /** * Gets the who clause. * * @return the who clause */ public AclWhoClause getClause() { return clause; } /** * Gets the row index. * * @return the row index */ public int getIndex() { return index; } /** * {@inheritDoc} */ public void widgetSelected( SelectionEvent e ) { Object source = e.getSource(); if ( source == addButton ) { builderWidget.addNewClause( this ); } else if ( source == deleteButton ) { builderWidget.deleteClause( this ); } else if ( source == moveUpButton ) { builderWidget.moveUpClause( this ); } else if ( source == moveDownButton ) { builderWidget.moveDownClause( this ); } } /** * {@inheritDoc} */ public void widgetDefaultSelected( SelectionEvent e ) { // Nothing to do } /** * Gets the 'Add' button. * * @return the 'Add' button */ public ToolItem getAddButton() { return addButton; } /** * Gets the 'Delete' button. * * @return the 'Delete' button */ public ToolItem getDeleteButton() { return deleteButton; } /** * Gets the 'Move Up' button. * * @return the 'Move Up' button */ public ToolItem getMoveUpButton() { return moveUpButton; } /** * Gets the 'Move Down' button. * * @return the 'Move Down button */ public ToolItem getMoveDownButton() { return moveDownButton; } /** * Disposes all created SWT widgets. */ public void dispose() { // Composite if ( ( composite != null ) && ( !composite.isDisposed() ) ) { composite.dispose(); } // Combo Viewer if ( ( clauseComboViewer != null ) && ( clauseComboViewer.getCombo() != null ) && ( !clauseComboViewer.getCombo().isDisposed() ) ) { clauseComboViewer.getCombo().dispose(); } // Toolbar if ( ( toolbar != null ) && ( !toolbar.isDisposed() ) ) { toolbar.dispose(); } // Configuration composite if ( ( configurationComposite != null ) && ( !configurationComposite.isDisposed() ) ) { configurationComposite.dispose(); } } /** * A private object for the first row of the clause combo viewer. */ class ClauseComboViewerName { } /** * A private object for the first row of the access level combo viewer. */ private class AccessLevelComboViewerName { } /** * A private object for the last row of the access level combo viewer. */ private class AccessLevelComboViewerCustom { } /** * A private object for the first row of the control combo viewer. */ private class ControlComboViewerName { } }