/* * 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.dialogs; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.openldap.common.ui.model.LogLevelEnum; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * The LogLevelDialog is used to edit the LogLevel. Here are the possible values : * * <ul> * <li>none 0</li> * <li>trace 1</li> * <li>packets 2</li> * <li>args 4</li> * <li>conns 8</li> * <li>BER 16</li> * <li>filter 32</li> * <li>config 64</li> * <li>ACL 128</li> * <li>stats 256</li> * <li>stats2 512</li> * <li>shell 1024</li> * <li>parse 2048</li> * <li>sync 16384</li> * <li>any -1</li> * </ul> * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class LogLevelDialog extends Dialog { /** The logLevel value */ private int logLevelValue; // UI widgets private Button noneCheckbox; private Button traceCheckbox; private Button packetsCheckbox; private Button argsCheckbox; private Button connsCheckbox; private Button berCheckbox; private Button filterCheckbox; private Button configCheckbox; private Button aclCheckbox; private Button statsCheckbox; private Button stats2Checkbox; private Button shellCheckbox; private Button parseCheckbox; private Button syncCheckbox; private Button anyCheckbox; /** An array of all the checkboxes */ private Button[] buttons = new Button[13]; // The resulting integer private Text logLevelText; // An empty space protected static final String TABULATION = " "; /** * The listener in charge of exposing the changes when some buttons are checked */ private SelectionListener checkboxSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { Object object = e.getSource(); if ( object instanceof Button ) { Button selectedButton = (Button)object; if ( selectedButton.equals( noneCheckbox ) ) { // None, we have to uncheck all the other checkbox for ( Button button : buttons ) { button.setSelection( false ); } // reset the Any button anyCheckbox.setSelection( false ); // set the None button noneCheckbox.setSelection( true ); } else if ( selectedButton.equals( anyCheckbox ) ) { // Any, we have to check all the buttons for ( Button button : buttons ) { button.setSelection( true ); } // reset the None button noneCheckbox.setSelection( false ); // set the Any button anyCheckbox.setSelection( true ); } else { // deselect the any and none button, unless we don't have any more // selected button or all the button selected int count = 0; for ( Button button : buttons ) { if ( button.getSelection() ) { count++; } } if ( count == 0 ) { anyCheckbox.setSelection( false ); noneCheckbox.setSelection( true ); } else if ( count == buttons.length ) { anyCheckbox.setSelection( true ); noneCheckbox.setSelection( false ); } else { anyCheckbox.setSelection( false ); noneCheckbox.setSelection( false ); } } } computeLogValue(); setLogLevelText(); } }; /** * Creates a new instance of LogLevelDialog. * * @param parentShell the parent shell */ public LogLevelDialog( Shell parentShell ) { super( parentShell ); super.setShellStyle( super.getShellStyle() | SWT.RESIZE ); } /** * Creates a new instance of LogLevelDialog. * * @param parentShell the parent shell * @param value the initial value */ public LogLevelDialog( Shell parentShell, int value ) { super( parentShell ); super.setShellStyle( super.getShellStyle() | SWT.RESIZE ); this.logLevelValue = value; } /** * {@inheritDoc} */ protected void configureShell( Shell shell ) { super.configureShell( shell ); shell.setText( "OpenLDAP LogLevel" ); } /** * {@inheritDoc} */ protected void okPressed() { computeLogValue(); super.okPressed(); } /** * {@inheritDoc} */ protected Control createDialogArea( Composite parent ) { Composite composite = ( Composite ) super.createDialogArea( parent ); GridData gd = new GridData( GridData.FILL_BOTH ); composite.setLayoutData( gd ); createLogLevelArea( composite ); createLogLevelValueArea( composite ); setCheckboxesValue(); addListeners(); applyDialogFont( composite ); return composite; } /** * Sets the checkboxes value. * * @param perm the Unix permissions */ private void setCheckboxesValue() { noneCheckbox.setSelection( logLevelValue == LogLevelEnum.NONE.getValue() ); traceCheckbox.setSelection( ( logLevelValue & LogLevelEnum.TRACE.getValue() ) != 0 ); packetsCheckbox.setSelection( ( logLevelValue & LogLevelEnum.PACKETS.getValue() ) != 0 ); argsCheckbox.setSelection( ( logLevelValue & LogLevelEnum.ARGS.getValue() ) != 0 ); connsCheckbox.setSelection( ( logLevelValue & LogLevelEnum.CONNS.getValue() ) != 0 ); berCheckbox.setSelection( ( logLevelValue & LogLevelEnum.BER.getValue() ) != 0 ); filterCheckbox.setSelection( ( logLevelValue & LogLevelEnum.FILTER.getValue() ) != 0 ); configCheckbox.setSelection( ( logLevelValue & LogLevelEnum.CONFIG.getValue() ) != 0 ); aclCheckbox.setSelection( ( logLevelValue & LogLevelEnum.ACL.getValue() ) != 0 ); statsCheckbox.setSelection( ( logLevelValue & LogLevelEnum.STATS.getValue() ) != 0 ); stats2Checkbox.setSelection( ( logLevelValue & LogLevelEnum.STATS2.getValue() ) != 0 ); shellCheckbox.setSelection( ( logLevelValue & LogLevelEnum.SHELL.getValue() ) != 0 ); parseCheckbox.setSelection( ( logLevelValue & LogLevelEnum.PARSE.getValue() ) != 0 ); syncCheckbox.setSelection( ( logLevelValue & LogLevelEnum.SYNC.getValue() ) != 0 ); anyCheckbox.setSelection( logLevelValue == LogLevelEnum.ANY.getValue() ); } /** * Sets the LogLevel value. */ private void setLogLevelText() { logLevelText.setText( Integer.toString( logLevelValue ) ); } /** * Creates the LogLevel area. * * @param parent the parent composite */ private void createLogLevelArea( Composite parent ) { Group logLevelGroup = BaseWidgetUtils.createGroup( parent, "Log Levels", 1 ); logLevelGroup.setLayout( new GridLayout( 5, false ) ); int pos = 0; // None and any, centered BaseWidgetUtils.createLabel( logLevelGroup, TABULATION, 1 ); noneCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "None", 1 ); BaseWidgetUtils.createLabel( logLevelGroup, TABULATION, 1 ); anyCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Any", 1 ); BaseWidgetUtils.createLabel( logLevelGroup, TABULATION, 1 ); // The first 5 options aclCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "ACL", 1 ); buttons[pos++] = aclCheckbox; argsCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Args", 1 ); buttons[pos++] = argsCheckbox; berCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "BER", 1 ); buttons[pos++] = berCheckbox; configCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Config", 1 ); buttons[pos++] = configCheckbox; connsCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Conns", 1 ); buttons[pos++] = connsCheckbox; // The next 5 options filterCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Filter", 1 ); buttons[pos++] = filterCheckbox; packetsCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Packets", 1 ); buttons[pos++] = packetsCheckbox; parseCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Parses", 1 ); buttons[pos++] = parseCheckbox; shellCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Shell", 1 ); buttons[pos++] = shellCheckbox; statsCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Stats", 1 ); buttons[pos++] = statsCheckbox; // The last 3 options, centered BaseWidgetUtils.createLabel( logLevelGroup, TABULATION, 1 ); stats2Checkbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Stats2", 1 ); buttons[pos++] = stats2Checkbox; traceCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Trace", 1 ); buttons[pos++] = traceCheckbox; syncCheckbox = BaseWidgetUtils.createCheckbox( logLevelGroup, "Sync", 1 ); buttons[pos++] = syncCheckbox; BaseWidgetUtils.createLabel( logLevelGroup, TABULATION, 1 ); } /** * Creates the LogLevel value area. It's not editable * * @param parent the parent composite */ private void createLogLevelValueArea( Composite parent ) { Group logLevelValueGroup = BaseWidgetUtils.createGroup( parent, "LogLevel Value", 1 ); logLevelText = BaseWidgetUtils.createText( logLevelValueGroup, Integer.toString( logLevelValue ), 1 ); logLevelText.setTextLimit( 5 ); logLevelText.setEditable( false ); } /** * Adds listeners. */ private void addListeners() { noneCheckbox.addSelectionListener( checkboxSelectionListener ); for ( Button button : buttons ) { button.addSelectionListener( checkboxSelectionListener ); } anyCheckbox.addSelectionListener( checkboxSelectionListener ); } private void computeLogValue() { if ( noneCheckbox.getSelection() ) { logLevelValue = 0; } else if ( anyCheckbox.getSelection() ) { logLevelValue = -1; } else { if ( logLevelValue == LogLevelEnum.ANY.getValue() ) { // We cancel the ANY selection, so we have to set the LogLevelValue // to 0, as it's currently -1 logLevelValue = 0; } // Now, check all the checkBox selections if ( aclCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.ACL.getValue(); } else { logLevelValue &= ~LogLevelEnum.ACL.getValue(); } if ( argsCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.ARGS.getValue(); } else { logLevelValue &= ~LogLevelEnum.ARGS.getValue(); } if ( berCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.BER.getValue(); } else { logLevelValue &= ~LogLevelEnum.BER.getValue(); } if ( configCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.CONFIG.getValue(); } else { logLevelValue &= ~LogLevelEnum.CONFIG.getValue(); } if ( connsCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.CONNS.getValue(); } else { logLevelValue &= ~LogLevelEnum.CONNS.getValue(); } if ( filterCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.FILTER.getValue(); } else { logLevelValue &= ~LogLevelEnum.FILTER.getValue(); } if ( packetsCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.PACKETS.getValue(); } else { logLevelValue &= ~LogLevelEnum.PACKETS.getValue(); } if ( parseCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.PARSE.getValue(); } else { logLevelValue &= ~LogLevelEnum.PARSE.getValue(); } if ( shellCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.SHELL.getValue(); } else { logLevelValue &= ~LogLevelEnum.SHELL.getValue(); } if ( statsCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.STATS.getValue(); } else { logLevelValue &= ~LogLevelEnum.STATS.getValue(); } if ( stats2Checkbox.getSelection() ) { logLevelValue |= LogLevelEnum.STATS2.getValue(); } else { logLevelValue &= ~LogLevelEnum.STATS2.getValue(); } if ( syncCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.SYNC.getValue(); } else { logLevelValue &= ~LogLevelEnum.SYNC.getValue(); } if ( traceCheckbox.getSelection() ) { logLevelValue |= LogLevelEnum.TRACE.getValue(); } else { logLevelValue &= ~LogLevelEnum.TRACE.getValue(); } } } /** * @return The computed integer that codes for the selected LogLevels */ public int getLogLevelValue() { return logLevelValue; } }