/* * 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 org.apache.directory.studio.common.ui.widgets.AbstractWidget; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext; import org.apache.directory.studio.openldap.config.acl.model.AclWhatClause; import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseAttributes; import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseDn; import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseFilter; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseAttributesComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseDnComposite; import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseFilterComposite; /** * The WhatClause widget. It coves all the What possible options : * <ul> * <li>DN</li> * <li>Filter</li> * <li>Attributes</li> * </ul> * The three possible options, when selected, will open new composites dynamically. * * <pre> * </pre> * .---------------------------------------------------------. * | | * | [ ] DN | * | | * | [ ] Filter | * | | * | [ ] Attributes | * | | * `---------------------------------------------------------' * </pre> * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class OpenLdapAclWhatClauseWidget extends AbstractWidget { /** The visual editor composite */ private OpenLdapAclVisualEditorComposite visualEditorComposite; /** The context */ private OpenLdapAclValueWithContext context; // UI widgets private Composite composite; private Button dnCheckbox; private Composite dnComposite; private Composite dnSubComposite; private Button filterCheckbox; private Composite filterComposite; private Composite filterSubComposite; private Button attributesCheckbox; private Composite attributesComposite; private Composite attributesSubComposite; private WhatClauseAttributesComposite attributesClauseComposite; private WhatClauseFilterComposite filterClauseComposite; private WhatClauseDnComposite dnClauseComposite; // Listeners private SelectionAdapter dnCheckboxListener = new SelectionAdapter() { public void widgetSelected( org.eclipse.swt.events.SelectionEvent e ) { if ( dnCheckbox.getSelection() ) { createDnComposite(); } else { disposeComposite( dnSubComposite ); } // Refreshing the layout of the whole composite visualEditorComposite.layout( true, true ); } }; private SelectionAdapter filterCheckboxListener = new SelectionAdapter() { public void widgetSelected( org.eclipse.swt.events.SelectionEvent e ) { if ( filterCheckbox.getSelection() ) { createFilterComposite(); } else { disposeComposite( filterSubComposite ); } // Refreshing the layout of the whole composite visualEditorComposite.layout( true, true ); } }; /** * The listener on the Attributes Checkbox. It creates the Attributes composite * when selected, dispose it when unchecked. */ private SelectionAdapter attributesCheckboxListener = new SelectionAdapter() { public void widgetSelected( org.eclipse.swt.events.SelectionEvent e ) { if ( attributesCheckbox.getSelection() ) { createAttributesComposite(); } else { disposeComposite( attributesSubComposite ); } // Refreshing the layout of the whole composite visualEditorComposite.layout( true, true ); } }; /** * Creates a new instance of OpenLdapAclWhatClauseWidget. It's just a list of * 3 checkboxes which, when selected, open a new composite dynamically created. * * <pre> * .---------------------------------------------------------. * | | * | [ ] DN | * | | * | [ ] Filter | * | | * | [ ] Attributes | * | | * `---------------------------------------------------------' * </pre> * * @param visualEditorComposite the visual editor composite * @param parent The WhatClause parent's composite * @param context the Acl context */ public OpenLdapAclWhatClauseWidget( OpenLdapAclVisualEditorComposite visualEditorComposite, Composite parent, OpenLdapAclValueWithContext context ) { this.visualEditorComposite = visualEditorComposite; this.context = context; // Creating the widget base composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); // Creating the what group Group whatGroup = BaseWidgetUtils.createGroup( parent, "Acces to \"What\"", 1 ); whatGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // DN dnCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "DN", 1 ); dnComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 ); dnCheckbox.addSelectionListener( dnCheckboxListener ); // Filter filterCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "Filter", 1 ); filterComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 ); filterCheckbox.addSelectionListener( filterCheckboxListener ); // Attributes attributesCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "Attributes", 1 ); attributesComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 ); attributesCheckbox.addSelectionListener( attributesCheckboxListener ); } /** * Creates the DN composite. */ private void createDnComposite() { Group dnGroup = BaseWidgetUtils.createGroup( dnComposite, "", 1 ); dnGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); dnSubComposite = dnGroup; dnClauseComposite = new WhatClauseDnComposite( context, visualEditorComposite ); dnClauseComposite.createComposite( dnGroup ); /* AclWhatClause whatClause = context.getAclItem().getWhatClause(); if ( whatClause.getDnClause() != null ) { dnClauseComposite.setClause( whatClause.getDnClause() ); } if ( context != null ) { dnClauseComposite.setConnection( context.getConnection() ); } */ } /** * Creates the filter composite. */ private void createFilterComposite() { Group filterGroup = BaseWidgetUtils.createGroup( filterComposite, "", 1 ); filterGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); filterSubComposite = filterGroup; filterClauseComposite = new WhatClauseFilterComposite( context, visualEditorComposite ); filterClauseComposite.createComposite( filterGroup ); /* AclWhatClause whatClause = context.getAclItem().getWhatClause(); if ( whatClause.getFilterClause() != null ) { filterClauseComposite.setClause( whatClause.getFilterClause() ); } if ( context != null ) { filterClauseComposite.setConnection( context.getConnection() ); } */ } /** * Creates the attributes composite. */ private void createAttributesComposite() { attributesSubComposite = BaseWidgetUtils.createGroup( attributesComposite, "", 1 ); attributesSubComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); attributesClauseComposite = new WhatClauseAttributesComposite( visualEditorComposite, attributesSubComposite, context ); /* AclWhatClause whatClause = context.getAclItem().getWhatClause(); if ( whatClause.getAttributesClause() != null ) { attributesClauseComposite.setClause( whatClause.getAttributesClause() ); } if ( context != null ) { attributesClauseComposite.setConnection( context.getConnection() ); } */ } /** * Disposes the given composite. * * @param composite the composite */ private void disposeComposite( Composite composite ) { if ( ( composite != null ) && ( !composite.isDisposed() ) ) { composite.dispose(); } } /** * Refresh the WhatClause GUI */ public void refresh() { AclWhatClause whatClause = context.getAclItem().getWhatClause(); if ( whatClause != null ) { // DN clause if ( whatClause instanceof AclWhatClauseDn ) { dnCheckbox.setSelection( true ); createDnComposite(); } else if ( whatClause instanceof AclWhatClauseFilter ) { // Filter clause filterCheckbox.setSelection( true ); createFilterComposite(); } else if ( whatClause instanceof AclWhatClauseAttributes ) { // Attributes clause attributesCheckbox.setSelection( true ); createAttributesComposite(); } } } /** * Disposes all created SWT widgets. */ public void dispose() { // Composite if ( ( composite != null ) && ( !composite.isDisposed() ) ) { composite.dispose(); } } /** * Saves widget settings. */ public void saveWidgetSettings() { if ( attributesClauseComposite != null ) { attributesClauseComposite.saveWidgetSettings(); } } }