/*
* 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.editor.dialogs;
import java.text.ParseException;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Text;
import org.apache.directory.studio.openldap.syncrepl.SaslMechanism;
import org.apache.directory.studio.openldap.syncrepl.SyncRepl;
/**
* The ReplicationSaslDialog is used to edit the SASL configuration of a SyncRepl consumer.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ReplicationSaslDialog extends Dialog
{
/** The SyncRepl value */
private SyncRepl syncRepl;
/** The connection */
private IBrowserConnection browserConnection;
// UI widgets
private ScrolledComposite scrolledComposite;
private Composite composite;
private ComboViewer saslMechanismComboViewer;
private Text realmText;
private Text authenticationIdText;
private Text authorizationIdText;
private Text credentialsText;
private Button showCredentialsCheckbox;
private Text secPropsText;
// Listeners
private SelectionListener showCredentialsCheckboxListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
if ( showCredentialsCheckbox.getSelection() )
{
credentialsText.setEchoChar( '\0' );
}
else
{
credentialsText.setEchoChar( '\u2022' );
}
}
};
/**
* Creates a new instance of OverlayDialog.
*
* @param parentShell the parent shell
* @param index the index
* @param browserConnection the connection
*/
public ReplicationSaslDialog( Shell parentShell, SyncRepl syncRepl, IBrowserConnection browserConnection )
{
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
this.browserConnection = browserConnection;
if ( syncRepl != null )
{
this.syncRepl = syncRepl.copy();
}
else
{
this.syncRepl = createDefaultSyncRepl();
}
}
/**
* Creates a default SyncRepl configuration.
*
* @return a default SyncRepl configuration
*/
private SyncRepl createDefaultSyncRepl()
{
SyncRepl syncRepl = new SyncRepl();
return syncRepl;
}
/**
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
protected void configureShell( Shell shell )
{
super.configureShell( shell );
shell.setText( "Replication Options" );
}
/**
* {@inheritDoc}
*/
protected void okPressed()
{
saveToSyncRepl();
super.okPressed();
}
/**
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
protected Control createDialogArea( Composite parent )
{
// Creating the scrolled composite
scrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
scrolledComposite.setExpandHorizontal( true );
scrolledComposite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
// Creating the composite and attaching it to the scrolled composite
composite = new Composite( scrolledComposite, SWT.NONE );
composite.setLayout( new GridLayout() );
scrolledComposite.setContent( composite );
createSaslConfigurationGroup( composite );
initFromSyncRepl();
applyDialogFont( scrolledComposite );
composite.setSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return scrolledComposite;
}
/**
* Creates the SASL Configuration group.
*
* @param parent the parent composite
*/
private void createSaslConfigurationGroup( Composite parent )
{
// SASL Configuration Group
Group group = BaseWidgetUtils.createGroup( parent, "SASL Configuration", 1 );
group.setLayout( new GridLayout( 2, false ) );
group.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// SASL Mechanism
BaseWidgetUtils.createLabel( group, "SASL Mechanism:", 1 );
saslMechanismComboViewer = new ComboViewer( group );
saslMechanismComboViewer.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
saslMechanismComboViewer.setContentProvider( new ArrayContentProvider() );
saslMechanismComboViewer.setLabelProvider( new LabelProvider()
{
public String getText( Object element )
{
if ( element instanceof SaslMechanism )
{
return ( ( SaslMechanism ) element ).getTitle();
}
return super.getText( element );
}
} );
saslMechanismComboViewer.setInput( new SaslMechanism[]
{ SaslMechanism.DIGEST_MD5, SaslMechanism.GSSAPI } );
// Authentication ID
BaseWidgetUtils.createLabel( group, "Authentication ID:", 1 );
authenticationIdText = BaseWidgetUtils.createText( group, "", 1 );
// Authorization ID
BaseWidgetUtils.createLabel( group, "Authorization ID:", 1 );
authorizationIdText = BaseWidgetUtils.createText( group, "", 1 );
// Credentials
BaseWidgetUtils.createLabel( group, "Credentials:", 1 );
credentialsText = BaseWidgetUtils.createText( group, "", 1 );
credentialsText.setEchoChar( '\u2022' );
// Show Credentials Checkbox
BaseWidgetUtils.createLabel( group, "", 1 );
showCredentialsCheckbox = BaseWidgetUtils.createCheckbox( group, "Show Credentials", 1 );
// Realm
BaseWidgetUtils.createLabel( group, "Realm:", 1 );
realmText = BaseWidgetUtils.createText( group, "", 1 );
// Sec Props
BaseWidgetUtils.createLabel( group, "Sec Props:", 1 );
secPropsText = BaseWidgetUtils.createText( group, "", 1 );
}
/**
* Initializes the dialog using the SyncRepl object.
*/
private void initFromSyncRepl()
{
if ( syncRepl != null )
{
// SASL Mechanism
String saslMechanismString = syncRepl.getSaslMech();
if ( saslMechanismString != null )
{
try
{
saslMechanismComboViewer.setSelection( new StructuredSelection( SaslMechanism
.parse( saslMechanismString ) ) );
}
catch ( ParseException e )
{
// Silent
}
}
// Authentication ID
String authenticationId = syncRepl.getAuthcid();
if ( authenticationId != null )
{
authenticationIdText.setText( authenticationId );
}
// Authorization ID
String authorizationId = syncRepl.getAuthzid();
if ( authorizationId != null )
{
authorizationIdText.setText( authorizationId );
}
// Credentials
String credentials = syncRepl.getCredentials();
if ( credentials != null )
{
credentialsText.setText( credentials );
}
// Realm
String realm = syncRepl.getRealm();
if ( realm != null )
{
realmText.setText( realm );
}
// Sec Props
String secProps = syncRepl.getSecProps();
if ( secProps != null )
{
secPropsText.setText( secProps );
}
addListeners();
}
}
/**
* Adds listeners.
*/
private void addListeners()
{
showCredentialsCheckbox.addSelectionListener( showCredentialsCheckboxListener );
}
/**
* Saves the content of the dialog to the SyncRepl object.
*/
private void saveToSyncRepl()
{
if ( syncRepl != null )
{
// SASL Mechanism
syncRepl.setSaslMech( getSaslMechanism() );
// Authentication ID
String authenticationId = authenticationIdText.getText();
if ( ( authenticationId != null ) && ( !"".equals( authenticationId ) ) )
{
syncRepl.setAuthcid( authenticationId );
}
else
{
syncRepl.setAuthcid( null );
}
// Authorization ID
String authorizationId = authorizationIdText.getText();
if ( ( authorizationId != null ) && ( !"".equals( authorizationId ) ) )
{
syncRepl.setAuthzid( authorizationId );
}
else
{
syncRepl.setAuthzid( null );
}
// Credentials
String credentials = credentialsText.getText();
if ( ( credentials != null ) && ( !"".equals( credentials ) ) )
{
syncRepl.setCredentials( credentials );
}
else
{
syncRepl.setCredentials( null );
}
// Realm
String realm = realmText.getText();
if ( ( realm != null ) && ( !"".equals( realm ) ) )
{
syncRepl.setRealm( realm );
}
else
{
syncRepl.setRealm( null );
}
// Sec Props
String secProps = secPropsText.getText();
if ( ( secProps != null ) && ( !"".equals( secProps ) ) )
{
syncRepl.setSecProps( secProps );
}
else
{
syncRepl.setSecProps( null );
}
}
}
/**
* Gets the selected SASL mechanism.
*
* @return the selected SASL mechanism
*/
private String getSaslMechanism()
{
StructuredSelection selection = ( StructuredSelection ) saslMechanismComboViewer.getSelection();
if ( ( selection != null ) && ( !selection.isEmpty() ) )
{
return ( ( SaslMechanism ) selection.getFirstElement() ).getValue();
}
return null;
}
/**
* Gets the SyncRepl value.
*
* @return the SyncRepl value
*/
public SyncRepl getSyncRepl()
{
return syncRepl;
}
}