/*
* 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.ldapbrowser.ui.wizards;
import java.io.File;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener;
import org.apache.directory.studio.ldapbrowser.common.widgets.FileBrowserWidget;
import org.apache.directory.studio.ldapbrowser.common.widgets.search.BrowserConnectionWidget;
import org.apache.directory.studio.ldapbrowser.ui.BrowserUIConstants;
import org.apache.directory.studio.ldapbrowser.ui.BrowserUIPlugin;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
/**
* This class implements the Main Page of the LDIF Import Wizard
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ImportLdifMainWizardPage extends WizardPage
{
/** The continue on error flag key */
public static final String CONTINUE_ON_ERROR_DIALOGSETTING_KEY = ImportLdifMainWizardPage.class.getName()
+ ".continueOnError"; //$NON-NLS-1$
/** The update if entry exists flag key */
public static final String UPDATE_IF_ENTRY_EXISTS_DIALOGSETTING_KEY = ImportLdifMainWizardPage.class.getName()
+ ".updateIfEntryExists"; //$NON-NLS-1$
/** The valid extension. */
private static final String[] EXTENSIONS = new String[]
{ "*.ldif", "*" }; //$NON-NLS-1$ //$NON-NLS-2$
/** The valid log extension. */
private static final String[] LOG_EXTENSIONS = new String[]
{ "*.ldif.log", "*" }; //$NON-NLS-1$ //$NON-NLS-2$
/** The wizard. */
private ImportLdifWizard wizard;
/** The ldif file browser widget. */
private FileBrowserWidget ldifFileBrowserWidget;
/** The browser connection widget. */
private BrowserConnectionWidget browserConnectionWidget;
/** The enable logging button. */
private Button enableLoggingButton;
/** The use default logfile button. */
private Button useDefaultLogfileButton;
/** The use custom logfile button. */
private Button useCustomLogfileButton;
/** The custom logfile name. */
private String customLogfileName;
/** The log file browser widget. */
private FileBrowserWidget logFileBrowserWidget;
/** The overwrite logfile button. */
private Button overwriteLogfileButton;
/** The update if entry exists button. */
private Button updateIfEntryExistsButton;
/** The continue on error button. */
private Button continueOnErrorButton;
/**
* Creates a new instance of ImportLdifMainWizardPage.
*
* @param pageName the page name
* @param wizard the wizard
*/
public ImportLdifMainWizardPage( String pageName, ImportLdifWizard wizard )
{
super( pageName );
setTitle( Messages.getString( "ImportLdifMainWizardPage.LDIFImport" ) ); //$NON-NLS-1$
setDescription( Messages.getString( "ImportLdifMainWizardPage.PleaseSelectConnectionAndLDIF" ) ); //$NON-NLS-1$
setImageDescriptor( BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_IMPORT_LDIF_WIZARD ) );
setPageComplete( false );
this.wizard = wizard;
}
/**
* Validates the page. This method is responsible for displaying errors,
* as well as enabling/disabling the "Finish" button
*/
private void validate()
{
boolean ok = true;
File ldifFile = new File( ldifFileBrowserWidget.getFilename() );
if ( "".equals( ldifFileBrowserWidget.getFilename() ) ) //$NON-NLS-1$
{
setErrorMessage( null );
ok = false;
}
else if ( !ldifFile.isFile() || !ldifFile.exists() )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorSelectedLDIFNotExist" ) ); //$NON-NLS-1$
ok = false;
}
else if ( !ldifFile.canRead() )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorSelectedLDIFNotReadable" ) ); //$NON-NLS-1$
ok = false;
}
else if ( enableLoggingButton.getSelection() )
{
File logFile = new File( logFileBrowserWidget.getFilename() );
File logFileDirectory = logFile.getParentFile();
if ( logFile.equals( ldifFile ) )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorLDIFAndLogEqual" ) ); //$NON-NLS-1$
ok = false;
}
else if ( logFile.isDirectory() )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorSelectedLogFileNotFile" ) ); //$NON-NLS-1$
ok = false;
}
else if ( logFile.exists() && !overwriteLogfileButton.getSelection() )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorSelectedLogFileExist" ) ); //$NON-NLS-1$
ok = false;
}
else if ( logFile.exists() && !logFile.canWrite() )
{
setErrorMessage( Messages.getString( "ImportLdifMainWizardPage.ErrorSelectedLogFileNotWritable" ) ); //$NON-NLS-1$
ok = false;
}
else if ( logFile.getParentFile() == null )
{
setErrorMessage( Messages
.getString( "ImportLdifMainWizardPage.ErrorSelectedLogFileDirectoryNotWritable" ) ); //$NON-NLS-1$
ok = false;
}
else if ( !logFile.exists() && ( logFileDirectory == null || !logFileDirectory.canWrite() ) )
{
setErrorMessage( Messages
.getString( "ImportLdifMainWizardPage.ErrorSelectedLogFileDirectoryNotWritable" ) ); //$NON-NLS-1$
ok = false;
}
}
if ( wizard.getImportConnection() == null )
{
setErrorMessage( Messages
.getString( "ImportLdifMainWizardPage.ErrorNoConnectionSelected" ) ); //$NON-NLS-1$
ok = false;
}
if ( ok )
{
setErrorMessage( null );
}
setPageComplete( ok );
getContainer().updateButtons();
}
/**
* {@inheritDoc}
*/
public void createControl( Composite parent )
{
Composite composite = BaseWidgetUtils.createColumnContainer( parent, 3, 1 );
// LDIF file
BaseWidgetUtils.createLabel( composite, Messages.getString( "ImportLdifMainWizardPage.LDIFFile" ), 1 ); //$NON-NLS-1$
ldifFileBrowserWidget = new FileBrowserWidget(
Messages.getString( "ImportLdifMainWizardPage.SelectLDIFFile" ), EXTENSIONS, FileBrowserWidget.TYPE_OPEN ); //$NON-NLS-1$
ldifFileBrowserWidget.createWidget( composite );
ldifFileBrowserWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
wizard.setLdifFilename( ldifFileBrowserWidget.getFilename() );
if ( useDefaultLogfileButton.getSelection() )
{
logFileBrowserWidget.setFilename( ldifFileBrowserWidget.getFilename() + ".log" ); //$NON-NLS-1$
}
validate();
}
} );
// Connection
BaseWidgetUtils.createLabel( composite, Messages.getString( "ImportLdifMainWizardPage.ImportTo" ), 1 ); //$NON-NLS-1$
browserConnectionWidget = new BrowserConnectionWidget( wizard.getImportConnection() );
browserConnectionWidget.createWidget( composite );
browserConnectionWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
wizard.setImportConnection( browserConnectionWidget.getBrowserConnection() );
validate();
}
} );
// Logging
Composite loggingOuterComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 3 );
Group loggingGroup = BaseWidgetUtils.createGroup( loggingOuterComposite, Messages
.getString( "ImportLdifMainWizardPage.Logging" ), 1 ); //$NON-NLS-1$
Composite loggingContainer = BaseWidgetUtils.createColumnContainer( loggingGroup, 3, 1 );
enableLoggingButton = BaseWidgetUtils.createCheckbox( loggingContainer, Messages
.getString( "ImportLdifMainWizardPage.EnableLogging" ), 3 ); //$NON-NLS-1$
enableLoggingButton.setSelection( true );
wizard.setEnableLogging( enableLoggingButton.getSelection() );
enableLoggingButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
wizard.setEnableLogging( enableLoggingButton.getSelection() );
useDefaultLogfileButton.setEnabled( enableLoggingButton.getSelection() );
useCustomLogfileButton.setEnabled( enableLoggingButton.getSelection() );
logFileBrowserWidget.setEnabled( enableLoggingButton.getSelection()
&& useCustomLogfileButton.getSelection() );
overwriteLogfileButton.setEnabled( enableLoggingButton.getSelection() );
validate();
}
} );
BaseWidgetUtils.createRadioIndent( loggingContainer, 1 );
useDefaultLogfileButton = BaseWidgetUtils.createRadiobutton( loggingContainer, Messages
.getString( "ImportLdifMainWizardPage.UseDefaultLogFile" ), 2 ); //$NON-NLS-1$
useDefaultLogfileButton.setSelection( true );
useDefaultLogfileButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
String temp = customLogfileName;
logFileBrowserWidget.setFilename( ldifFileBrowserWidget.getFilename() + ".log" ); //$NON-NLS-1$
logFileBrowserWidget.setEnabled( false );
customLogfileName = temp;
validate();
}
} );
BaseWidgetUtils.createRadioIndent( loggingContainer, 1 );
useCustomLogfileButton = BaseWidgetUtils.createRadiobutton( loggingContainer, Messages
.getString( "ImportLdifMainWizardPage.UseCustomLogFile" ), 2 ); //$NON-NLS-1$
useCustomLogfileButton.setSelection( false );
useCustomLogfileButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
logFileBrowserWidget.setFilename( customLogfileName != null ? customLogfileName : "" ); //$NON-NLS-1$
logFileBrowserWidget.setEnabled( true );
validate();
}
} );
BaseWidgetUtils.createRadioIndent( loggingContainer, 1 );
logFileBrowserWidget = new FileBrowserWidget(
Messages.getString( "ImportLdifMainWizardPage.SelectLogFile" ), LOG_EXTENSIONS, FileBrowserWidget.TYPE_SAVE ); //$NON-NLS-1$
logFileBrowserWidget.createWidget( loggingContainer );
logFileBrowserWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
customLogfileName = logFileBrowserWidget.getFilename();
wizard.setLogFilename( customLogfileName );
validate();
}
} );
logFileBrowserWidget.setEnabled( false );
BaseWidgetUtils.createRadioIndent( loggingContainer, 1 );
overwriteLogfileButton = BaseWidgetUtils.createCheckbox( loggingContainer, Messages
.getString( "ImportLdifMainWizardPage.OverwriteExistingLogFile" ), 2 ); //$NON-NLS-1$
overwriteLogfileButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
validate();
}
} );
// Options
Composite optionsOuterComposite = BaseWidgetUtils.createColumnContainer( composite, 1, 3 );
Group optionsGroup = BaseWidgetUtils.createGroup( optionsOuterComposite, Messages
.getString( "ImportLdifMainWizardPage.Options" ), 1 ); //$NON-NLS-1$
Composite optionsContainer = BaseWidgetUtils.createColumnContainer( optionsGroup, 3, 1 );
updateIfEntryExistsButton = BaseWidgetUtils.createCheckbox( optionsContainer, Messages
.getString( "ImportLdifMainWizardPage.UpdateExistingEntires" ), //$NON-NLS-1$
3 );
updateIfEntryExistsButton
.setToolTipText( Messages.getString( "ImportLdifMainWizardPage.OptionsAppliesForLdif" ) ); //$NON-NLS-1$
if ( BrowserUIPlugin.getDefault().getDialogSettings().get( UPDATE_IF_ENTRY_EXISTS_DIALOGSETTING_KEY ) == null )
{
BrowserUIPlugin.getDefault().getDialogSettings().put( UPDATE_IF_ENTRY_EXISTS_DIALOGSETTING_KEY, false );
}
updateIfEntryExistsButton.setSelection( BrowserUIPlugin.getDefault().getDialogSettings().getBoolean(
UPDATE_IF_ENTRY_EXISTS_DIALOGSETTING_KEY ) );
wizard.setUpdateIfEntryExists( updateIfEntryExistsButton.getSelection() );
updateIfEntryExistsButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
wizard.setUpdateIfEntryExists( updateIfEntryExistsButton.getSelection() );
validate();
}
} );
continueOnErrorButton = BaseWidgetUtils.createCheckbox( optionsContainer, Messages
.getString( "ImportLdifMainWizardPage.ContinueOnError" ), 3 ); //$NON-NLS-1$
if ( BrowserUIPlugin.getDefault().getDialogSettings().get( CONTINUE_ON_ERROR_DIALOGSETTING_KEY ) == null )
{
BrowserUIPlugin.getDefault().getDialogSettings().put( CONTINUE_ON_ERROR_DIALOGSETTING_KEY, false );
}
continueOnErrorButton.setSelection( BrowserUIPlugin.getDefault().getDialogSettings().getBoolean(
CONTINUE_ON_ERROR_DIALOGSETTING_KEY ) );
wizard.setContinueOnError( continueOnErrorButton.getSelection() );
continueOnErrorButton.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent event )
{
wizard.setContinueOnError( continueOnErrorButton.getSelection() );
validate();
}
} );
setControl( composite );
}
/**
* Saves the dialog settings.
*/
public void saveDialogSettings()
{
ldifFileBrowserWidget.saveDialogSettings();
BrowserUIPlugin.getDefault().getDialogSettings().put( UPDATE_IF_ENTRY_EXISTS_DIALOGSETTING_KEY,
updateIfEntryExistsButton.getSelection() );
BrowserUIPlugin.getDefault().getDialogSettings().put( CONTINUE_ON_ERROR_DIALOGSETTING_KEY,
continueOnErrorButton.getSelection() );
}
}