Java tutorial
/* * 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.dialogs; import java.util.List; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; 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.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.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; 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.model.AclAccessLevel; import org.apache.directory.studio.openldap.config.acl.model.AclAccessLevelLevelEnum; import org.apache.directory.studio.openldap.config.acl.model.AclAccessLevelPrivModifierEnum; import org.apache.directory.studio.openldap.config.acl.model.AclAccessLevelPrivilegeEnum; /** * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OpenLdapAccessLevelDialog extends Dialog { /** The array of access levels */ private Object[] levels = new Object[] { new AccessLevelComboViewerName(), AclAccessLevelLevelEnum.MANAGE, AclAccessLevelLevelEnum.WRITE, AclAccessLevelLevelEnum.READ, AclAccessLevelLevelEnum.SEARCH, AclAccessLevelLevelEnum.COMPARE, AclAccessLevelLevelEnum.AUTH, AclAccessLevelLevelEnum.DISCLOSE, AclAccessLevelLevelEnum.NONE, }; /** The access level */ private AclAccessLevel accessLevel; // UI widgets private Button okButton; private Button selfCheckbox; private Button levelRadioButton; private ComboViewer levelComboViewer; private Button customPrivilegesRadioButton; private Button privilegeModifierEqualRadioButton; private Button privilegeModifierPlusRadioButton; private Button privilegeModifierMinusRadioButton; private Button privilegeAuthCheckbox; private Button privilegeCompareCheckbox; private Button privilegeSearchCheckbox; private Button privilegeReadCheckbox; private Button privilegeWriteCheckbox; /** * Creates a new instance of OpenLdapAccessLevelDialog. * * @param accessLevel the access level */ public OpenLdapAccessLevelDialog(AclAccessLevel accessLevel) { super(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); this.accessLevel = accessLevel; } /** * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText("Access Level Editor"); shell.setImage(OpenLdapAclEditorPlugin.getDefault().getImage(OpenLdapAclEditorPluginConstants.IMG_EDITOR)); } /** * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) */ protected void createButtonsForButtonBar(Composite parent) { okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } protected Control createContents(Composite parent) { Control control = super.createContents(parent); // Validating the dialog validate(); return control; } /** * {@inheritDoc} */ protected void okPressed() { // Self accessLevel.setSelf(selfCheckbox.getSelection()); // Level if (levelRadioButton.getSelection()) { Object levelSelection = ((StructuredSelection) levelComboViewer.getSelection()).getFirstElement(); if (levelSelection instanceof AclAccessLevelLevelEnum) { accessLevel.setLevel((AclAccessLevelLevelEnum) levelSelection); } else { accessLevel.setLevel(null); } } else { accessLevel.setLevel(null); } // Custom privileges if (customPrivilegesRadioButton.getSelection()) { // Privilege modifier accessLevel.setPrivilegeModifier(getPrivilegeModifier()); // Privileges accessLevel.clearPrivileges(); addPrivileges(); } else { accessLevel.setPrivilegeModifier(null); accessLevel.clearPrivileges(); } super.okPressed(); } /** * Gets the privilege modifier. * * @return the privilege modifier */ private AclAccessLevelPrivModifierEnum getPrivilegeModifier() { if (privilegeModifierEqualRadioButton.getSelection()) { return AclAccessLevelPrivModifierEnum.EQUAL; } else if (privilegeModifierPlusRadioButton.getSelection()) { return AclAccessLevelPrivModifierEnum.PLUS; } else if (privilegeModifierMinusRadioButton.getSelection()) { return AclAccessLevelPrivModifierEnum.MINUS; } return null; } /** * Adds privileges. */ private void addPrivileges() { // Auth checkbox if (privilegeAuthCheckbox.getSelection()) { accessLevel.addPrivilege(AclAccessLevelPrivilegeEnum.AUTHENTICATION); } // Compare checkbox if (privilegeCompareCheckbox.getSelection()) { accessLevel.addPrivilege(AclAccessLevelPrivilegeEnum.COMPARE); } // Read checkbox if (privilegeReadCheckbox.getSelection()) { accessLevel.addPrivilege(AclAccessLevelPrivilegeEnum.READ); } // Search checkbox if (privilegeSearchCheckbox.getSelection()) { accessLevel.addPrivilege(AclAccessLevelPrivilegeEnum.SEARCH); } // Write checkbox if (privilegeWriteCheckbox.getSelection()) { accessLevel.addPrivilege(AclAccessLevelPrivilegeEnum.WRITE); } } /** * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); // gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ) * 4 / 3; // gd.heightHint = convertVerticalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ) * 4 / 3; composite.setLayoutData(gd); // Creating UI createSelfGroup(composite); createLevelAndPrivilegesGroup(composite); // Initializing the UI with the access level initWithAccessLevel(); // Adding listeners addListeners(); // Setting default focus on the composite composite.setFocus(); applyDialogFont(composite); return composite; } /** * Validates the dialog. */ private void validate() { if (levelRadioButton.getSelection()) { // Getting the selection of the level combo viewer Object levelSelection = ((StructuredSelection) levelComboViewer.getSelection()).getFirstElement(); // Enabling the OK button only when the selection is a 'real' level okButton.setEnabled(levelSelection instanceof AclAccessLevelLevelEnum); return; } else if (customPrivilegesRadioButton.getSelection()) { // Enabling the OK button only when at least one of privileges is checked okButton.setEnabled(privilegeAuthCheckbox.getSelection() || privilegeCompareCheckbox.getSelection() || privilegeSearchCheckbox.getSelection() || privilegeReadCheckbox.getSelection() || privilegeWriteCheckbox.getSelection()); return; } // Default case okButton.setEnabled(true); } /** * Creates the self group. * * @param parent the parent composite */ private void createSelfGroup(Composite parent) { Group selfGroup = BaseWidgetUtils.createGroup(parent, "", 1); selfGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // Self Checkbox selfCheckbox = new Button(selfGroup, SWT.CHECK); selfCheckbox.setText("Self"); //$NON-NLS-1$ } /** * Creates the level and privileges group. * * @param parent the parent composite */ private void createLevelAndPrivilegesGroup(Composite parent) { // Access level and privileges group Group levelAndPrivilegesGroup = BaseWidgetUtils.createGroup(parent, "Access Level and Privilege(s)", 1); levelAndPrivilegesGroup.setLayout(new GridLayout(2, false)); levelAndPrivilegesGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // Level label and radio button levelRadioButton = BaseWidgetUtils.createRadiobutton(levelAndPrivilegesGroup, "Level:", 1); levelComboViewer = new ComboViewer( BaseWidgetUtils.createReadonlyCombo(levelAndPrivilegesGroup, new String[0], -1, 1)); levelComboViewer.setContentProvider(new ArrayContentProvider()); levelComboViewer.setLabelProvider(new LabelProvider() { public String getText(Object element) { if (element instanceof AccessLevelComboViewerName) { return "< Access Level >"; } 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); } }); levelComboViewer.setInput(levels); // levelComboViewer.setSelection( new StructuredSelection( currentClauseSelection ) ); TODO // Custom privileges radio button customPrivilegesRadioButton = BaseWidgetUtils.createRadiobutton(levelAndPrivilegesGroup, "Custom Privilege(s):", 2); // Custom privileges composite Composite privilegesTabComposite = BaseWidgetUtils.createColumnContainer(levelAndPrivilegesGroup, 2, 2); // Custom privileges modifier group createRadioIndent(privilegesTabComposite); Group modifierGroup = BaseWidgetUtils.createGroup(privilegesTabComposite, "Modifier", 1); modifierGroup.setLayout(new GridLayout(3, true)); modifierGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // Custom privileges modifier radio buttons privilegeModifierEqualRadioButton = BaseWidgetUtils.createRadiobutton(modifierGroup, "Equal (=)", 1); privilegeModifierEqualRadioButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeModifierPlusRadioButton = BaseWidgetUtils.createRadiobutton(modifierGroup, "Add (+)", 1); privilegeModifierPlusRadioButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeModifierMinusRadioButton = BaseWidgetUtils.createRadiobutton(modifierGroup, "Delete (-)", 1); privilegeModifierMinusRadioButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // Custom privileges group createRadioIndent(privilegesTabComposite); Group privilegesGroup = BaseWidgetUtils.createGroup(privilegesTabComposite, "Privileges", 1); privilegesGroup.setLayout(new GridLayout(3, true)); privilegesGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // Custom privileges checkboxes privilegeAuthCheckbox = BaseWidgetUtils.createCheckbox(privilegesGroup, "Auth", 1); privilegeAuthCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeCompareCheckbox = BaseWidgetUtils.createCheckbox(privilegesGroup, "Compare", 1); privilegeCompareCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeSearchCheckbox = BaseWidgetUtils.createCheckbox(privilegesGroup, "Search", 1); privilegeSearchCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeReadCheckbox = BaseWidgetUtils.createCheckbox(privilegesGroup, "Read", 1); privilegeReadCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); privilegeWriteCheckbox = BaseWidgetUtils.createCheckbox(privilegesGroup, "Write", 1); privilegeWriteCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); } /** * Adds some space to indent radio buttons. * * @param parent the parent * @param span the horizontal span */ public static void createRadioIndent(Composite parent) { Label l = new Label(parent, SWT.NONE); GridData gd = new GridData(); gd.horizontalIndent = 10; l.setLayoutData(gd); } private void initWithAccessLevel() { // Creating a boolean to indicate if the level is used (rather than the privileges) boolean isLevelUsed = true; if (accessLevel == null) { // Access level can't be null, creating a new one accessLevel = new AclAccessLevel(); } // Self selfCheckbox.setSelection(accessLevel.isSelf()); // Level AclAccessLevelLevelEnum level = accessLevel.getLevel(); if (level != null) { levelComboViewer.setSelection(new StructuredSelection(level)); } else { // Default levelComboViewer.setSelection(new StructuredSelection(levels[0])); } // Privilege Modifier AclAccessLevelPrivModifierEnum privilegeModifier = accessLevel.getPrivilegeModifier(); if (privilegeModifier != null) { // Level is not used in that case isLevelUsed = false; privilegeModifierEqualRadioButton .setSelection(AclAccessLevelPrivModifierEnum.EQUAL.equals(privilegeModifier)); privilegeModifierPlusRadioButton .setSelection(AclAccessLevelPrivModifierEnum.PLUS.equals(privilegeModifier)); privilegeModifierMinusRadioButton .setSelection(AclAccessLevelPrivModifierEnum.MINUS.equals(privilegeModifier)); } else { // Default privilegeModifierEqualRadioButton.setSelection(true); privilegeModifierPlusRadioButton.setSelection(false); privilegeModifierMinusRadioButton.setSelection(false); } // Privileges List<AclAccessLevelPrivilegeEnum> privileges = accessLevel.getPrivileges(); privilegeAuthCheckbox.setSelection(privileges.contains(AclAccessLevelPrivilegeEnum.AUTHENTICATION)); privilegeCompareCheckbox.setSelection(privileges.contains(AclAccessLevelPrivilegeEnum.COMPARE)); privilegeSearchCheckbox.setSelection(privileges.contains(AclAccessLevelPrivilegeEnum.SEARCH)); privilegeReadCheckbox.setSelection(privileges.contains(AclAccessLevelPrivilegeEnum.READ)); privilegeWriteCheckbox.setSelection(privileges.contains(AclAccessLevelPrivilegeEnum.WRITE)); // Setting choice buttons levelRadioButton.setSelection(isLevelUsed); customPrivilegesRadioButton.setSelection(!isLevelUsed); // Setting the enable/disable state for buttons setButtonsEnableDisableState(); } /** * Sets the enable/disable state for buttons */ private void setButtonsEnableDisableState() { boolean isLevelUsed = levelRadioButton.getSelection(); levelComboViewer.getCombo().setEnabled(isLevelUsed); privilegeModifierEqualRadioButton.setEnabled(!isLevelUsed); privilegeModifierPlusRadioButton.setEnabled(!isLevelUsed); privilegeModifierMinusRadioButton.setEnabled(!isLevelUsed); privilegeAuthCheckbox.setEnabled(!isLevelUsed); privilegeCompareCheckbox.setEnabled(!isLevelUsed); privilegeSearchCheckbox.setEnabled(!isLevelUsed); privilegeReadCheckbox.setEnabled(!isLevelUsed); privilegeWriteCheckbox.setEnabled(!isLevelUsed); } /** * Adds listeners to the UI widgets. */ private void addListeners() { // Level and custom privileges radio buttons SelectionAdapter enableDisableStateAndValidateSelectionAdapter = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setButtonsEnableDisableState(); validate(); } }; levelRadioButton.addSelectionListener(enableDisableStateAndValidateSelectionAdapter); customPrivilegesRadioButton.addSelectionListener(enableDisableStateAndValidateSelectionAdapter); // Level combo viewer levelComboViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { validate(); } }); // Privilege modifier and privileges radio buttons SelectionAdapter validateSelectionAdapter = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { validate(); } }; privilegeModifierEqualRadioButton.addSelectionListener(validateSelectionAdapter); privilegeModifierPlusRadioButton.addSelectionListener(validateSelectionAdapter); privilegeModifierMinusRadioButton.addSelectionListener(validateSelectionAdapter); privilegeAuthCheckbox.addSelectionListener(validateSelectionAdapter); privilegeCompareCheckbox.addSelectionListener(validateSelectionAdapter); privilegeSearchCheckbox.addSelectionListener(validateSelectionAdapter); privilegeReadCheckbox.addSelectionListener(validateSelectionAdapter); privilegeWriteCheckbox.addSelectionListener(validateSelectionAdapter); } /** * Gets the ACL Access Level value. * * @return the ACL Access Level value */ public AclAccessLevel getAccessLevel() { return accessLevel; } /** * A private object for the first row of the access level combo viewer. */ private class AccessLevelComboViewerName { } }