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.text.ParseException; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; 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.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.Spinner; 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.widgets.OpenLdapAclTabFolderComposite; /** * The OpenLDAP ACL Dialog is used to edit ACL values on an OpenLDAP server connection. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OpenLdapAclDialog extends Dialog { /** The ID for the 'Format' button */ private static final int FORMAT_BUTTON = 999999; /** The ID for the 'Check Syntax' button */ private static final int CHECK_SYNTAX_BUTTON = 999998; /** The context containing the initial value, passed by the constructor */ private OpenLdapAclValueWithContext context; /** The ACL value */ private String aclValue; /** The precendence checkbox */ private Button precedenceCheckbox; /** The precedence spinner */ private Spinner precedenceSpinner; /** The precedence flag */ private int precedence; /** The tab folder composite */ private OpenLdapAclTabFolderComposite tabFolderComposite; /** * A listener on the Precedence Checkbox. It will enable or disable the precedence spinner. */ private SelectionAdapter precedenceCheckBoxSelectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { precedenceSpinner.setEnabled(precedenceCheckbox.getSelection()); } }; /** * The precedence spinner modify listener */ private ModifyListener precedenceSpinnerModifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { precedence = precedenceSpinner.getSelection(); } }; /** * Creates a new instance of OpenLdapAclDialog. * * @param parentShell the parent shell * @param context the ACL context */ public OpenLdapAclDialog(Shell parentShell, OpenLdapAclValueWithContext context) { super(parentShell); super.setShellStyle(super.getShellStyle() | SWT.RESIZE); this.context = context; context.setAclDialog(this); } /** * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText("OpenLDAP ACL 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) { createButton(parent, FORMAT_BUTTON, "Format", false); createButton(parent, CHECK_SYNTAX_BUTTON, "Check Syntax", false); createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /** * {@inheritDoc} * * This implementation checks if the Format button was pressed. */ protected void buttonPressed(int buttonId) { if (buttonId == FORMAT_BUTTON) { tabFolderComposite.format(); } if (buttonId == CHECK_SYNTAX_BUTTON) { try { tabFolderComposite.getInput(); MessageDialog.openInformation(getShell(), "Correct Syntax", "Correct Syntax"); } catch (ParseException pe) { IStatus status = new Status(IStatus.ERROR, OpenLdapAclEditorPluginConstants.PLUGIN_ID, 1, "Invalid syntax.", pe); ErrorDialog.openError(getShell(), "Syntax Error", null, status); } } // call super implementation super.buttonPressed(buttonId); } /** * {@inheritDoc} */ protected void okPressed() { try { aclValue = tabFolderComposite.getInput(); tabFolderComposite.saveWidgetSettings(); super.okPressed(); } catch (ParseException pe) { IStatus status = new Status(IStatus.ERROR, OpenLdapAclEditorPluginConstants.PLUGIN_ID, 1, "Invalid syntax.", pe); ErrorDialog.openError(getShell(), "Syntax Error", null, status); } } /** * Return the OK button instance */ public Button getOKButton() { return getButton(IDialogConstants.OK_ID); } /** * @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 : first the precedence createPrecedenceGroup(composite); // the tab for the source/visual editor createTabFolderComposite(composite); // Setting default focus on the composite composite.setFocus(); applyDialogFont(composite); return composite; } /** * Creates the precedence group. We handle the checkbox and the value for precedence. * * <pre> * +-----------------------------------------+ * | [ ] Precedence : [---] 8 | * +-----------------------------------------+ * </pre> * @param parent the parent composite */ private void createPrecedenceGroup(Composite parent) { // Precendence group Group precendenceGroup = BaseWidgetUtils.createGroup(parent, "", 1); GridLayout precedenceGroupLayout = new GridLayout(2, false); precedenceGroupLayout.horizontalSpacing = precedenceGroupLayout.verticalSpacing = 10; precendenceGroup.setLayout(precedenceGroupLayout); GridData gd2 = new GridData(SWT.FILL, SWT.NONE, true, false); precendenceGroup.setLayoutData(gd2); // Precendence values precedence = context.getPrecedence(); // Precedence checkbox precedenceCheckbox = BaseWidgetUtils.createCheckbox(precendenceGroup, "Precedence:", 1); precedenceCheckbox.setSelection(context.hasPrecedence()); precedenceCheckbox.addSelectionListener(precedenceCheckBoxSelectionListener); // Precedence spinner precedenceSpinner = new Spinner(precendenceGroup, SWT.BORDER); precedenceSpinner.setEnabled(context.hasPrecedence()); precedenceSpinner.setSelection(precedence); precedenceSpinner.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false)); precedenceSpinner.addModifyListener(precedenceSpinnerModifyListener); } /** * Creates the tab folder composite. * * @param parent the parent composite */ private void createTabFolderComposite(Composite parent) { // Creating the tab folder composite tabFolderComposite = new OpenLdapAclTabFolderComposite(parent, context, SWT.NONE); tabFolderComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); } /** * Gets the ACL value. * * @return the ACL value */ public String getAclValue() { return aclValue; } /** * @return the precedence value */ public int getPrecedence() { return precedence; } /** * @return whether precedence is used or not */ public boolean hasPrecedence() { return precedence != -1; } }