/* * 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.composites; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; 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.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Spinner; import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext; import org.apache.directory.studio.openldap.config.acl.model.AbstractAclWhoClauseCryptoStrength; import org.apache.directory.studio.openldap.config.acl.widgets.AclWhoClauseSsfValuesEnum; /** * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> * * @param <C> */ public class AbstractWhoClauseCryptoStrengthComposite<C extends AbstractAclWhoClauseCryptoStrength> extends AbstractWhoClauseComposite<C> { /** The array of SSF who clause values */ private static final AclWhoClauseSsfValuesEnum[] aclWhoClauseSsfValues = new AclWhoClauseSsfValuesEnum[] { AclWhoClauseSsfValuesEnum.ANY, AclWhoClauseSsfValuesEnum.FORTY, AclWhoClauseSsfValuesEnum.FIFTY_SIX, AclWhoClauseSsfValuesEnum.SIXTY_FOUR, AclWhoClauseSsfValuesEnum.ONE_TWENTY_HEIGHT, AclWhoClauseSsfValuesEnum.ONE_SIXTY_FOUR, AclWhoClauseSsfValuesEnum.TWO_FIFTY_SIX, AclWhoClauseSsfValuesEnum.CUSTOM }; /** The SSF values combo viewer */ private ComboViewer ssfValuesComboViewer; /** The custom SSF value spinner */ private Spinner customSsfValueSpinner; /** The current SSF value */ private AclWhoClauseSsfValuesEnum currentSsfValue; /** * Creates a new instance of AbstractWhoClauseCryptoStrengthComposite. * * @param clause the clause * @param visualEditorComposite the visual editor composite */ public AbstractWhoClauseCryptoStrengthComposite( OpenLdapAclValueWithContext context, C clause, Composite visualEditorComposite ) { super( context, clause, visualEditorComposite ); } public Composite createComposite( Composite parent ) { Composite composite = BaseWidgetUtils.createColumnContainer( parent, 3, 1 ); // SSF Value Label BaseWidgetUtils.createLabel( composite, "SSF Value:", 1 ); // SSF Values Combo Viewer ssfValuesComboViewer = new ComboViewer( BaseWidgetUtils.createReadonlyCombo( composite, new String[0], -1, 1 ) ); ssfValuesComboViewer.getCombo().setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false ) ); ssfValuesComboViewer.setContentProvider( new ArrayContentProvider() ); ssfValuesComboViewer.setLabelProvider( new LabelProvider() { public String getText( Object element ) { if ( element instanceof AclWhoClauseSsfValuesEnum ) { AclWhoClauseSsfValuesEnum value = ( AclWhoClauseSsfValuesEnum ) element; switch ( value ) { case ANY: return "1 (Any)"; case FORTY: return "40"; case FIFTY_SIX: return "56"; case SIXTY_FOUR: return "64"; case ONE_TWENTY_HEIGHT: return "128"; case ONE_SIXTY_FOUR: return "164"; case TWO_FIFTY_SIX: return "256"; case CUSTOM: return "Custom"; } } return super.getText( element ); } } ); ssfValuesComboViewer.setInput( aclWhoClauseSsfValues ); ssfValuesComboViewer.setSelection( new StructuredSelection( aclWhoClauseSsfValues[0] ) ); ssfValuesComboViewer.addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event ) { // Getting the selected who clause AclWhoClauseSsfValuesEnum ssfValue = ( AclWhoClauseSsfValuesEnum ) ( ( StructuredSelection ) ssfValuesComboViewer .getSelection() ).getFirstElement(); // Only changing the UI when the clause is different if ( currentSsfValue != ssfValue ) { // Storing the current value currentSsfValue = ssfValue; // Making the spinner hidden/visible (depending on the choice customSsfValueSpinner.setVisible( AclWhoClauseSsfValuesEnum.CUSTOM.equals( currentSsfValue ) ); // Refreshing the layout of the parent composite visualEditorComposite.layout( true, true ); } } } ); // Custom SSF Value Spinner customSsfValueSpinner = new Spinner( composite, SWT.BORDER ); customSsfValueSpinner.setMinimum( 1 ); customSsfValueSpinner.setTextLimit( 4 ); customSsfValueSpinner.setVisible( false ); customSsfValueSpinner.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { System.out.println( customSsfValueSpinner.getSelection() ); } } ); return composite; } }