You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/12/18 18:53:22 UTC
svn commit: r488368 [9/23] - in /directory/sandbox/pamarcelot/ldapstudio:
ldapstudio-browser-ui/ ldapstudio-browser-ui/META-INF/
ldapstudio-browser-ui/about_files/ ldapstudio-browser-ui/icons/
ldapstudio-browser-ui/icons/ovr16/ ldapstudio-browser-ui/sr...
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/PasswordDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/PasswordDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/PasswordDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/PasswordDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,485 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import java.util.Arrays;
+
+import org.apache.directory.ldapstudio.browser.core.jobs.CheckBindJob;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.Password;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.jobs.RunnableContextJobAdapter;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+
+import org.eclipse.jface.dialogs.Dialog;
+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.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+
+public class PasswordDialog extends Dialog
+{
+
+ public static final String DIALOG_TITLE = "Password Editor";
+
+ public static final String[] HASH_METHODS =
+ { Password.HASH_METHOD_SHA, Password.HASH_METHOD_SSHA, Password.HASH_METHOD_MD5, Password.HASH_METHOD_SMD5,
+ Password.HASH_METHOD_CRYPT, Password.HASH_METHOD_NO };
+
+ public static final int CURRENT_TAB = 0;
+
+ public static final int NEW_TAB = 1;
+
+ public static final String SELECTED_TAB_DIALOGSETTINGS_KEY = PasswordDialog.class.getName() + ".tab";
+
+ public static final String SELECTED_HASH_METHOD_DIALOGSETTINGS_KEY = PasswordDialog.class.getName() + ".hashMethod";
+
+ private TabFolder tabFolder;
+
+ private TabItem currentTab;
+
+ private TabItem newTab;
+
+ private IEntry entry;
+
+ private Password currentPassword;
+
+ private Composite currentPasswordContainer;
+
+ private Text currentPasswordText;
+
+ private Text currentPasswordHashMethodText;
+
+ private Text currentPasswordValueHexText;
+
+ private Text currentPasswordSaltHexText;
+
+ private Text testPasswordText;
+
+ private Button verifyPasswordButton;
+
+ private Button bindPasswordButton;
+
+ private Password newPassword;
+
+ private Composite newPasswordContainer;
+
+ private Text newPasswordText;
+
+ private Combo newPasswordHashMethodCombo;
+
+ private Text newPasswordPreviewText;
+
+ private Text newPasswordPreviewValueHexText;
+
+ private Text newPasswordPreviewSaltHexText;
+
+ private Button newSaltButton;
+
+ private byte[] returnPassword;
+
+ private Button okButton;
+
+
+ public PasswordDialog( Shell parentShell, byte[] currentPassword, IEntry entry )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+
+ try
+ {
+ this.currentPassword = currentPassword != null ? new Password( currentPassword ) : null;
+ }
+ catch ( IllegalArgumentException e )
+ {
+ }
+ this.entry = entry;
+
+ this.returnPassword = null;
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( DIALOG_TITLE );
+ shell.setImage( BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_PASSWORDEDITOR ) );
+ }
+
+
+ protected void okPressed()
+ {
+ // create password
+ if ( newPassword != null )
+ {
+ this.returnPassword = this.newPassword.toBytes();
+ }
+ else
+ {
+ this.returnPassword = null;
+ }
+
+ // save selected hash method to dialog settings, selected tab will be
+ // saved int close()
+ BrowserUIPlugin.getDefault().getDialogSettings().put( SELECTED_HASH_METHOD_DIALOGSETTINGS_KEY,
+ this.newPasswordHashMethodCombo.getText() );
+
+ super.okPressed();
+ }
+
+
+ public boolean close()
+ {
+ // save selected tab to dialog settings
+ BrowserUIPlugin.getDefault().getDialogSettings().put( SELECTED_TAB_DIALOGSETTINGS_KEY,
+ this.tabFolder.getSelectionIndex() );
+
+ return super.close();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ okButton = createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+
+ // load dialog settings
+ try
+ {
+ int tabIndex = BrowserUIPlugin.getDefault().getDialogSettings().getInt( SELECTED_TAB_DIALOGSETTINGS_KEY );
+ if ( this.currentPassword == null || this.currentPassword.toBytes().length == 0 )
+ {
+ tabIndex = NEW_TAB;
+ }
+ this.tabFolder.setSelection( tabIndex );
+ }
+ catch ( Exception e )
+ {
+ }
+ try
+ {
+ String hashMethod = BrowserUIPlugin.getDefault().getDialogSettings().get(
+ SELECTED_HASH_METHOD_DIALOGSETTINGS_KEY );
+ if ( Arrays.asList( HASH_METHODS ).contains( hashMethod ) )
+ {
+ this.newPasswordHashMethodCombo.setText( hashMethod );
+ }
+ }
+ catch ( Exception e )
+ {
+ }
+
+ // update on load
+ updateTabFolder();
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ) * 3 / 2;
+ gd.heightHint = convertVerticalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ) / 2;
+ composite.setLayoutData( gd );
+
+ this.tabFolder = new TabFolder( composite, SWT.TOP );
+ GridLayout mainLayout = new GridLayout();
+ mainLayout.marginWidth = 0;
+ mainLayout.marginHeight = 0;
+ this.tabFolder.setLayout( mainLayout );
+ this.tabFolder.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+ this.tabFolder.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ updateTabFolder();
+ }
+ } );
+
+ // current password
+ if ( this.currentPassword != null && this.currentPassword.toBytes().length > 0 )
+ {
+ currentPasswordContainer = new Composite( this.tabFolder, SWT.NONE );
+ GridLayout currentLayout = new GridLayout( 2, false );
+ currentLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
+ currentLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
+ currentLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
+ currentLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
+ currentPasswordContainer.setLayout( currentLayout );
+
+ BaseWidgetUtils.createLabel( currentPasswordContainer, "Current Password:", 1 );
+ currentPasswordText = BaseWidgetUtils.createReadonlyText( currentPasswordContainer, "", 1 );
+
+ /* Label dummy = */new Label( currentPasswordContainer, SWT.NONE );
+ Composite currentPasswordDetailContainer = BaseWidgetUtils.createColumnContainer( currentPasswordContainer,
+ 2, 1 );
+ BaseWidgetUtils.createLabel( currentPasswordDetailContainer, "Hash Method:", 1 );
+ currentPasswordHashMethodText = BaseWidgetUtils.createLabeledText( currentPasswordDetailContainer, "", 1 );
+ BaseWidgetUtils.createLabel( currentPasswordDetailContainer, "Password (Hex):", 1 );
+ currentPasswordValueHexText = BaseWidgetUtils.createLabeledText( currentPasswordDetailContainer, "", 1 );
+ BaseWidgetUtils.createLabel( currentPasswordDetailContainer, "Salt (Hex):", 1 );
+ currentPasswordSaltHexText = BaseWidgetUtils.createLabeledText( currentPasswordDetailContainer, "", 1 );
+
+ BaseWidgetUtils.createLabel( currentPasswordContainer, "Verify Password:", 1 );
+ testPasswordText = BaseWidgetUtils.createPasswordText( currentPasswordContainer, "", 1 );
+ testPasswordText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ updateCurrentPasswordGroup();
+ }
+ } );
+
+ /* Label dummyLabel = */new Label( currentPasswordContainer, SWT.NONE );
+ Composite verifyPasswordButtonContainer = BaseWidgetUtils.createColumnContainer( currentPasswordContainer,
+ 2, 1 );
+ verifyPasswordButton = BaseWidgetUtils.createButton( verifyPasswordButtonContainer, "Verify", 1 );
+ verifyPasswordButton.setEnabled( false );
+ verifyPasswordButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ verifyCurrentPassword();
+ }
+ } );
+ bindPasswordButton = BaseWidgetUtils.createButton( verifyPasswordButtonContainer, "Bind", 1 );
+ bindPasswordButton.setEnabled( false );
+ bindPasswordButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ bindCurrentPassword();
+ }
+ } );
+
+ this.currentTab = new TabItem( this.tabFolder, SWT.NONE );
+ this.currentTab.setText( "Current Password" );
+ this.currentTab.setControl( currentPasswordContainer );
+ }
+
+ // new password
+ newPasswordContainer = new Composite( this.tabFolder, SWT.NONE );
+ GridLayout newLayout = new GridLayout( 2, false );
+ newLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
+ newLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
+ newLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
+ newLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
+ newPasswordContainer.setLayout( newLayout );
+
+ BaseWidgetUtils.createLabel( newPasswordContainer, "Enter New Password:", 1 );
+ newPasswordText = BaseWidgetUtils.createPasswordText( newPasswordContainer, "", 1 );
+ newPasswordText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ updateNewPasswordGroup();
+ }
+ } );
+
+ BaseWidgetUtils.createLabel( newPasswordContainer, "Select Hash Method:", 1 );
+ newPasswordHashMethodCombo = BaseWidgetUtils.createReadonlyCombo( newPasswordContainer, HASH_METHODS, 0, 1 );
+ newPasswordHashMethodCombo.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ updateNewPasswordGroup();
+ }
+ } );
+
+ BaseWidgetUtils.createLabel( newPasswordContainer, "Password Preview:", 1 );
+ newPasswordPreviewText = BaseWidgetUtils.createReadonlyText( newPasswordContainer, "", 1 );
+
+ newSaltButton = BaseWidgetUtils.createButton( newPasswordContainer, "New Salt", 1 );
+ newSaltButton.setEnabled( false );
+ newSaltButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ updateNewPasswordGroup();
+ }
+ } );
+ Composite newPasswordPreviewDetailContainer = BaseWidgetUtils
+ .createColumnContainer( newPasswordContainer, 2, 1 );
+ BaseWidgetUtils.createLabel( newPasswordPreviewDetailContainer, "Password (Hex):", 1 );
+ newPasswordPreviewValueHexText = BaseWidgetUtils.createLabeledText( newPasswordPreviewDetailContainer, ":", 1 );
+ BaseWidgetUtils.createLabel( newPasswordPreviewDetailContainer, "Salt (Hex):", 1 );
+ newPasswordPreviewSaltHexText = BaseWidgetUtils.createLabeledText( newPasswordPreviewDetailContainer, "", 1 );
+
+ this.newTab = new TabItem( this.tabFolder, SWT.NONE );
+ this.newTab.setText( "New Password" );
+ this.newTab.setControl( newPasswordContainer );
+
+ applyDialogFont( composite );
+ return composite;
+ }
+
+
+ private void updateCurrentPasswordGroup()
+ {
+ if ( this.currentPassword != null )
+ {
+ this.currentPasswordHashMethodText.setText( BaseWidgetUtils.getNonNullString( this.currentPassword
+ .getHashMethod() ) );
+ this.currentPasswordValueHexText.setText( BaseWidgetUtils.getNonNullString( this.currentPassword
+ .getHashedPasswordAsHexString() ) );
+ this.currentPasswordSaltHexText.setText( BaseWidgetUtils.getNonNullString( this.currentPassword
+ .getSaltAsHexString() ) );
+ this.currentPasswordText.setText( this.currentPassword.toString() );
+ }
+
+ this.testPasswordText.setEnabled( this.currentPassword != null
+ && this.currentPassword.getHashedPassword() != null && this.currentPassword.toBytes().length > 0 );
+ this.verifyPasswordButton.setEnabled( this.testPasswordText.isEnabled()
+ && !"".equals( this.testPasswordText.getText() ) );
+ this.bindPasswordButton.setEnabled( this.testPasswordText.isEnabled()
+ && !"".equals( this.testPasswordText.getText() ) && this.entry != null );
+
+ if ( this.verifyPasswordButton.isEnabled() )
+ getShell().setDefaultButton( this.verifyPasswordButton );
+ else
+ getShell().setDefaultButton( this.okButton );
+ // this.currentPasswordText.getParent().layout();
+ }
+
+
+ private void verifyCurrentPassword()
+ {
+ String testPassword = this.testPasswordText.getText();
+ if ( this.currentPassword != null )
+ {
+ if ( this.currentPassword.verify( testPassword ) )
+ {
+ MessageDialog dialog = new MessageDialog( getShell(), "Password Verification", getShell().getImage(),
+ "Password verified sucessfully", MessageDialog.INFORMATION, new String[]
+ { IDialogConstants.OK_LABEL }, 0 );
+ dialog.open();
+ }
+ else
+ {
+ MessageDialog dialog = new MessageDialog( getShell(), "Password Verification", getShell().getImage(),
+ "Password verification failed", MessageDialog.ERROR, new String[]
+ { IDialogConstants.OK_LABEL }, 0 );
+ dialog.open();
+ }
+ }
+ }
+
+
+ private void bindCurrentPassword()
+ {
+
+ if ( !"".equals( this.testPasswordText.getText() ) && this.entry != null )
+ {
+
+ IConnection connection = ( IConnection ) this.entry.getConnection().clone();;
+ connection.setName( null );
+ connection.setBindPrincipal( this.entry.getDn().toString() );
+ connection.setBindPassword( this.testPasswordText.getText() );
+ connection.setAuthMethod( IConnection.AUTH_SIMPLE );
+
+ CheckBindJob job = new CheckBindJob( connection );
+ RunnableContextJobAdapter.execute( job );
+ if ( job.getExternalResult().isOK() )
+ {
+ MessageDialog.openInformation( Display.getDefault().getActiveShell(), "Check Authentication",
+ "The authentication was successful." );
+ }
+
+ }
+ }
+
+
+ private void updateNewPasswordGroup()
+ {
+ this.newPassword = new Password( this.newPasswordHashMethodCombo.getText(), this.newPasswordText.getText() );
+ if ( !"".equals( this.newPasswordText.getText() ) || this.newPassword.getHashMethod() == null )
+ {
+ newPasswordPreviewValueHexText.setText( BaseWidgetUtils.getNonNullString( this.newPassword
+ .getHashedPasswordAsHexString() ) );
+ newPasswordPreviewSaltHexText.setText( BaseWidgetUtils.getNonNullString( this.newPassword
+ .getSaltAsHexString() ) );
+ newPasswordPreviewText.setText( this.newPassword.toString() );
+ newSaltButton.setEnabled( this.newPassword.getSalt() != null );
+ this.okButton.setEnabled( true );
+ getShell().setDefaultButton( this.okButton );
+ }
+ else
+ {
+ this.newPassword = null;
+ newPasswordPreviewValueHexText.setText( BaseWidgetUtils.getNonNullString( null ) );
+ newPasswordPreviewSaltHexText.setText( BaseWidgetUtils.getNonNullString( null ) );
+ newPasswordPreviewText.setText( BaseWidgetUtils.getNonNullString( null ) );
+ newSaltButton.setEnabled( false );
+ this.okButton.setEnabled( false );
+ }
+ }
+
+
+ private void updateTabFolder()
+ {
+ if ( testPasswordText != null && newPasswordText != null )
+ {
+ if ( tabFolder.getSelectionIndex() == CURRENT_TAB )
+ {
+ testPasswordText.setFocus();
+ }
+ else if ( tabFolder.getSelectionIndex() == NEW_TAB )
+ {
+ newPasswordText.setFocus();
+ }
+ updateCurrentPasswordGroup();
+ updateNewPasswordGroup();
+ }
+ }
+
+
+ /**
+ *
+ *
+ * @return Returns the password, either encypted by the selected
+ * algorithm or as plain text.
+ */
+ public byte[] getNewPassword()
+ {
+ return this.returnPassword;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/RenameEntryDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/RenameEntryDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/RenameEntryDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/RenameEntryDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,170 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.RDN;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+import org.apache.directory.ldapstudio.browser.ui.widgets.DnBuilderWidget;
+import org.apache.directory.ldapstudio.browser.ui.widgets.WidgetModifyEvent;
+import org.apache.directory.ldapstudio.browser.ui.widgets.WidgetModifyListener;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class RenameEntryDialog extends Dialog implements WidgetModifyListener
+{
+
+ public static final String DELETE_OLD_RDN_DIALOGSETTING_KEY = RenameEntryDialog.class.getName() + ".deleteOldRdn";
+
+ public static final String DIALOG_TITLE = "Rename Entry";
+
+ private IEntry entry;
+
+ private DnBuilderWidget dnBuilderWidget;
+
+ private Button deleteOldRdnButton;
+
+ private Button simulateRenameButton;
+
+ private Button okButton;
+
+ private RDN rdn;
+
+ private boolean deleteOldRdn;
+
+ private boolean simulateRename;
+
+
+ public RenameEntryDialog( Shell parentShell, IEntry entry )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.entry = entry;
+ this.rdn = null;
+
+ if ( BrowserUIPlugin.getDefault().getDialogSettings().get( DELETE_OLD_RDN_DIALOGSETTING_KEY ) == null )
+ BrowserUIPlugin.getDefault().getDialogSettings().put( DELETE_OLD_RDN_DIALOGSETTING_KEY, true );
+ this.deleteOldRdn = BrowserUIPlugin.getDefault().getDialogSettings().getBoolean(
+ DELETE_OLD_RDN_DIALOGSETTING_KEY );
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( DIALOG_TITLE );
+ }
+
+
+ public boolean close()
+ {
+ this.dnBuilderWidget.removeWidgetModifyListener( this );
+ this.dnBuilderWidget.dispose();
+ return super.close();
+ }
+
+
+ protected void okPressed()
+ {
+ this.rdn = this.dnBuilderWidget.getRdn();
+ this.deleteOldRdn = this.deleteOldRdnButton.getSelection();
+ this.simulateRename = this.simulateRenameButton.getSelection();
+
+ BrowserUIPlugin.getDefault().getDialogSettings().put( DELETE_OLD_RDN_DIALOGSETTING_KEY, this.deleteOldRdn );
+ this.dnBuilderWidget.saveDialogSettings();
+
+ super.okPressed();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ okButton = createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ) * 3 / 2;
+ composite.setLayoutData( gd );
+
+ BaseWidgetUtils.createLabel( composite, "Please enter the new RDN of the selected entry.", 1 );
+
+ this.dnBuilderWidget = new DnBuilderWidget( true, false );
+ this.dnBuilderWidget.addWidgetModifyListener( this );
+ this.dnBuilderWidget.createContents( composite );
+ this.dnBuilderWidget.setInput( this.entry.getConnection(), this.entry.getSubschema().getAllAttributeNames(),
+ this.entry.getRdn(), null );
+
+ this.deleteOldRdnButton = BaseWidgetUtils.createCheckbox( composite, "Delete old RDN", 1 );
+ this.deleteOldRdnButton.setSelection( this.deleteOldRdn );
+
+ this.simulateRenameButton = BaseWidgetUtils.createCheckbox( composite,
+ "Simulate subtree renaming by searching/adding/deleting recursively", 1 );
+ this.simulateRenameButton.setSelection( false );
+ this.simulateRenameButton.setEnabled( false );
+
+ applyDialogFont( composite );
+ return composite;
+ }
+
+
+ public void widgetModified( WidgetModifyEvent event )
+ {
+ if ( this.okButton != null )
+ {
+ this.okButton.setEnabled( this.dnBuilderWidget.getRdn() != null );
+ }
+ }
+
+
+ public RDN getRdn()
+ {
+ return this.rdn;
+ }
+
+
+ public boolean isDeleteOldRdn()
+ {
+ return this.deleteOldRdn;
+ }
+
+
+ public boolean isSimulateRename()
+ {
+ return simulateRename;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/ScopeDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/ScopeDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/ScopeDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/ScopeDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,120 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+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;
+
+
+public class ScopeDialog extends Dialog
+{
+
+ private String dialogTitle;
+
+ private boolean multi;
+
+ private int scope = -1;
+
+ private Button objectScopeButton;
+
+ private Button onelevelScopeButton;
+
+ private Button subtreeScopeButton;
+
+
+ public ScopeDialog( Shell parentShell, String dialogTitle, boolean multi )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.dialogTitle = dialogTitle;
+ this.multi = multi;
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( dialogTitle );
+ }
+
+
+ public boolean close()
+ {
+ return super.close();
+ }
+
+
+ protected void okPressed()
+ {
+ this.scope = this.objectScopeButton.getSelection() ? ISearch.SCOPE_OBJECT : this.onelevelScopeButton
+ .getSelection() ? ISearch.SCOPE_ONELEVEL : ISearch.SCOPE_SUBTREE;
+ super.okPressed();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ composite.setLayoutData( gd );
+
+ Group group = BaseWidgetUtils.createGroup( composite, "Please select the copy depth", 1 );
+ this.objectScopeButton = new Button( group, SWT.RADIO );
+ this.objectScopeButton.setSelection( true );
+ this.objectScopeButton.setText( this.multi ? "&Object (Only the copied entries)"
+ : "&Object (Only the copied entry)" );
+ this.onelevelScopeButton = new Button( group, SWT.RADIO );
+ this.onelevelScopeButton.setText( this.multi ? "O&ne Level (The copied entries and their direct children)"
+ : "O&ne Level (The copied entry and its direct children)" );
+ this.subtreeScopeButton = new Button( group, SWT.RADIO );
+ this.subtreeScopeButton.setText( this.multi ? "&Subtree (The whole subtrees)" : "&Subtree (The whole subtree)" );
+
+ applyDialogFont( composite );
+ return composite;
+
+ }
+
+
+ public int getScope()
+ {
+ return this.scope;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectConnectionDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectConnectionDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectConnectionDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectConnectionDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,202 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionActionGroup;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionConfiguration;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionUniversalListener;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionWidget;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class SelectConnectionDialog extends Dialog
+{
+
+ private String title;
+
+ private IConnection initialConnection;
+
+ private IConnection selectedConnection;
+
+ private ConnectionConfiguration configuration;
+
+ private ConnectionUniversalListener universalListener;
+
+ private ConnectionActionGroup actionGroup;
+
+ private ConnectionWidget mainWidget;
+
+
+ public SelectConnectionDialog( Shell parentShell, String title, IConnection initialConnection )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.title = title;
+ this.initialConnection = initialConnection;
+ this.selectedConnection = null;
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( title );
+ }
+
+
+ public boolean close()
+ {
+ if ( this.mainWidget != null )
+ {
+ this.configuration.dispose();
+ this.configuration = null;
+ this.actionGroup.deactivateGlobalActionHandlers();
+ this.actionGroup.dispose();
+ this.actionGroup = null;
+ this.universalListener.dispose();
+ this.universalListener = null;
+ this.mainWidget.dispose();
+ this.mainWidget = null;
+ }
+ return super.close();
+ }
+
+
+ protected void okPressed()
+ {
+ this.selectedConnection = initialConnection;
+ super.okPressed();
+ }
+
+
+ protected void cancelPressed()
+ {
+ this.selectedConnection = null;
+ super.cancelPressed();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridLayout gl = new GridLayout();
+ composite.setLayout( gl );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 2 );
+ composite.setLayoutData( gd );
+
+ // create configuration
+ this.configuration = new ConnectionConfiguration();
+
+ // create main widget
+ this.mainWidget = new ConnectionWidget( this.configuration, null );
+ this.mainWidget.createWidget( composite );
+ this.mainWidget.setInput( BrowserCorePlugin.getDefault().getConnectionManager() );
+
+ // create actions and context menu (and register global actions)
+ this.actionGroup = new ConnectionActionGroup( this.mainWidget, this.configuration );
+ this.actionGroup.fillToolBar( this.mainWidget.getToolBarManager() );
+ this.actionGroup.fillMenu( this.mainWidget.getMenuManager() );
+ this.actionGroup.fillContextMenu( this.mainWidget.getContextMenuManager() );
+ this.actionGroup.activateGlobalActionHandlers();
+
+ // create the listener
+ this.universalListener = new ConnectionUniversalListener( this.mainWidget.getViewer() );
+
+ this.mainWidget.getViewer().addSelectionChangedListener( new ISelectionChangedListener()
+ {
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ if ( !event.getSelection().isEmpty() )
+ {
+ Object o = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( o instanceof IConnection )
+ {
+ initialConnection = ( IConnection ) o;
+ }
+ }
+ }
+ } );
+
+ this.mainWidget.getViewer().addDoubleClickListener( new IDoubleClickListener()
+ {
+ public void doubleClick( DoubleClickEvent event )
+ {
+ if ( !event.getSelection().isEmpty() )
+ {
+ Object o = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( o instanceof IConnection )
+ {
+ initialConnection = ( IConnection ) o;
+ okPressed();
+ }
+ }
+ }
+ } );
+
+ if ( this.initialConnection != null )
+ {
+ IConnection connection = this.initialConnection;
+ this.mainWidget.getViewer().reveal( connection );
+ this.mainWidget.getViewer().setSelection( new StructuredSelection( connection ), true );
+ }
+
+ applyDialogFont( composite );
+
+ this.mainWidget.setFocus();
+
+ return composite;
+
+ }
+
+
+ public IConnection getSelectedConnection()
+ {
+ return this.selectedConnection;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectEntryDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,197 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserActionGroup;
+import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserConfiguration;
+import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserUniversalListener;
+import org.apache.directory.ldapstudio.browser.ui.widgets.browser.BrowserWidget;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class SelectEntryDialog extends Dialog
+{
+
+ private String title;
+
+ private Image image;
+
+ private IConnection connection;
+
+ private IEntry initialEntry;
+
+ private IEntry selectedEntry;
+
+ private BrowserConfiguration configuration;
+
+ private BrowserUniversalListener universalListener;
+
+ private BrowserActionGroup actionGroup;
+
+ private BrowserWidget mainWidget;
+
+
+ public SelectEntryDialog( Shell parentShell, String title, IConnection connection, IEntry initialEntry )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.title = title;
+ this.connection = connection;
+ this.initialEntry = initialEntry;
+ this.selectedEntry = null;
+ }
+
+
+ public SelectEntryDialog( Shell parentShell, String title, Image image, IConnection connection, IEntry initialEntry )
+ {
+ this( parentShell, title, connection, initialEntry );
+ this.image = image;
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( title );
+ shell.setImage( image );
+ }
+
+
+ public boolean close()
+ {
+ if ( this.mainWidget != null )
+ {
+ this.configuration.dispose();
+ this.configuration = null;
+ this.actionGroup.deactivateGlobalActionHandlers();
+ this.actionGroup.dispose();
+ this.actionGroup = null;
+ this.universalListener.dispose();
+ this.universalListener = null;
+ this.mainWidget.dispose();
+ this.mainWidget = null;
+ }
+ return super.close();
+ }
+
+
+ protected void okPressed()
+ {
+ this.selectedEntry = initialEntry;
+ super.okPressed();
+ }
+
+
+ protected void cancelPressed()
+ {
+ this.selectedEntry = null;
+ super.cancelPressed();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ composite.setLayoutData( gd );
+
+ // create configuration
+ this.configuration = new BrowserConfiguration();
+
+ // create main widget
+ this.mainWidget = new BrowserWidget( this.configuration, null );
+ this.mainWidget.createWidget( composite );
+ this.mainWidget.setInput( this.connection.getBaseDNEntries() );
+
+ // create actions and context menu (and register global actions)
+ this.actionGroup = new BrowserActionGroup( this.mainWidget, this.configuration );
+ this.actionGroup.fillToolBar( this.mainWidget.getToolBarManager() );
+ this.actionGroup.fillMenu( this.mainWidget.getMenuManager() );
+ this.actionGroup.fillContextMenu( this.mainWidget.getContextMenuManager() );
+ this.actionGroup.activateGlobalActionHandlers();
+
+ // create the listener
+ this.universalListener = new BrowserUniversalListener( this.mainWidget.getViewer() );
+
+ this.mainWidget.getViewer().addSelectionChangedListener( new ISelectionChangedListener()
+ {
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ if ( !event.getSelection().isEmpty() )
+ {
+ Object o = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( o instanceof IEntry )
+ {
+ initialEntry = ( IEntry ) o;
+ }
+ }
+ }
+ } );
+
+ if ( this.initialEntry != null )
+ {
+ IEntry entry = this.initialEntry;
+ this.mainWidget.getViewer().reveal( entry );
+ this.mainWidget.getViewer().refresh( entry, true );
+ this.mainWidget.getViewer().setSelection( new StructuredSelection( entry ), true );
+ this.mainWidget.getViewer().setSelection( new StructuredSelection( entry ), true );
+ }
+
+ applyDialogFont( composite );
+
+ this.mainWidget.setFocus();
+
+ return composite;
+
+ }
+
+
+ public IEntry getSelectedEntry()
+ {
+ return this.selectedEntry;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectReferralConnectionDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectReferralConnectionDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectReferralConnectionDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/SelectReferralConnectionDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,214 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.URL;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionActionGroup;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionConfiguration;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionUniversalListener;
+import org.apache.directory.ldapstudio.browser.ui.widgets.connection.ConnectionWidget;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class SelectReferralConnectionDialog extends Dialog
+{
+
+ private String title;
+
+ private URL referralUrl;
+
+ private IConnection selectedConnection;
+
+ private ConnectionConfiguration configuration;
+
+ private ConnectionUniversalListener universalListener;
+
+ private ConnectionActionGroup actionGroup;
+
+ private ConnectionWidget mainWidget;
+
+
+ public SelectReferralConnectionDialog( Shell parentShell, URL referralUrl )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.title = "Select Referral Connection";
+ this.referralUrl = referralUrl;
+ this.selectedConnection = null;
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( title );
+ }
+
+
+ public boolean close()
+ {
+ if ( this.mainWidget != null )
+ {
+ this.configuration.dispose();
+ this.configuration = null;
+ this.actionGroup.deactivateGlobalActionHandlers();
+ this.actionGroup.dispose();
+ this.actionGroup = null;
+ this.universalListener.dispose();
+ this.universalListener = null;
+ this.mainWidget.dispose();
+ this.mainWidget = null;
+ }
+ return super.close();
+ }
+
+
+ protected void okPressed()
+ {
+ super.okPressed();
+ }
+
+
+ protected void cancelPressed()
+ {
+ this.selectedConnection = null;
+ super.cancelPressed();
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridLayout gl = new GridLayout();
+ composite.setLayout( gl );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 2 );
+ composite.setLayoutData( gd );
+
+ BaseWidgetUtils.createWrappedLabeledText( composite, "Please select a connection to handle referral "
+ + referralUrl, 1 );
+
+ // create configuration
+ this.configuration = new ConnectionConfiguration();
+
+ // create main widget
+ this.mainWidget = new ConnectionWidget( this.configuration, null );
+ this.mainWidget.createWidget( composite );
+ this.mainWidget.setInput( BrowserCorePlugin.getDefault().getConnectionManager() );
+
+ // create actions and context menu (and register global actions)
+ this.actionGroup = new ConnectionActionGroup( this.mainWidget, this.configuration );
+ this.actionGroup.fillToolBar( this.mainWidget.getToolBarManager() );
+ this.actionGroup.fillMenu( this.mainWidget.getMenuManager() );
+ this.actionGroup.fillContextMenu( this.mainWidget.getContextMenuManager() );
+ this.actionGroup.activateGlobalActionHandlers();
+
+ // create the listener
+ this.universalListener = new ConnectionUniversalListener( this.mainWidget.getViewer() );
+
+ this.mainWidget.getViewer().addSelectionChangedListener( new ISelectionChangedListener()
+ {
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ if ( !event.getSelection().isEmpty() )
+ {
+ Object o = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( o instanceof IConnection )
+ {
+ selectedConnection = ( IConnection ) o;
+ }
+ }
+ }
+ } );
+
+ this.mainWidget.getViewer().addDoubleClickListener( new IDoubleClickListener()
+ {
+ public void doubleClick( DoubleClickEvent event )
+ {
+ if ( !event.getSelection().isEmpty() )
+ {
+ Object o = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement();
+ if ( o instanceof IConnection )
+ {
+ selectedConnection = ( IConnection ) o;
+ okPressed();
+ }
+ }
+ }
+ } );
+
+ if ( this.referralUrl != null )
+ {
+ IConnection[] connections = BrowserCorePlugin.getDefault().getConnectionManager().getConnections();
+ for ( int i = 0; i < connections.length; i++ )
+ {
+ IConnection connection = connections[i];
+ URL connectionUrl = connection.getUrl();
+ if ( connectionUrl != null && referralUrl.toString().startsWith( connectionUrl.toString() ) )
+ {
+ this.mainWidget.getViewer().reveal( connection );
+ this.mainWidget.getViewer().setSelection( new StructuredSelection( connection ), true );
+ }
+ }
+ }
+
+ applyDialogFont( composite );
+
+ this.mainWidget.setFocus();
+
+ return composite;
+
+ }
+
+
+ public IConnection getReferralConnection()
+ {
+ return this.selectedConnection;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/TextDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/TextDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/TextDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/TextDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,115 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+
+public class TextDialog extends Dialog
+{
+
+ public static final String DIALOG_TITLE = "Text Editor";
+
+ public static final double MAX_WIDTH = 250.0;
+
+ public static final double MAX_HEIGHT = 250.0;
+
+ private String initialValue;
+
+ private String returnValue;
+
+ private Text text;
+
+
+ public TextDialog( Shell parentShell, String initialValue )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.initialValue = initialValue;
+ this.returnValue = null;
+ }
+
+
+ public boolean close()
+ {
+ return super.close();
+ }
+
+
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( DIALOG_TITLE );
+ shell.setImage( BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_TEXTEDITOR ) );
+ }
+
+
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false );
+ }
+
+
+ protected void okPressed()
+ {
+ this.returnValue = this.text.getText();
+ super.okPressed();
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+ // create composite
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ composite.setLayoutData( gd );
+
+ // text widget
+ text = new Text( composite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL );
+ text.setText( this.initialValue );
+ // GridData gd = new GridData(GridData.GRAB_HORIZONTAL |
+ // GridData.HORIZONTAL_ALIGN_FILL);
+ gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 2 );
+ text.setLayoutData( gd );
+
+ applyDialogFont( composite );
+ return composite;
+ }
+
+
+ public String getText()
+ {
+ return this.returnValue;
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,108 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs.preferences;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.schema.BinaryAttribute;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class AttributeDialog extends Dialog
+{
+
+ private BinaryAttribute currentAttribute;
+
+ private String[] attributeTypesAndOids;
+
+ private BinaryAttribute returnAttribute;
+
+ private Combo typeOrOidCombo;
+
+
+ public AttributeDialog( Shell parentShell, BinaryAttribute currentAttribute, String[] attributeNamesAndOids )
+ {
+ super( parentShell );
+ this.currentAttribute = currentAttribute;
+ this.attributeTypesAndOids = attributeNamesAndOids;
+
+ this.returnAttribute = null;
+ }
+
+
+ protected void configureShell( Shell newShell )
+ {
+ super.configureShell( newShell );
+ newShell.setText( "Select Attribute Type or OID" );
+ }
+
+
+ protected void okPressed()
+ {
+ this.returnAttribute = new BinaryAttribute( typeOrOidCombo.getText() );
+ super.okPressed();
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+
+ Composite c = BaseWidgetUtils.createColumnContainer( composite, 2, 1 );
+ BaseWidgetUtils.createLabel( c, "Attribute Type or OID:", 1 );
+ this.typeOrOidCombo = BaseWidgetUtils.createCombo( c, this.attributeTypesAndOids, -1, 1 );
+ if ( this.currentAttribute != null )
+ {
+ this.typeOrOidCombo.setText( currentAttribute.getAttributeNumericOidOrName() );
+ }
+ this.typeOrOidCombo.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ validate();
+ }
+ } );
+
+ return composite;
+ }
+
+
+ private void validate()
+ {
+ super.getButton( IDialogConstants.OK_ID ).setEnabled( !"".equals( this.typeOrOidCombo.getText() ) );
+ }
+
+
+ public BinaryAttribute getAttribute()
+ {
+ return returnAttribute;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeValueProviderDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeValueProviderDialog.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeValueProviderDialog.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributeValueProviderDialog.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,147 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs.preferences;
+
+
+import java.util.Iterator;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.apache.directory.ldapstudio.browser.core.model.schema.AttributeValueProviderRelation;
+import org.apache.directory.ldapstudio.browser.ui.valueproviders.ValueProvider;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class AttributeValueProviderDialog extends Dialog
+{
+
+ private AttributeValueProviderRelation relation;
+
+ private SortedMap class2ValueProviderMap;
+
+ private String[] attributeTypesAndOids;
+
+ private SortedMap vpName2classMap;
+
+ private AttributeValueProviderRelation returnRelation;
+
+ private Combo typeOrOidCombo;
+
+ private Combo valueEditorCombo;
+
+
+ public AttributeValueProviderDialog( Shell parentShell, AttributeValueProviderRelation relation,
+ SortedMap class2ValueProviderMap, String[] attributeTypesAndOids )
+ {
+ super( parentShell );
+ this.relation = relation;
+ this.class2ValueProviderMap = class2ValueProviderMap;
+ this.attributeTypesAndOids = attributeTypesAndOids;
+
+ this.returnRelation = null;
+
+ this.vpName2classMap = new TreeMap();
+ for ( Iterator it = this.class2ValueProviderMap.values().iterator(); it.hasNext(); )
+ {
+ ValueProvider vp = ( ValueProvider ) it.next();
+ vpName2classMap.put( vp.getCellEditorName(), vp.getClass().getName() );
+ }
+ }
+
+
+ protected void configureShell( Shell newShell )
+ {
+ super.configureShell( newShell );
+ newShell.setText( "Attribute Value Editor" );
+ }
+
+
+ protected void okPressed()
+ {
+ this.returnRelation = new AttributeValueProviderRelation( this.typeOrOidCombo.getText(),
+ ( String ) this.vpName2classMap.get( this.valueEditorCombo.getText() ) );
+ super.okPressed();
+ }
+
+
+ protected Control createDialogArea( Composite parent )
+ {
+
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+
+ Composite c = BaseWidgetUtils.createColumnContainer( composite, 2, 1 );
+ BaseWidgetUtils.createLabel( c, "Attribute Type or OID:", 1 );
+ this.typeOrOidCombo = BaseWidgetUtils.createCombo( c, this.attributeTypesAndOids, -1, 1 );
+ if ( this.relation != null && this.relation.getAttributeNumericOidOrType() != null )
+ {
+ this.typeOrOidCombo.setText( this.relation.getAttributeNumericOidOrType() );
+ }
+ this.typeOrOidCombo.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ validate();
+ }
+ } );
+
+ BaseWidgetUtils.createLabel( c, "Value Editor:", 1 );
+ this.valueEditorCombo = BaseWidgetUtils.createReadonlyCombo( c, ( String[] ) vpName2classMap.keySet().toArray(
+ new String[0] ), -1, 1 );
+ if ( this.relation != null && this.relation.getValueProviderClassname() != null
+ && this.class2ValueProviderMap.containsKey( this.relation.getValueProviderClassname() ) )
+ {
+ this.valueEditorCombo.setText( ( ( ValueProvider ) this.class2ValueProviderMap.get( this.relation
+ .getValueProviderClassname() ) ).getCellEditorName() );
+ }
+ this.valueEditorCombo.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ validate();
+ }
+ } );
+
+ return composite;
+ }
+
+
+ private void validate()
+ {
+ super.getButton( IDialogConstants.OK_ID ).setEnabled(
+ !"".equals( this.valueEditorCombo.getText() ) && !"".equals( this.typeOrOidCombo.getText() ) );
+ }
+
+
+ public AttributeValueProviderRelation getRelation()
+ {
+ return returnRelation;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributesPreferencePage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributesPreferencePage.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributesPreferencePage.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/dialogs/preferences/AttributesPreferencePage.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,217 @@
+/*
+ * 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.ldapstudio.browser.ui.dialogs.preferences;
+
+
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.widgets.BaseWidgetUtils;
+import org.eclipse.jface.preference.ColorSelector;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+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.Label;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+
+public class AttributesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
+{
+
+ private final String[] ATTRIBUTE_TYPES = new String[]
+ { "Objectclass attribute:", "Must attributes:", "May attributes:", "Operational attributes:" };
+
+ private final String[] ATTRIBUTE_FONT_CONSTANTS = new String[]
+ { BrowserUIConstants.PREFERENCE_OBJECTCLASS_FONT, BrowserUIConstants.PREFERENCE_MUSTATTRIBUTE_FONT,
+ BrowserUIConstants.PREFERENCE_MAYATTRIBUTE_FONT, BrowserUIConstants.PREFERENCE_OPERATIONALATTRIBUTE_FONT };
+
+ private final String[] ATTRIBUTE_COLOR_CONSTANTS = new String[]
+ { BrowserUIConstants.PREFERENCE_OBJECTCLASS_COLOR, BrowserUIConstants.PREFERENCE_MUSTATTRIBUTE_COLOR,
+ BrowserUIConstants.PREFERENCE_MAYATTRIBUTE_COLOR, BrowserUIConstants.PREFERENCE_OPERATIONALATTRIBUTE_COLOR };
+
+ private Label[] attributeTypeLabels = new Label[ATTRIBUTE_TYPES.length];
+
+ private ColorSelector[] attributeColorSelectors = new ColorSelector[ATTRIBUTE_TYPES.length];
+
+ private Button[] attributeBoldButtons = new Button[ATTRIBUTE_TYPES.length];
+
+ private Button[] attributeItalicButtons = new Button[ATTRIBUTE_TYPES.length];
+
+ private Button showRawValuesButton;
+
+
+ public AttributesPreferencePage()
+ {
+ super( "Attributes" );
+ super.setPreferenceStore( BrowserUIPlugin.getDefault().getPreferenceStore() );
+ super.setDescription( "General settings for attributes:" );
+ }
+
+
+ public void init( IWorkbench workbench )
+ {
+ }
+
+
+ protected Control createContents( Composite parent )
+ {
+
+ Composite composite = new Composite( parent, SWT.NONE );
+ GridLayout layout = new GridLayout( 1, false );
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ layout.marginLeft = 0;
+ layout.marginRight = 0;
+ layout.marginTop = 0;
+ layout.marginBottom = 0;
+ composite.setLayout( layout );
+ composite.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+
+ BaseWidgetUtils.createSpacer( composite, 1 );
+ BaseWidgetUtils.createSpacer( composite, 1 );
+ Group colorsAndFontsGroup = BaseWidgetUtils.createGroup( composite, "Attribute Colors and Fonts", 1 );
+ colorsAndFontsGroup.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ Composite colorsAndFontsComposite = BaseWidgetUtils.createColumnContainer( colorsAndFontsGroup, 4, 1 );
+ for ( int i = 0; i < ATTRIBUTE_TYPES.length; i++ )
+ {
+ final int index = i;
+
+ attributeTypeLabels[i] = BaseWidgetUtils.createLabel( colorsAndFontsComposite, ATTRIBUTE_TYPES[i], 1 );
+ attributeTypeLabels[i].setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ attributeColorSelectors[i] = new ColorSelector( colorsAndFontsComposite );
+ attributeBoldButtons[i] = BaseWidgetUtils.createCheckbox( colorsAndFontsComposite, "Bold", 1 );
+ attributeItalicButtons[i] = BaseWidgetUtils.createCheckbox( colorsAndFontsComposite, "Italic", 1 );
+
+ FontData[] fontDatas = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault()
+ .getPreferenceStore(), ATTRIBUTE_FONT_CONSTANTS[i] );
+ RGB rgb = PreferenceConverter.getColor( BrowserUIPlugin.getDefault().getPreferenceStore(),
+ ATTRIBUTE_COLOR_CONSTANTS[i] );
+ setColorsAndFonts( index, fontDatas, rgb );
+ }
+
+ BaseWidgetUtils.createSpacer( composite, 1 );
+ BaseWidgetUtils.createSpacer( composite, 1 );
+ showRawValuesButton = BaseWidgetUtils.createCheckbox( composite, "Show raw values", 1 );
+ showRawValuesButton.setSelection( getPreferenceStore().getBoolean(
+ BrowserUIConstants.PREFERENCE_SHOW_RAW_VALUES ) );
+
+ applyDialogFont( composite );
+ return composite;
+ }
+
+
+ private void setColorsAndFonts( int index, FontData[] fontDatas, RGB rgb )
+ {
+ boolean bold = isBold( fontDatas );
+ boolean italic = isItalic( fontDatas );
+ attributeColorSelectors[index].setColorValue( rgb );
+ attributeBoldButtons[index].setSelection( bold );
+ attributeItalicButtons[index].setSelection( italic );
+ }
+
+
+ private void setFontData( FontData[] fontDatas, Button boldButton, Button italicButton )
+ {
+ for ( int j = 0; j < fontDatas.length; j++ )
+ {
+ int style = SWT.NORMAL;
+ if ( boldButton.getSelection() )
+ style |= SWT.BOLD;
+ if ( italicButton.getSelection() )
+ style |= SWT.ITALIC;
+ fontDatas[j].setStyle( style );
+ }
+ }
+
+
+ private boolean isBold( FontData[] fontDatas )
+ {
+ boolean bold = false;
+ for ( int j = 0; j < fontDatas.length; j++ )
+ {
+ if ( ( fontDatas[j].getStyle() & SWT.BOLD ) != SWT.NORMAL )
+ bold = true;
+ }
+ return bold;
+ }
+
+
+ private boolean isItalic( FontData[] fontDatas )
+ {
+ boolean italic = false;
+ for ( int j = 0; j < fontDatas.length; j++ )
+ {
+ if ( ( fontDatas[j].getStyle() & SWT.ITALIC ) != SWT.NORMAL )
+ italic = true;
+ }
+ return italic;
+ }
+
+
+ public boolean performOk()
+ {
+
+ for ( int i = 0; i < ATTRIBUTE_TYPES.length; i++ )
+ {
+ FontData[] fontDatas = PreferenceConverter.getFontDataArray( BrowserUIPlugin.getDefault()
+ .getPreferenceStore(), ATTRIBUTE_FONT_CONSTANTS[i] );
+ setFontData( fontDatas, this.attributeBoldButtons[i], this.attributeItalicButtons[i] );
+ RGB rgb = attributeColorSelectors[i].getColorValue();
+ PreferenceConverter.setValue( BrowserUIPlugin.getDefault().getPreferenceStore(),
+ ATTRIBUTE_FONT_CONSTANTS[i], fontDatas );
+ PreferenceConverter.setValue( BrowserUIPlugin.getDefault().getPreferenceStore(),
+ ATTRIBUTE_COLOR_CONSTANTS[i], rgb );
+ }
+
+ getPreferenceStore().setValue( BrowserUIConstants.PREFERENCE_SHOW_RAW_VALUES,
+ this.showRawValuesButton.getSelection() );
+
+ return true;
+ }
+
+
+ protected void performDefaults()
+ {
+
+ for ( int i = 0; i < ATTRIBUTE_TYPES.length; i++ )
+ {
+ FontData[] fontDatas = PreferenceConverter.getDefaultFontDataArray( BrowserUIPlugin.getDefault()
+ .getPreferenceStore(), ATTRIBUTE_FONT_CONSTANTS[i] );
+ RGB rgb = PreferenceConverter.getDefaultColor( BrowserUIPlugin.getDefault().getPreferenceStore(),
+ ATTRIBUTE_COLOR_CONSTANTS[i] );
+ setColorsAndFonts( i, fontDatas, rgb );
+ }
+
+ showRawValuesButton.setSelection( getPreferenceStore().getDefaultBoolean(
+ BrowserUIConstants.PREFERENCE_SHOW_RAW_VALUES ) );
+
+ super.performDefaults();
+ }
+
+}