/* * 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.common.ui.widgets; import java.util.ArrayList; import java.util.List; import org.apache.directory.studio.common.ui.widgets.AbstractWidget; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.openldap.common.ui.model.LogOperationEnum; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Control; import org.eclipse.ui.forms.widgets.FormToolkit; public class LogOperationsWidget extends AbstractWidget { // UI widgets private Composite composite; private Composite writeOperationsComposite; private Composite readOperationsComposite; private Composite sessionOperationsComposite; private Button allOperationsCheckbox; private Button writeOperationsCheckbox; private Button addOperationCheckbox; private Button deleteOperationCheckbox; private Button modifyOperationCheckbox; private Button modifyRdnOperationCheckbox; private Button readOperationsCheckbox; private Button compareOperationCheckbox; private Button searchOperationCheckbox; private Button sessionOperationsCheckbox; private Button abandonOperationCheckbox; private Button bindOperationCheckbox; private Button unbindOperationCheckbox; // Listeners private SelectionAdapter allOperationsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { allOperationsCheckboxesSetSelection( allOperationsCheckbox.getSelection() ); notifyListeners(); } }; private SelectionAdapter writeOperationsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { writeOperationsCheckboxesSetSelection( writeOperationsCheckbox.getSelection() ); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; private SelectionAdapter writeOperationCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { checkWriteOperationsCheckboxSelectionState(); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; private SelectionAdapter readOperationsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { readOperationsCheckboxesSetSelection( readOperationsCheckbox.getSelection() ); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; private SelectionAdapter readOperationCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { checkReadOperationsCheckboxSelectionState(); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; private SelectionAdapter sessionOperationsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { sessionOperationsCheckboxesSetSelection( sessionOperationsCheckbox.getSelection() ); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; private SelectionAdapter sessionOperationCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { checkSessionOperationsCheckboxSelectionState(); checkAllOperationsCheckboxSelectionState(); notifyListeners(); } }; /** * Creates the widget. * * @param parent the parent composite */ public void create( Composite parent ) { // Creating the widget base composite composite = new Composite( parent, SWT.NONE ); GridLayout compositeGridLayout = new GridLayout( 3, true ); compositeGridLayout.marginHeight = compositeGridLayout.marginWidth = 0; compositeGridLayout.verticalSpacing = compositeGridLayout.horizontalSpacing = 0; composite.setLayout( compositeGridLayout ); // All Operations Checkbox allOperationsCheckbox = BaseWidgetUtils.createCheckbox( composite, "All operations", 3 ); // Write Operations Checkbox writeOperationsCheckbox = BaseWidgetUtils.createCheckbox( composite, "Write operations", 1 ); // Read Operations Checkbox readOperationsCheckbox = BaseWidgetUtils.createCheckbox( composite, "Read operations", 1 ); // Session Operations Checkbox sessionOperationsCheckbox = BaseWidgetUtils.createCheckbox( composite, "Session operations", 1 ); // Write Operations Composite writeOperationsComposite = new Composite( composite, SWT.NONE ); GridLayout writeOperationsCompositeGridLayout = new GridLayout( 2, false ); writeOperationsCompositeGridLayout.marginHeight = writeOperationsCompositeGridLayout.marginWidth = 0; writeOperationsCompositeGridLayout.verticalSpacing = writeOperationsCompositeGridLayout.horizontalSpacing = 0; writeOperationsComposite.setLayout( writeOperationsCompositeGridLayout ); writeOperationsComposite.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false ) ); // Read Operations Composite readOperationsComposite = new Composite( composite, SWT.NONE ); GridLayout readOperationsCompositeGridLayout = new GridLayout( 2, false ); readOperationsCompositeGridLayout.marginHeight = readOperationsCompositeGridLayout.marginWidth = 0; readOperationsCompositeGridLayout.verticalSpacing = readOperationsCompositeGridLayout.horizontalSpacing = 0; readOperationsComposite.setLayout( readOperationsCompositeGridLayout ); readOperationsComposite.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false ) ); // Session Operations Composite sessionOperationsComposite = new Composite( composite, SWT.NONE ); GridLayout sessionOperationsCompositeGridLayout = new GridLayout( 2, false ); sessionOperationsCompositeGridLayout.marginHeight = sessionOperationsCompositeGridLayout.marginWidth = 0; sessionOperationsCompositeGridLayout.verticalSpacing = sessionOperationsCompositeGridLayout.horizontalSpacing = 0; sessionOperationsComposite.setLayout( sessionOperationsCompositeGridLayout ); sessionOperationsComposite.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false ) ); // Add Operation Checkbox BaseWidgetUtils.createRadioIndent( writeOperationsComposite, 1 ); addOperationCheckbox = BaseWidgetUtils.createCheckbox( writeOperationsComposite, "Add", 1 ); // Delete Operation Checkbox BaseWidgetUtils.createRadioIndent( writeOperationsComposite, 1 ); deleteOperationCheckbox = BaseWidgetUtils.createCheckbox( writeOperationsComposite, "Delete", 1 ); // Modify Operation Checkbox BaseWidgetUtils.createRadioIndent( writeOperationsComposite, 1 ); modifyOperationCheckbox = BaseWidgetUtils.createCheckbox( writeOperationsComposite, "Modify", 1 ); // Modify RDN Operation Checkbox BaseWidgetUtils.createRadioIndent( writeOperationsComposite, 1 ); modifyRdnOperationCheckbox = BaseWidgetUtils.createCheckbox( writeOperationsComposite, "Modify RDN", 1 ); // Compare Operation Checkbox BaseWidgetUtils.createRadioIndent( readOperationsComposite, 1 ); compareOperationCheckbox = BaseWidgetUtils.createCheckbox( readOperationsComposite, "Compare", 1 ); // Search Operation Checkbox BaseWidgetUtils.createRadioIndent( readOperationsComposite, 1 ); searchOperationCheckbox = BaseWidgetUtils.createCheckbox( readOperationsComposite, "Search", 1 ); // Abandon Operation Checkbox BaseWidgetUtils.createRadioIndent( sessionOperationsComposite, 1 ); abandonOperationCheckbox = BaseWidgetUtils.createCheckbox( sessionOperationsComposite, "Abandon", 1 ); // Bind Operation Checkbox BaseWidgetUtils.createRadioIndent( sessionOperationsComposite, 1 ); bindOperationCheckbox = BaseWidgetUtils.createCheckbox( sessionOperationsComposite, "Bind", 1 ); // Unbind Operation Checkbox BaseWidgetUtils.createRadioIndent( sessionOperationsComposite, 1 ); unbindOperationCheckbox = BaseWidgetUtils.createCheckbox( sessionOperationsComposite, "Unbind", 1 ); // Adding the listeners to the UI widgets addListeners(); } /** * Returns the associated composite. * * @return the composite */ public void adapt( FormToolkit toolkit ) { if ( toolkit != null ) { toolkit.adapt( composite ); toolkit.adapt( writeOperationsComposite ); toolkit.adapt( readOperationsComposite ); toolkit.adapt( sessionOperationsComposite ); } } /** * Returns the primary control associated with this widget. * * @return the primary control associated with this widget. */ public Control getControl() { return composite; } /** * Adds the listeners to the UI widgets. */ private void addListeners() { allOperationsCheckbox.addSelectionListener( allOperationsCheckboxListener ); writeOperationsCheckbox.addSelectionListener( writeOperationsCheckboxListener ); addOperationCheckbox.addSelectionListener( writeOperationCheckboxListener ); deleteOperationCheckbox.addSelectionListener( writeOperationCheckboxListener ); modifyOperationCheckbox.addSelectionListener( writeOperationCheckboxListener ); modifyRdnOperationCheckbox.addSelectionListener( writeOperationCheckboxListener ); readOperationsCheckbox.addSelectionListener( readOperationsCheckboxListener ); compareOperationCheckbox.addSelectionListener( readOperationCheckboxListener ); searchOperationCheckbox.addSelectionListener( readOperationCheckboxListener ); sessionOperationsCheckbox.addSelectionListener( sessionOperationsCheckboxListener ); abandonOperationCheckbox.addSelectionListener( sessionOperationCheckboxListener ); bindOperationCheckbox.addSelectionListener( sessionOperationCheckboxListener ); unbindOperationCheckbox.addSelectionListener( sessionOperationCheckboxListener ); } /** * Sets the selection for all operations checkboxes. * * @param selection the selection */ private void allOperationsCheckboxesSetSelection( boolean selection ) { allOperationsCheckbox.setGrayed( false ); allOperationsCheckbox.setSelection( selection ); writeOperationsCheckboxesSetSelection( selection ); readOperationsCheckboxesSetSelection( selection ); sessionOperationsCheckboxesSetSelection( selection ); } /** * Sets the selection for the 'Write' operations checkboxes. * * @param selection the selection */ private void writeOperationsCheckboxesSetSelection( boolean selection ) { writeOperationsCheckbox.setGrayed( false ); writeOperationsCheckbox.setSelection( selection ); addOperationCheckbox.setSelection( selection ); deleteOperationCheckbox.setSelection( selection ); modifyOperationCheckbox.setSelection( selection ); modifyRdnOperationCheckbox.setSelection( selection ); } /** * Sets the selection for the 'Read' operations checkboxes. * * @param selection the selection */ private void readOperationsCheckboxesSetSelection( boolean selection ) { readOperationsCheckbox.setGrayed( false ); readOperationsCheckbox.setSelection( selection ); compareOperationCheckbox.setSelection( selection ); searchOperationCheckbox.setSelection( selection ); } /** * Sets the selection for the 'Session' operations checkboxes. * * @param selection the selection */ private void sessionOperationsCheckboxesSetSelection( boolean selection ) { sessionOperationsCheckbox.setGrayed( false ); sessionOperationsCheckbox.setSelection( selection ); abandonOperationCheckbox.setSelection( selection ); bindOperationCheckbox.setSelection( selection ); unbindOperationCheckbox.setSelection( selection ); } /** * Verifies the selection state for the 'All Operations' checkbox. */ private void checkAllOperationsCheckboxSelectionState() { boolean atLeastOneSelected = addOperationCheckbox.getSelection() || deleteOperationCheckbox.getSelection() || modifyOperationCheckbox.getSelection() || modifyRdnOperationCheckbox.getSelection() || compareOperationCheckbox.getSelection() || searchOperationCheckbox.getSelection() || abandonOperationCheckbox.getSelection() || bindOperationCheckbox.getSelection() || unbindOperationCheckbox.getSelection(); boolean allSelected = addOperationCheckbox.getSelection() && deleteOperationCheckbox.getSelection() && modifyOperationCheckbox.getSelection() && modifyRdnOperationCheckbox.getSelection() && compareOperationCheckbox.getSelection() && searchOperationCheckbox.getSelection() && abandonOperationCheckbox.getSelection() && bindOperationCheckbox.getSelection() && unbindOperationCheckbox.getSelection(); allOperationsCheckbox.setGrayed( atLeastOneSelected && !allSelected ); allOperationsCheckbox.setSelection( atLeastOneSelected ); } /** * Verifies the selection state for the 'Write Operations' checkbox. */ private void checkWriteOperationsCheckboxSelectionState() { boolean atLeastOneSelected = isChecked( addOperationCheckbox ) || isChecked( deleteOperationCheckbox ) || isChecked( modifyOperationCheckbox ) || isChecked( modifyRdnOperationCheckbox ); boolean allSelected = isChecked( addOperationCheckbox ) && isChecked( deleteOperationCheckbox ) && isChecked( modifyOperationCheckbox ) && isChecked( modifyRdnOperationCheckbox ); writeOperationsCheckbox.setGrayed( atLeastOneSelected && !allSelected ); writeOperationsCheckbox.setSelection( atLeastOneSelected ); } /** * Verifies the selection state for the 'Read Operations' checkbox. */ private void checkReadOperationsCheckboxSelectionState() { boolean atLeastOneSelected = isChecked( compareOperationCheckbox ) || isChecked( searchOperationCheckbox ); boolean allSelected = isChecked( compareOperationCheckbox ) && isChecked( searchOperationCheckbox ); readOperationsCheckbox.setGrayed( atLeastOneSelected && !allSelected ); readOperationsCheckbox.setSelection( atLeastOneSelected ); } /** * Verifies the selection state for the 'Session Operations' checkbox. */ private void checkSessionOperationsCheckboxSelectionState() { boolean atLeastOneSelected = isChecked( abandonOperationCheckbox ) || isChecked( bindOperationCheckbox ) || isChecked( unbindOperationCheckbox ); boolean allSelected = isChecked( abandonOperationCheckbox ) && isChecked( bindOperationCheckbox ) && isChecked( unbindOperationCheckbox ); sessionOperationsCheckbox.setGrayed( atLeastOneSelected && !allSelected ); sessionOperationsCheckbox.setSelection( atLeastOneSelected ); } /** * Sets the input. * * @param operationsList the operations list */ public void setInput( List<LogOperationEnum> operationsList ) { // Reset all checkboxes resetAllCheckboxes(); // Select checkboxes according to the log operations list if ( operationsList != null ) { for ( LogOperationEnum logOperation : operationsList ) { switch ( logOperation ) { case ALL: allOperationsCheckbox.setSelection( true ); allOperationsCheckboxesSetSelection( true ); break; case WRITES: writeOperationsCheckbox.setSelection( true ); writeOperationsCheckboxesSetSelection( true ); break; case ADD: addOperationCheckbox.setSelection( true ); break; case DELETE: deleteOperationCheckbox.setSelection( true ); break; case MODIFY: modifyOperationCheckbox.setSelection( true ); break; case MODIFY_RDN: modifyRdnOperationCheckbox.setSelection( true ); break; case READS: readOperationsCheckbox.setSelection( true ); readOperationsCheckboxesSetSelection( true ); break; case COMPARE: compareOperationCheckbox.setSelection( true ); break; case SEARCH: searchOperationCheckbox.setSelection( true ); break; case SESSION: sessionOperationsCheckbox.setSelection( true ); sessionOperationsCheckboxesSetSelection( true ); break; case ABANDON: abandonOperationCheckbox.setSelection( true ); break; case BIND: bindOperationCheckbox.setSelection( true ); break; case UNBIND: unbindOperationCheckbox.setSelection( true ); break; } } } // Check hierarchical checkboxes checkWriteOperationsCheckboxSelectionState(); checkReadOperationsCheckboxSelectionState(); checkSessionOperationsCheckboxSelectionState(); checkAllOperationsCheckboxSelectionState(); } /** * Resets all checkboxes. */ private void resetAllCheckboxes() { allOperationsCheckbox.setSelection( false ); allOperationsCheckbox.setGrayed( false ); writeOperationsCheckbox.setSelection( false ); writeOperationsCheckbox.setGrayed( false ); addOperationCheckbox.setSelection( false ); addOperationCheckbox.setGrayed( false ); deleteOperationCheckbox.setSelection( false ); deleteOperationCheckbox.setGrayed( false ); modifyOperationCheckbox.setSelection( false ); modifyOperationCheckbox.setGrayed( false ); readOperationsCheckbox.setSelection( false ); readOperationsCheckbox.setGrayed( false ); compareOperationCheckbox.setSelection( false ); compareOperationCheckbox.setGrayed( false ); searchOperationCheckbox.setSelection( false ); searchOperationCheckbox.setGrayed( false ); sessionOperationsCheckbox.setSelection( false ); sessionOperationsCheckbox.setGrayed( false ); abandonOperationCheckbox.setSelection( false ); abandonOperationCheckbox.setGrayed( false ); bindOperationCheckbox.setSelection( false ); bindOperationCheckbox.setGrayed( false ); unbindOperationCheckbox.setSelection( false ); unbindOperationCheckbox.setGrayed( false ); } /** * Returns the list of selected operations. * * @return the list of selected operations */ public List<LogOperationEnum> getSelectedOperationsList() { List<LogOperationEnum> logOperations = new ArrayList<LogOperationEnum>(); // All operations if ( isChecked( allOperationsCheckbox ) ) { logOperations.add( LogOperationEnum.ALL ); } else { // Write operations if ( isChecked( writeOperationsCheckbox ) ) { logOperations.add( LogOperationEnum.WRITES ); } else { // Add operation if ( isChecked( addOperationCheckbox ) ) { logOperations.add( LogOperationEnum.ADD ); } // Delete operation if ( isChecked( deleteOperationCheckbox ) ) { logOperations.add( LogOperationEnum.DELETE ); } // Modify operation if ( isChecked( modifyOperationCheckbox ) ) { logOperations.add( LogOperationEnum.MODIFY ); } // Modify RDN operation if ( isChecked( modifyRdnOperationCheckbox ) ) { logOperations.add( LogOperationEnum.MODIFY_RDN ); } } // Read operations if ( isChecked( readOperationsCheckbox ) ) { logOperations.add( LogOperationEnum.READS ); } else { // Compare operation if ( isChecked( compareOperationCheckbox ) ) { logOperations.add( LogOperationEnum.COMPARE ); } // Search operation if ( isChecked( searchOperationCheckbox ) ) { logOperations.add( LogOperationEnum.SEARCH ); } } // Session operations if ( isChecked( sessionOperationsCheckbox ) ) { logOperations.add( LogOperationEnum.SESSION ); } else { // Abandon operation if ( isChecked( abandonOperationCheckbox ) ) { logOperations.add( LogOperationEnum.ABANDON ); } // Bind operation if ( isChecked( bindOperationCheckbox ) ) { logOperations.add( LogOperationEnum.BIND ); } // Unbind operation if ( isChecked( unbindOperationCheckbox ) ) { logOperations.add( LogOperationEnum.UNBIND ); } } } return logOperations; } /** * Indicates if a checkbox is checked ('selected' and not 'grayed'). * * @param checkbox the checkbox * @return <code>true</code> if the checkbox is checked * <code>false</code> if not. */ private boolean isChecked( Button checkbox ) { return ( ( checkbox != null ) && ( !checkbox.isDisposed() ) && ( checkbox.getSelection() ) && ( !checkbox .getGrayed() ) ); } /** * Disposes all created SWT widgets. */ public void dispose() { // Composite if ( ( composite != null ) && ( !composite.isDisposed() ) ) { composite.dispose(); } } }