/* * 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.aciitemeditor.widgets; import java.util.ArrayList; import java.util.List; import org.apache.directory.api.ldap.model.constants.AuthenticationLevel; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; 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.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TypedEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; /** * This is used to edit general ACI item properties: * <ul> * <li>identification tag * <li>precedence * <li>authentication level * <li>selection for userFirst or itemFirst * </ul> * * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class ACIItemGeneralComposite extends Composite { /** The identification tag text field */ private Text identificationTagText = null; /** The spinner to select a valid precedence between 0 and 255 */ private Spinner precedenceSpinner = null; /** * The combo viewer is attached to authenticationLevelCombo to work with * AuthenticationLevel objects rather than Strings */ private ComboViewer authenticationLevelComboViewer = null; /** The user first radio button */ private Button userFirstRadioButton = null; /** The item first radio button */ private Button itemFirstRadioButton = null; /** The list with listers */ private List<WidgetModifyListener> listenerList = new ArrayList<WidgetModifyListener>(); /** * Creates a new instance of ACIItemGeneralComposite. * * @param parent * @param style */ public ACIItemGeneralComposite( Composite parent, int style ) { super( parent, style ); GridLayout layout = new GridLayout(); layout.horizontalSpacing = 0; layout.verticalSpacing = 0; layout.marginHeight = 0; layout.marginWidth = 0; setLayout( layout ); GridData layoutData = new GridData(); layoutData.horizontalAlignment = GridData.FILL; layoutData.grabExcessHorizontalSpace = true; layoutData.verticalAlignment = GridData.CENTER; setLayoutData( layoutData ); createComposite(); } /** * This method initializes composite * */ private void createComposite() { GridData identificationTagGridData = new GridData(); identificationTagGridData.grabExcessHorizontalSpace = true; identificationTagGridData.verticalAlignment = GridData.CENTER; identificationTagGridData.horizontalSpan = 2; identificationTagGridData.horizontalAlignment = GridData.FILL; GridData precedenceGridData = new GridData(); precedenceGridData.grabExcessHorizontalSpace = true; precedenceGridData.verticalAlignment = GridData.CENTER; precedenceGridData.horizontalSpan = 2; precedenceGridData.horizontalAlignment = GridData.BEGINNING; precedenceGridData.widthHint = 3 * 12; GridData authenticationLevelGridData = new GridData(); authenticationLevelGridData.grabExcessHorizontalSpace = true; authenticationLevelGridData.verticalAlignment = GridData.CENTER; authenticationLevelGridData.horizontalSpan = 2; authenticationLevelGridData.horizontalAlignment = GridData.FILL; GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; gridData.verticalAlignment = GridData.CENTER; Composite composite = new Composite( this, SWT.NONE ); composite.setLayout( gridLayout ); composite.setLayoutData( gridData ); Label identificationTagLabel = new Label( composite, SWT.NONE ); identificationTagLabel.setText( Messages.getString( "ACIItemGeneralComposite.idTag.label" ) ); //$NON-NLS-1$ identificationTagText = new Text( composite, SWT.BORDER ); identificationTagText.setLayoutData( identificationTagGridData ); identificationTagText.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent event ) { fire( event ); } } ); Label precedenceLabel = new Label( composite, SWT.NONE ); precedenceLabel.setText( Messages.getString( "ACIItemGeneralComposite.precedence.label" ) ); //$NON-NLS-1$ precedenceSpinner = new Spinner( composite, SWT.BORDER ); precedenceSpinner.setMinimum( 0 ); precedenceSpinner.setMaximum( 255 ); precedenceSpinner.setDigits( 0 ); precedenceSpinner.setIncrement( 1 ); precedenceSpinner.setPageIncrement( 10 ); precedenceSpinner.setSelection( 0 ); precedenceSpinner.setLayoutData( precedenceGridData ); precedenceSpinner.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent event ) { fire( event ); } } ); Label authenticationLevelLabel = new Label( composite, SWT.NONE ); authenticationLevelLabel.setText( Messages.getString( "ACIItemGeneralComposite.authLevel.label" ) ); //$NON-NLS-1$ Combo authenticationLevelCombo = new Combo( composite, SWT.READ_ONLY ); authenticationLevelCombo.setLayoutData( authenticationLevelGridData ); AuthenticationLevel[] authenticationLevels = new AuthenticationLevel[3]; authenticationLevels[0] = AuthenticationLevel.NONE; authenticationLevels[1] = AuthenticationLevel.SIMPLE; authenticationLevels[2] = AuthenticationLevel.STRONG; authenticationLevelComboViewer = new ComboViewer( authenticationLevelCombo ); authenticationLevelComboViewer.setContentProvider( new ArrayContentProvider() ); authenticationLevelComboViewer.setLabelProvider( new LabelProvider() ); authenticationLevelComboViewer.setInput( authenticationLevels ); authenticationLevelComboViewer.setSelection( new StructuredSelection( AuthenticationLevel.NONE ) ); authenticationLevelCombo.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent event ) { fire( event ); } } ); Label userOrItemFirstLabel = new Label( composite, SWT.NONE ); userOrItemFirstLabel.setText( Messages.getString( "ACIItemGeneralComposite.userOrItemFirst.label" ) ); //$NON-NLS-1$ userFirstRadioButton = new Button( composite, SWT.RADIO ); userFirstRadioButton.setText( Messages.getString( "ACIItemGeneralComposite.userFirst.label" ) ); //$NON-NLS-1$ userFirstRadioButton.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent event ) { fire( event ); } } ); itemFirstRadioButton = new Button( composite, SWT.RADIO ); itemFirstRadioButton.setText( Messages.getString( "ACIItemGeneralComposite.itemFirst.label" ) ); //$NON-NLS-1$ itemFirstRadioButton.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent event ) { fire( event ); } } ); } /** * Add the listener to the list of listeners. * * @param listener */ public void addWidgetModifyListener( WidgetModifyListener listener ) { checkWidget(); if ( listener == null ) { SWT.error( SWT.ERROR_NULL_ARGUMENT ); } listenerList.add( listener ); } /** * Removes the listener from the list of listeners. * * @param listener */ public void removeWidgetModifyListener( WidgetModifyListener listener ) { checkWidget(); if ( listener == null ) { SWT.error( SWT.ERROR_NULL_ARGUMENT ); } listenerList.remove( listener ); } /** * Fires WidgetModifyEvents. * * @param event the original event */ private void fire( TypedEvent event ) { for ( WidgetModifyListener listener : listenerList ) { listener.widgetModified( new WidgetModifyEvent( this ) ); } } /** * Returns the identification tag. * * @return the identification tag */ public String getIdentificationTag() { return identificationTagText.getText(); } /** * Sets the identification tag * * @param identificationTag the identification tag */ public void setIdentificationTag( String identificationTag ) { identificationTagText.setText( identificationTag ); } /** * Returns the selected precedence. * * @return the selected precedence */ public int getPrecedence() { return precedenceSpinner.getSelection(); } /** * Sets the precedence * * @param precedence the precedence */ public void setPrecedence( int precedence ) { precedenceSpinner.setSelection( precedence ); } /** * Returns the selected authentication level. * * @return the selected authentication level */ public AuthenticationLevel getAuthenticationLevel() { IStructuredSelection selection = ( IStructuredSelection ) authenticationLevelComboViewer.getSelection(); return ( AuthenticationLevel ) selection.getFirstElement(); } /** * Sets the authentication level. * * @param authenticationLevel the authentication level */ public void setAuthenticationLevel( AuthenticationLevel authenticationLevel ) { IStructuredSelection selection = new StructuredSelection( authenticationLevel ); authenticationLevelComboViewer.setSelection( selection ); } /** * Returns true if user first is selected. * * @return true if user first is selected */ public boolean isUserFirst() { return userFirstRadioButton.getSelection(); } /** * Selects user first. */ public void setUserFirst() { userFirstRadioButton.setSelection( true ); itemFirstRadioButton.setSelection( false ); } /** * Returns true if item first is selected. * * @return true if item first is selected */ public boolean isItemFirst() { return itemFirstRadioButton.getSelection(); } /** * Selects item first. */ public void setItemFirst() { itemFirstRadioButton.setSelection( true ); userFirstRadioButton.setSelection( false ); } }