/*
* 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.databases;
import java.util.ArrayList;
import java.util.List;
import org.apache.directory.api.ldap.model.name.Dn;
import org.apache.directory.api.util.Strings;
import org.apache.directory.studio.common.ui.CommonUIUtils;
import org.apache.directory.studio.common.ui.widgets.AbstractWidget;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.common.ui.widgets.TableWidget;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener;
import org.apache.directory.studio.common.ui.wrappers.StringValueWrapper;
import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.apache.directory.studio.openldap.common.ui.model.DatabaseTypeEnum;
import org.apache.directory.studio.openldap.common.ui.model.RequireConditionEnum;
import org.apache.directory.studio.openldap.common.ui.model.RestrictOperationEnum;
import org.apache.directory.studio.openldap.common.ui.widgets.BooleanWithDefaultWidget;
import org.apache.directory.studio.openldap.common.ui.widgets.EntryWidget;
import org.apache.directory.studio.openldap.common.ui.widgets.PasswordWidget;
import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPlugin;
import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPluginConstants;
import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPluginUtils;
import org.apache.directory.studio.openldap.config.editor.dialogs.OverlayDialog;
import org.apache.directory.studio.openldap.config.editor.dialogs.ReplicationConsumerDialog;
import org.apache.directory.studio.openldap.config.editor.dialogs.SizeLimitDialog;
import org.apache.directory.studio.openldap.config.editor.wrappers.DatabaseWrapper;
import org.apache.directory.studio.openldap.config.editor.wrappers.DnDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.DnWrapper;
import org.apache.directory.studio.openldap.config.editor.wrappers.LimitsDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.LimitsWrapper;
import org.apache.directory.studio.openldap.config.editor.wrappers.RequireConditionDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.RestrictOperationDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.SsfDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.SsfWrapper;
import org.apache.directory.studio.openldap.config.editor.wrappers.TimeLimitDecorator;
import org.apache.directory.studio.openldap.config.editor.wrappers.TimeLimitWrapper;
import org.apache.directory.studio.openldap.config.model.OlcOverlayConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcBdbConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcDatabaseConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcHdbConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcLdifConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcMdbConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcNullConfig;
import org.apache.directory.studio.openldap.config.model.database.OlcRelayConfig;
import org.apache.directory.studio.openldap.syncrepl.Provider;
import org.apache.directory.studio.openldap.syncrepl.SyncRepl;
import org.apache.directory.studio.openldap.syncrepl.SyncReplParser;
import org.apache.directory.studio.openldap.syncrepl.SyncReplParserException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.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.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IDetailsPage;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
/**
* This class represents the Details Page of the Server Configuration Editor for the Database type.
* We have 6 sections to manage :
* <ul>
* <li>general :</li>
* <ul>
* <li>olcSuffix(DN, SV/MV)</li>
* <li>olcRootDN(DN, SV)</li>
* <li>olcRootPw(String, SV)</li>
* <li></li>
* </ul>
* <li>limits :</li>
* <ul>
* <li>olcSizeLimit(String, SV)</li>
* <li>olcTimeLimit(String, MV)</li>
* <li>olcLimits(String, MV, Ordered)</li>
* <li>olcMaxDerefDepth(Integer, SV)</li>
* </ul>
* <li>security :</li>
* <ul>
* <li>olcHidden(Boolean)</li>
* <li>olcReadOnly(Boolean)</li>
* <li>olcRequires(String, MV)</li>
* <li>olcRestrict(String, MV)</li>
* <li>olcSecurity(String, MV)</li>
* </ul>
* <li>access</li>
* <ul>
* <li>olcAccess(String, MV, Ordered)</li>
* <li>olcAddContentAcl(Boolean)</li>
* </ul>
* <li>replication :</li>
* <ul>
* <li>olcMirrorMode(Boolean)</li>
* <li>olcSyncrepl(String, MV, Ordered)</li>
* <li>olcSyncUseSubentry(Boolean)</li>
* <li>olcUpdateDN(DN, SV)</li>
* <li>olcUpdateRef(String, MV)</li>
* <li>olcReplica(String, MV, Ordered)</li>
* <li>olcReplicaArgsFile(String, SV)</li>
* <li>olcReplicaPidFile(String, SV)</li>
* <li>olcReplicationInterval(Integer, SV)</li>
* <li>olcReplogFile(String, SV)</li>
* </ul>
* <li>options :</li>
* <ul>
* <li>olcLastMod(Boolean)</li>
* <li>olcMonitoring(Boolean)</li>
* <li>olcPlugin(String, MV)</li>
* <li>olcExtraArgs(String, MV)</li>
* <li>olcSchemaDN(DN, SV)</li>
* <li>olcSubordinate(String, SV)</li>
* </ul>
* </ul>
*
* <pre>
* +--------------------------------------------------------+
* | .----------------------------------------------------. |
* | |V XXXX Database general | |
* | +----------------------------------------------------+ |
* | | Root DN : [ ] none [///////////////////////] | |
* | | Root password : [ ] none [///////////////////////] | |
* | | Suffix : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* | |
* | .----------------------------------------------------. |
* | |V XXXX Database limits | |
* | +----------------------------------------------------+ |
* | | Size limit : [//////////] (Edit...) | |
* | | Max Deref Depth : [///] | |
* | | Timelimit : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | | Limits : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | | | -------- | |
* | | | | (Up...) | |
* | | | | (Down...) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* | |
* | .----------------------------------------------------. |
* | |V XXXX Database security | |
* | +----------------------------------------------------+ |
* | | Hidden : [ ] Read Only : [ ] | |
* | | Requires : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Delete) | |
* | | | | | |
* | | +------------------------------------+ | |
* | | Restrict : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Delete) | |
* | | | | | |
* | | +------------------------------------+ | |
* | | Security Strength Factors : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* | |
* | .----------------------------------------------------. |
* | |V XXXX Database access | |
* | +----------------------------------------------------+ |
* | | Add content ACL : [ ] | |
* | | ACLs : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | | | -------- | |
* | | | | (Up...) | |
* | | | | (Down...) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* | |
* | .----------------------------------------------------. |
* | |V XXXX Database replication | |
* | +----------------------------------------------------+ |
* | | MirrorMode : [ ] Use Subentry : [ ] | |
* | | Replication Interval : [///] | |
* | | Replication Args[fileo:e[////////////////////////] | |
* | | Replication PID file : [////////////////////////] | |
* | | Replication Log file : [////////////////////////] | |
* | | Update DN : [-------------------------->] (Browse) | |
* | | Update References : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | | Replicas : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | | | -------- | |
* | | | | (Up...) | |
* | | | | (Down...) | |
* | | +------------------------------------+ | |
* | | Syncrepls : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | | | -------- | |
* | | | | (Up...) | |
* | | | | (Down...) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* | |
* | .----------------------------------------------------. |
* | |V XXXX Database options | |
* | +----------------------------------------------------+ |
* | | Last Modification : [ ] Monitoring : [ ] | |
* | | Schema DN : [-------------------------->] (Browse) | |
* | | Subordinate : [//////////////////////////////////] | |
* | | Plugins : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | | Extras Arguments : | |
* | | +------------------------------------+ | |
* | | | | (Add...) | |
* | | | | (Edit...) | |
* | | | | (Delete) | |
* | | +------------------------------------+ | |
* | +----------------------------------------------------+ |
* +--------------------------------------------------------+
* </pre>
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class DatabasesDetailsPage implements IDetailsPage
{
/** The frontend database type array */
private static DatabaseTypeEnum[] FRONTEND_DATABASE_TYPES = new DatabaseTypeEnum[]
{
DatabaseTypeEnum.FRONTEND
};
/** The frontend database type array */
private static DatabaseTypeEnum[] CONFIG_DATABASE_TYPES = new DatabaseTypeEnum[]
{
DatabaseTypeEnum.CONFIG
};
/** The class instance */
private DatabasesDetailsPage instance;
/** The associated Master Details Block */
private DatabasesMasterDetailsBlock masterDetailsBlock;
/** The database wrapper */
private DatabaseWrapper databaseWrapper;
/** The database specific details block */
private DatabaseSpecificDetailsBlock databaseSpecificDetailsBlock;
/** The browser connection */
private IBrowserConnection browserConnection;
/** The dirty flag */
private boolean dirty = false;
// UI widgets
private Composite parentComposite;
private FormToolkit toolkit;
//private ComboViewer databaseTypeComboViewer;
// UI General sesstings widgets
/** The olcSuffixDN attribute */
private TableWidget<DnWrapper> suffixDnTableWidget;
/** The olcRootDN attribute */
private EntryWidget rootDnEntryWidget;
/** The olcRootPW attribute */
private PasswordWidget rootPasswordWidget;
// UI limits settings widgets
/** The olcSizeLimit */
private Text sizeLimitText;
/** The SizeLimit edit Button */
private Button sizeLimitEditButton;
/** The olcMaxDerefDepth parameter */
private Text maxDerefDepthText;
/** The olcTimeLimit Table */
private TableWidget<TimeLimitWrapper> timeLimitTableWidget;
/** The olcLimits Table */
private TableWidget<LimitsWrapper> limitsTableWidget;
/** The olcSchemaDN attribute */
private EntryWidget schemaDnEntryWidget;
// The Security UI Widgets
/** The olcReadOnly attribute */
private Button readOnlyButton;
/** The olcHidden attribute */
private Button hiddenButton;
/** The olcRequires parameter */
private TableWidget<RequireConditionEnum> requireConditionTableWidget;
/** The olcRestrict parameter */
private TableWidget<RestrictOperationEnum> restrictOperationTableWidget;
/** The olcSecurity table widget */
private TableWidget<SsfWrapper> securityTableWidget;
// The Access UI Widgets
/** The olcAddContentAcl Button */
private Button addContentAclCheckbox;
/** The olcAcess Table */
private TableWidget<StringValueWrapper> aclsTableWidget;
/** The associated overlays */
private TableViewer overlaysTableViewer;
private Button addOverlayButton;
private Button editOverlayButton;
private Button deleteOverlayButton;
/** The specific configuration for each type of database */
private Section specificSettingsSection;
private Composite specificSettingsSectionComposite;
private Composite databaseSpecificDetailsComposite;
/** The olcMirrorMode flag */
private BooleanWithDefaultWidget mirrorModeBooleanWithDefaultWidget;
/** The olcDisabled flag (only available in OpenDLAP 2.4.36) */
private BooleanWithDefaultWidget disabledBooleanWithDefaultWidget;
/** The olcLastMod flag */
private BooleanWithDefaultWidget lastModBooleanWithDefaultWidget;
/** The olMonitoring flag */
private BooleanWithDefaultWidget monitoringBooleanWithDefaultWidget;
/** The Syncrepl consumer part */
private TableViewer replicationConsumersTableViewer;
private Button addReplicationConsumerButton;
private Button editReplicationConsumerButton;
private Button deleteReplicationConsumerButton;
/**
* The olcSuffixDn listener
*
private WidgetModifyListener suffixDnTableWidgetListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> suffixDns = new ArrayList<String>();
for ( DnWrapper dnWrapper : suffixDnTableWidget.getElements() )
{
suffixDns.add( dnWrapper.toString() );
}
getConfiguration().getGlobal().setOlcRequires( requires );
}
};
/**
* The listener for the sizeLimit Text
*/
private SelectionListener sizeLimitEditSelectionListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
SizeLimitDialog dialog = new SizeLimitDialog( sizeLimitText.getShell(), sizeLimitText.getText() );
if ( dialog.open() == OverlayDialog.OK )
{
String newSizeLimitStr = dialog.getNewLimit();
if ( newSizeLimitStr != null )
{
sizeLimitText.setText( newSizeLimitStr );
}
}
}
};
// Listeners
/**
* A listener for changes on the Overlay table
*/
private ISelectionChangedListener overlaysTableViewerSelectionChangedListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
updateOverlaysTableButtonsState();
}
};
/**
* A listener for selections on the Overlay table
*/
private IDoubleClickListener overlaysTableViewerDoubleClickListener = new IDoubleClickListener()
{
public void doubleClick( DoubleClickEvent event )
{
editOverlayButtonAction();
}
};
/**
* A listener for the Overlay table Add button
*/
private SelectionListener addOverlayButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
addOverlayButtonAction();
}
};
/**
* A listener for the Overlay table Edit button
*/
private SelectionListener editOverlayButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
editOverlayButtonAction();
}
};
/**
* A listener for the Overlay table Delete button
*/
private SelectionListener deleteOverlayButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
deleteOverlayButtonAction();
}
};
/**
* A listener for changes on the Replication Consumers table
*/
private ISelectionChangedListener replicationConsumersTableViewerSelectionChangedListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
updateReplicationConsumersTableButtonsState();
}
};
/**
* A listener for selections on the Replication Consumers table
*/
private IDoubleClickListener replicationConsumersTableViewerDoubleClickListener = new IDoubleClickListener()
{
public void doubleClick( DoubleClickEvent event )
{
editReplicationConsumerButtonAction();
}
};
/**
* A listener for the Replication Consumers table Add button
*/
private SelectionListener addReplicationConsumerButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
addReplicationConsumerButtonAction();
}
};
/**
* A listener for the Replication Consumers table Edit button
*/
private SelectionListener editReplicationConsumerButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
editReplicationConsumerButtonAction();
}
};
/**
* A listener for the Replication Consumers table Delete button
*/
private SelectionListener deleteReplicationConsumerButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
deleteReplicationConsumerButtonAction();
}
};
/**
* The listener that manage the specific database parameters
*
private ISelectionChangedListener databaseTypeComboViewerSelectionChangedListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
DatabaseTypeEnum type = ( DatabaseTypeEnum ) ( ( StructuredSelection ) databaseTypeComboViewer
.getSelection() )
.getFirstElement();
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
OlcDatabaseConfig database = databaseWrapper.getDatabase();
switch ( type )
{
case BDB:
OlcBdbConfig newBdbDatabase = new OlcBdbConfig();
copyDatabaseProperties( database, newBdbDatabase );
databaseWrapper.setDatabase( newBdbDatabase );
databaseSpecificDetailsBlock = new BerkeleyDbDatabaseSpecificDetailsBlock<OlcBdbConfig>(
instance, newBdbDatabase, browserConnection );
break;
case HDB:
OlcHdbConfig newHdbDatabase = new OlcHdbConfig();
copyDatabaseProperties( database, newHdbDatabase );
databaseWrapper.setDatabase( newHdbDatabase );
databaseSpecificDetailsBlock = new BerkeleyDbDatabaseSpecificDetailsBlock<OlcHdbConfig>(
instance, newHdbDatabase, browserConnection );
break;
case MDB:
// The MDB database
OlcMdbConfig newMdbDatabase = new OlcMdbConfig();
copyDatabaseProperties( database, newMdbDatabase );
databaseWrapper.setDatabase( newMdbDatabase );
databaseSpecificDetailsBlock = new MdbDatabaseSpecificDetailsBlock( instance, newMdbDatabase,
browserConnection );
break;
case LDIF:
OlcLdifConfig newLdifDatabase = new OlcLdifConfig();
copyDatabaseProperties( database, newLdifDatabase );
databaseWrapper.setDatabase( newLdifDatabase );
databaseSpecificDetailsBlock = new LdifDatabaseSpecificDetailsBlock( instance,
newLdifDatabase );
break;
// case LDAP:
// OlcLDAPConfig newLdapDatabase = new OlcLDAPConfig();
// copyDatabaseProperties( database, newLdapDatabase );
// databaseWrapper.setDatabase( newLdapDatabase );
// // databaseSpecificDetailsBlock = new LdapDatabaseSpecificDetailsBlock( newLdapDatabase ); // TODO
// break;
case NULL:
OlcNullConfig newNullDatabase = new OlcNullConfig();
copyDatabaseProperties( database, newNullDatabase );
databaseWrapper.setDatabase( newNullDatabase );
databaseSpecificDetailsBlock = new NullDatabaseSpecificDetailsBlock( instance,
newNullDatabase );
break;
case RELAY:
OlcRelayConfig newRelayDatabase = new OlcRelayConfig();
copyDatabaseProperties( database, newRelayDatabase );
databaseWrapper.setDatabase( newRelayDatabase );
databaseSpecificDetailsBlock = new RelayDatabaseSpecificDetailsBlock( instance,
newRelayDatabase, browserConnection );
break;
case NONE:
OlcDatabaseConfig newNoneDatabase = new OlcDatabaseConfig();
copyDatabaseProperties( database, newNoneDatabase );
databaseWrapper.setDatabase( newNoneDatabase );
databaseSpecificDetailsBlock = null;
break;
default:
break;
}
updateDatabaseSpecificSettingsSection();
setEditorDirty();
}
}
};
/**
* The modify listener which set the editor dirty
**/
private WidgetModifyListener dirtyWidgetModifyListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
setEditorDirty();
}
};
/**
* The modify listener which set the editor dirty
**/
private SelectionListener dirtySelectionListener = new SelectionListener()
{
@Override
public void widgetSelected( SelectionEvent e )
{
setEditorDirty();
}
@Override
public void widgetDefaultSelected( SelectionEvent e )
{
// TODO Auto-generated method stub
}
};
/**
* A modify listener for text zones when they have been modified
*/
protected ModifyListener dirtyModifyListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
setEditorDirty();
}
};
/**
* The olcHidden listener
*/
private SelectionListener hiddenButtonSelectionListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
setEditorDirty();
}
};
/**
* The olcReadOnly listener
*/
private SelectionListener readOnlyButtonSelectionListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
setEditorDirty();
}
};
/**
* The olcRequires listener
*/
private WidgetModifyListener requireConditionListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> requires = new ArrayList<String>();
for ( RequireConditionEnum requireCondition : requireConditionTableWidget.getElements() )
{
requires.add( requireCondition.getName() );
}
//getConfiguration().getGlobal().setOlcRequires( requires );
}
};
/**
* The olcRestrict listener
*/
private WidgetModifyListener restrictOperationListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> restricts = new ArrayList<String>();
for ( RestrictOperationEnum restrictOperation : restrictOperationTableWidget.getElements() )
{
restricts.add( restrictOperation.getName() );
}
//getConfiguration().getGlobal().setOlcRestrict( restricts );
}
};
/**
* The olcSecurity listener
*/
private WidgetModifyListener securityListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> ssfWrappers = new ArrayList<String>();
for ( SsfWrapper ssfWrapper : securityTableWidget.getElements() )
{
ssfWrappers.add( ssfWrapper.toString() );
}
//getConfiguration().getGlobal().setOlcSecurity( ssfWrappers );
}
};
/**
* Creates a new instance of PartitionDetailsPage.
*
* @param pmdb
* the associated Master Details Block
*/
public DatabasesDetailsPage( DatabasesMasterDetailsBlock pmdb )
{
instance = this;
masterDetailsBlock = pmdb;
// Getting the browser connection associated with the connection in the configuration
browserConnection = BrowserCorePlugin.getDefault().getConnectionManager()
.getBrowserConnection( masterDetailsBlock.getPage().getConfiguration().getConnection() );
}
/**
* Creates the Database general configuration panel. We have 8 sections :
* <ul>
* <li>General</li>
* <li>Limits</li>
* <li>Security</li>
* <li>Access</li>
* <li>Overlays</li>
* <li>Replication</li>
* <li>Options</li>
* <li>Specific</li>
* </ul>
* {@inheritDoc}
*/
public void createContents( Composite parent )
{
parentComposite = parent;
parent.setLayout( new GridLayout() );
createGeneralSettingsSection( parent, toolkit );
createLimitsSettingsSection( parent, toolkit );
createSecuritySettingsSection( parent, toolkit );
createAccessSettingsSection( parent, toolkit );
createOverlaySettingsSection( parent, toolkit );
createReplicationConsumersSettingsSection( parent, toolkit );
//createOptionsSettingsSection( parent, toolkit );
createDatabaseSpecificSettingsSection( parent, toolkit );
}
/**
* Creates the General Settings Section. This will expose the following attributes :
* <ul>
* <li>olcRootDN</li>
* <li>olcRootPW</li>
* <li>olcSuffix</li>
* </ul>
*
* <pre>
* .----------------------------------------------------.
* |V XXXX Database general |
* +----------------------------------------------------+
* | Root DN : [ ] none [///////////////////////] |
* | Root password : [ ] none [///////////////////////] |
* | Suffix : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Edit...) |
* | | | (Delete) |
* | +------------------------------------+ |
* +----------------------------------------------------+
* </pre>
*
* @param parent the parent composite
* @param toolkit the toolkit to use
*/
private void createGeneralSettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section section = toolkit.createSection( parent, Section.TWISTIE | Section.EXPANDED | Section.TITLE_BAR );
section.setText( Messages.getString( "OpenLDAPMasterDetail.GeneralSettings" ) );
section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite composite = toolkit.createComposite( section );
toolkit.paintBordersFor( composite );
GridLayout gl = new GridLayout( 2, false );
gl.marginRight = 18;
composite.setLayout( gl );
section.setClient( composite );
// Root DN
toolkit.createLabel( composite, "Root DN:" );
rootDnEntryWidget = new EntryWidget( browserConnection, null, true );
rootDnEntryWidget.createWidget( composite, toolkit );
rootDnEntryWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration rootDnTextDecoration = new ControlDecoration( rootDnEntryWidget.getControl(), SWT.CENTER
| SWT.RIGHT );
rootDnTextDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
rootDnTextDecoration.setMarginWidth( 4 );
rootDnTextDecoration
.setDescriptionText( "The DN that is not subject to access control or administrative limit restrictions for operations on this database." );
// Root Password
Label rootPasswordLabel = toolkit.createLabel( composite, "Root Password:" );
rootPasswordLabel.setLayoutData( new GridData( SWT.NONE, SWT.TOP, false, false ) );
rootPasswordWidget = new PasswordWidget( true );
rootPasswordWidget.createWidget( composite, toolkit );
rootPasswordWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration rootPasswordTextDecoration = new ControlDecoration( rootPasswordWidget.getControl(),
SWT.TOP | SWT.RIGHT );
rootPasswordTextDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
rootPasswordTextDecoration.setMarginWidth( 4 );
rootPasswordTextDecoration
.setDescriptionText( "The password for the the Root DN." );
// Database Type
/*
toolkit.createLabel( composite, "Database Type:" );
Combo databaseTypeCombo = new Combo( composite, SWT.READ_ONLY | SWT.SINGLE );
databaseTypeCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
databaseTypeComboViewer = new ComboViewer( databaseTypeCombo );
databaseTypeComboViewer.setContentProvider( new ArrayContentProvider() );
databaseTypeComboViewer.setLabelProvider( new LabelProvider()
{
public String getText( Object element )
{
if ( element instanceof DatabaseTypeEnum )
{
DatabaseTypeEnum databaseType = ( DatabaseTypeEnum ) element;
return databaseType.getName();
}
return super.getText( element );
}
} );
*/
// Suffix DN. We may have more than one
toolkit.createLabel( composite, "Suffix:" );
suffixDnTableWidget = new TableWidget<DnWrapper>( new DnDecorator( composite.getShell() ) );
suffixDnTableWidget.createWidgetWithEdit( composite, toolkit );
suffixDnTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
//addModifyListener( suffixDnTableWidget, suffixTableViewerListener );
ControlDecoration suffixTextDecoration = new ControlDecoration( suffixDnTableWidget.getControl(), SWT.CENTER
| SWT.RIGHT );
suffixTextDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
suffixTextDecoration.setMarginWidth( 4 );
suffixTextDecoration
.setDescriptionText( "The DN suffix of queries that will be passed to this backend database." );
/*
// Schema DN
toolkit.createLabel( composite, "Schema DN:" );
schemaDnEntryWidget = new EntryWidget( browserConnection, null, true );
schemaDnEntryWidget.createWidget( composite, toolkit );
schemaDnEntryWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration schemaDnTextDecoration = new ControlDecoration( schemaDnEntryWidget.getControl(), SWT.CENTER
| SWT.RIGHT );
schemaDnTextDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
schemaDnTextDecoration.setMarginWidth( 4 );
schemaDnTextDecoration.setDescriptionText(
"Specify the distinguished name for the subschema subentry that controls the entries on this server" );
// mirrorMode
toolkit.createLabel( composite, "Mirror Mode:" );
mirrorModeBooleanWithDefaultWidget = new BooleanWithDefaultWidget();
mirrorModeBooleanWithDefaultWidget.create( composite, toolkit );
mirrorModeBooleanWithDefaultWidget.setValue( false );
mirrorModeBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration mirrorModeCheckboxDecoration = new ControlDecoration(
mirrorModeBooleanWithDefaultWidget.getControl(), SWT.CENTER | SWT.RIGHT );
mirrorModeCheckboxDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
mirrorModeCheckboxDecoration.setMarginWidth( 4 );
mirrorModeCheckboxDecoration
.setDescriptionText( "Sets the database in MirrorMode. This is only useful in a Multi-Master configuration" );
// disabled (only in OpenLDAP 2.4.36)
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
toolkit.createLabel( composite, "Disabled:" );
disabledBooleanWithDefaultWidget = new BooleanWithDefaultWidget();
disabledBooleanWithDefaultWidget.create( composite, toolkit );
disabledBooleanWithDefaultWidget.setValue( false );
disabledBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration disabledCheckboxDecoration = new ControlDecoration(
disabledBooleanWithDefaultWidget.getControl(), SWT.CENTER | SWT.RIGHT );
disabledCheckboxDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
disabledCheckboxDecoration.setMarginWidth( 4 );
disabledCheckboxDecoration.setDescriptionText( "Disable this Database" );
}
// The olcLastMod parameter : Controls whether slapd will automatically maintain the
// modifiersName, modifyTimestamp, creatorsName, and createTimestamp attributes for entries
toolkit.createLabel( composite, "Last Modifier:" );
lastModBooleanWithDefaultWidget = new BooleanWithDefaultWidget();
lastModBooleanWithDefaultWidget.create( composite, toolkit );
lastModBooleanWithDefaultWidget.setValue( false );
lastModBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration lastModCheckboxDecoration = new ControlDecoration(
lastModBooleanWithDefaultWidget.getControl(), SWT.CENTER | SWT.RIGHT );
lastModCheckboxDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
lastModCheckboxDecoration.setMarginWidth( 4 );
lastModCheckboxDecoration.setDescriptionText( "Controls whether slapd will automatically maintain the modifiersName, modifyTimestamp, creatorsName, and createTimestamp attributes for entries" );
// The olcMonitoring parameter
toolkit.createLabel( composite, "Monitoring:" );
monitoringBooleanWithDefaultWidget = new BooleanWithDefaultWidget();
monitoringBooleanWithDefaultWidget.create( composite, toolkit );
monitoringBooleanWithDefaultWidget.setValue( false );
monitoringBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
ControlDecoration monitoringCheckboxDecoration = new ControlDecoration(
monitoringBooleanWithDefaultWidget.getControl(), SWT.CENTER | SWT.RIGHT );
monitoringCheckboxDecoration.setImage( OpenLdapConfigurationPlugin.getDefault().getImageDescriptor(
OpenLdapConfigurationPluginConstants.IMG_INFORMATION ).createImage() );
monitoringCheckboxDecoration.setMarginWidth( 4 );
monitoringCheckboxDecoration.setDescriptionText( "Controls whether monitoring is enabled for this database" );
*/
}
/**
* Creates the Limits Settings Section. This will expose the following attributes :
* <ul>
* <li>olcSizeLimit(String, SV)</li>
* <li>olcTimeLimit(String, MV)</li>
* <li>olcLimits(String, MV, Ordered)</li>
* <li>olcMaxDerefDepth(Integer, SV)</li>
* </ul>
*
* <pre>
* .----------------------------------------------------.
* |V XXXX Database limits |
* +----------------------------------------------------+
* | Size limit : [//////////] (Edit...) |
* | Max Deref Depth : [///] |
* | Timelimit : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Edit...) |
* | | | (Delete) |
* | +------------------------------------+ |
* | Limits : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Edit...) |
* | | | (Delete) |
* | | | -------- |
* | | | (Up...) |
* | | | (Down...) |
* | +------------------------------------+ |
* +----------------------------------------------------+
* </pre>
*
* @param parent the parent composite
* @param toolkit the toolkit to use
*/
private void createLimitsSettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section section = toolkit.createSection( parent, Section.TWISTIE | Section.COMPACT | Section.TITLE_BAR );
section.setText( Messages.getString( "OpenLDAPMasterDetail.LimitsSettings" ) );
section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite composite = toolkit.createComposite( section );
toolkit.paintBordersFor( composite );
GridLayout gl = new GridLayout( 5, false );
gl.marginRight = 18;
composite.setLayout( gl );
section.setClient( composite );
// The olcSizeLimit parameter.
toolkit.createLabel( composite,
Messages.getString( "OpenLDAPMasterDetail.SizeLimit" ) ); //$NON-NLS-1$
sizeLimitText = toolkit.createText( composite, "" );
sizeLimitText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// The SizeLimit edit button
sizeLimitEditButton = BaseWidgetUtils.createButton( composite,
Messages.getString( "OpenLDAPMasterDetail.Edit" ), 1 ); //$NON-NLS-1$
sizeLimitEditButton.setLayoutData( new GridData( SWT.RIGHT, SWT.CENTER, false, false ) );
sizeLimitEditButton.addSelectionListener( sizeLimitEditSelectionListener );
// The olcMaxDerefDepth edit button
toolkit.createLabel( composite,
Messages.getString( "OpenLDAPMasterDetail.MaxDerefDepth" ) ); //$NON-NLS-1$
maxDerefDepthText = BaseWidgetUtils.createIntegerText( toolkit, composite,
"Specifies the maximum number of aliases to dereference when trying to resolve an entry" );
maxDerefDepthText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// The olcTimeLimit parameter
Label timeLimitLabel = toolkit.createLabel( composite,
Messages.getString( "OpenLDAPMasterDetail.TimeLimit" ) ); //$NON-NLS-1$
timeLimitLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 5, 1 ) );
timeLimitTableWidget = new TableWidget<TimeLimitWrapper>(
new TimeLimitDecorator( composite.getShell() ) );
timeLimitTableWidget.createWidgetWithEdit( composite, toolkit );
timeLimitTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 5, 1 ) );
addModifyListener( timeLimitTableWidget, timeLimitListener );
// The olcLimits parameter.
Label limitsLabel = toolkit.createLabel( composite,
Messages.getString( "OpenLDAPMasterDetail.Limits" ) ); //$NON-NLS-1$
limitsLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 5, 1 ) );
limitsTableWidget = new TableWidget<LimitsWrapper>(
new LimitsDecorator( composite.getShell(), "Limits" ) );
limitsTableWidget.createOrderedWidgetWithEdit( composite, toolkit );
limitsTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 5, 1 ) );
addModifyListener( limitsTableWidget, limitsListener );
}
/**
* Creates the Security Settings Section. This will expose the following attributes :
* <ul>
* <li>olcHidden(Boolean, SV)</li>
* <li>olcReadOnly(Boolean, SV)</li>
* <li>olcRequires(String, MV, Ordered)</li>
* <li>olcRestrict(Integer, SV)</li>
* <li>olcSecurity</li>
* </ul>
*
* <pre>
* .----------------------------------------------------.
* |V XXXX Database security |
* +----------------------------------------------------+
* | Hidden : [ ] Read Only : [ ] |
* | Requires : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Delete) |
* | | | |
* | +------------------------------------+ |
* | Restrict : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Delete) |
* | | | |
* | +------------------------------------+ |
* | Security Strength Factors : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Edit...) |
* | | | (Delete) |
* | +------------------------------------+ |
* +----------------------------------------------------+
* </pre>
*
* @param parent the parent composite
* @param toolkit the toolkit to use
*/
private void createSecuritySettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section section = toolkit.createSection( parent, Section.TWISTIE | Section.COMPACT | Section.TITLE_BAR );
section.setText( Messages.getString( "OpenLDAPMasterDetail.SecuritySettings" ) );
section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite securityComposite = toolkit.createComposite( section );
toolkit.paintBordersFor( securityComposite );
GridLayout gl = new GridLayout( 4, true );
gl.marginRight = 18;
securityComposite.setLayout( gl );
section.setClient( securityComposite );
// The OlcHidden button
hiddenButton = BaseWidgetUtils.createCheckbox( securityComposite,
Messages.getString( "OpenLDAPMasterDetail.Hidden" ), 2 );
hiddenButton.addSelectionListener( hiddenButtonSelectionListener );
// The OlcReadOnly button
readOnlyButton = BaseWidgetUtils.createCheckbox( securityComposite,
Messages.getString( "OpenLDAPMasterDetail.ReadOnly" ), 2 );
readOnlyButton.addSelectionListener( readOnlyButtonSelectionListener );
// The olcRequires parameter label
Label requireConditionLabel = toolkit.createLabel( securityComposite,
Messages.getString( "OpenLDAPMasterDetail.RequireCondition" ) ); //$NON-NLS-1$
requireConditionLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) );
// The olcRestrict parameter label
Label restrictOperationLabel = toolkit.createLabel( securityComposite,
Messages.getString( "OpenLDAPMasterDetail.RestrictOperation" ) ); //$NON-NLS-1$
restrictOperationLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 2, 1 ) );
// The olcRequires parameter table
requireConditionTableWidget = new TableWidget<RequireConditionEnum>(
new RequireConditionDecorator( securityComposite.getShell() ) );
requireConditionTableWidget.createWidgetNoEdit( securityComposite, toolkit );
requireConditionTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
addModifyListener( requireConditionTableWidget, requireConditionListener );
// The olcRestrict parameter table
restrictOperationTableWidget = new TableWidget<RestrictOperationEnum>(
new RestrictOperationDecorator( securityComposite.getShell() ) );
restrictOperationTableWidget.createWidgetNoEdit( securityComposite, toolkit );
restrictOperationTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
addModifyListener( restrictOperationTableWidget, restrictOperationListener );
// The olcSecurity parameter table
Label securityLabel = toolkit.createLabel( securityComposite, Messages.getString( "OpenLDAPMasterDetail.Security" ) ); //$NON-NLS-1$
securityLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 4, 1 ) );
securityTableWidget = new TableWidget<SsfWrapper>( new SsfDecorator( securityComposite.getShell() ) );
securityTableWidget.createWidgetWithEdit( securityComposite, toolkit );
securityTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) );
addModifyListener( securityTableWidget, securityListener );
}
/**
* Creates the Access Settings Section. This will expose the following attributes :
* <ul>
* <li>olcAccess(String, MV, Ordered)</li>
* <li>olcAddContentAcl(Boolean)</li>
* </ul>
*
* <pre>
* .----------------------------------------------------.
* |V XXXX Database access |
* +----------------------------------------------------+
* | Add content ACL : [ ] |
* | ACLs : |
* | +------------------------------------+ |
* | | | (Add...) |
* | | | (Edit...) |
* | | | (Delete) |
* | | | -------- |
* | | | (Up...) |
* | | | (Down...) |
* | +------------------------------------+ |
* +----------------------------------------------------+
* </pre>
*
* @param parent the parent composite
* @param toolkit the toolkit to use
*/
private void createAccessSettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section accessSection = toolkit.createSection( parent, Section.TWISTIE | Section.COMPACT | Section.TITLE_BAR );
accessSection.setText( Messages.getString( "OpenLDAPMasterDetail.AccessSettings" ) );
accessSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite accessComposite = toolkit.createComposite( accessSection );
toolkit.paintBordersFor( accessComposite );
GridLayout gl = new GridLayout( 2, true );
gl.marginRight = 18;
accessComposite.setLayout( gl );
accessSection.setClient( accessComposite );
// The olcAddContentAcl Button
addContentAclCheckbox = BaseWidgetUtils.createCheckbox( accessComposite, "Add Content ACL", 2 );
// The olcAccess Table
Label aclsLabel = toolkit.createLabel( accessComposite,
Messages.getString( "OpenLDAPMasterDetail.ACLs" ) ); //$NON-NLS-1$
aclsLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) );
/*
aclsTableWidget = new TableWidget<StringValueWrapper>(
new LimitsDecorator( accessComposite.getShell(), "ACLs" ) );
aclsTableWidget.createOrderedWidgetWithEdit( accessComposite, toolkit );
aclsTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) );
addModifyListener( aclsTableWidget, aclsListener );
*/
}
/**
* Creates the Overlay Settings Section
*
* @param parent
* the parent composite
* @param toolkit
* the toolkit to use
*/
private void createOverlaySettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section section = toolkit.createSection( parent, Section.TWISTIE | Section.EXPANDED | Section.TITLE_BAR );
section.setText( "Overlays Settings" );
section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite composite = toolkit.createComposite( section );
toolkit.paintBordersFor( composite );
composite.setLayout( new GridLayout( 2, false ) );
section.setClient( composite );
// Creating the Table and Table Viewer
Table table = toolkit.createTable( composite, SWT.NULL );
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true, 1, 3 );
gd.heightHint = 20;
gd.widthHint = 100;
table.setLayoutData( gd );
overlaysTableViewer = new TableViewer( table );
overlaysTableViewer.setContentProvider( new ArrayContentProvider() );
overlaysTableViewer.setLabelProvider( new LabelProvider()
{
public String getText( Object element )
{
if ( element instanceof OlcOverlayConfig )
{
return getOverlayText( ( OlcOverlayConfig ) element );
}
return super.getText( element );
};
} );
// Creating the buttons
addOverlayButton = toolkit.createButton( composite, "Add...", SWT.PUSH );
addOverlayButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
editOverlayButton = toolkit.createButton( composite, "Edit...", SWT.PUSH );
editOverlayButton.setEnabled( false );
editOverlayButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
deleteOverlayButton = toolkit.createButton( composite, "Delete...", SWT.PUSH );
deleteOverlayButton.setEnabled( false );
deleteOverlayButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
}
/**
* Gets the overlay text.
*
* @param overlay the overlay
* @return the text corresponding to the overlay
*/
private String getOverlayText( OlcOverlayConfig overlay )
{
return OverlayDialog.getOverlayType( overlay ).getName();
}
/**
* Creates the Database Specific Settings Section
*
* @param parent the parent composite
* @param toolkit the toolkit to use
*/
private void createDatabaseSpecificSettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
specificSettingsSection = toolkit.createSection( parent, Section.TWISTIE | Section.EXPANDED
| Section.TITLE_BAR );
specificSettingsSection.setText( "Database Specific Settings" );
specificSettingsSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// Creating the Composite
specificSettingsSectionComposite = toolkit.createComposite( specificSettingsSection );
toolkit.paintBordersFor( specificSettingsSectionComposite );
GridLayout gd = new GridLayout();
gd.marginHeight = gd.marginWidth = 0;
gd.verticalSpacing = gd.horizontalSpacing = 0;
specificSettingsSectionComposite.setLayout( gd );
specificSettingsSection.setClient( specificSettingsSectionComposite );
}
/**
* Creates the Replication Consumers Settings Section
*
* @param parent
* the parent composite
* @param toolkit
* the toolkit to use
*/
private void createReplicationConsumersSettingsSection( Composite parent, FormToolkit toolkit )
{
// Creating the Section
Section section = toolkit.createSection( parent, Section.TWISTIE | Section.EXPANDED | Section.TITLE_BAR );
section.setText( "Replication Consumers Settings" );
section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
Composite composite = toolkit.createComposite( section );
toolkit.paintBordersFor( composite );
composite.setLayout( new GridLayout( 2, false ) );
section.setClient( composite );
// Creating the Table and Table Viewer
Table table = toolkit.createTable( composite, SWT.NULL );
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true, 1, 3 );
gd.heightHint = 20;
gd.widthHint = 100;
table.setLayoutData( gd );
replicationConsumersTableViewer = new TableViewer( table );
replicationConsumersTableViewer.setContentProvider( new ArrayContentProvider() );
replicationConsumersTableViewer.setLabelProvider( new LabelProvider()
{
public String getText( Object element )
{
if ( element instanceof String )
{
return getReplicationConsumerText( ( String ) element );
}
return super.getText( element );
};
} );
// Creating the buttons
addReplicationConsumerButton = toolkit.createButton( composite, "Add...", SWT.PUSH );
addReplicationConsumerButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
editReplicationConsumerButton = toolkit.createButton( composite, "Edit...", SWT.PUSH );
editReplicationConsumerButton.setEnabled( false );
editReplicationConsumerButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
deleteReplicationConsumerButton = toolkit.createButton( composite, "Delete...", SWT.PUSH );
deleteReplicationConsumerButton.setEnabled( false );
deleteReplicationConsumerButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
}
/**
* Gets the replication consumer text.
*
* @param syncReplValue the replication consumer value
* @return the text corresponding to the replication consumer
*/
private String getReplicationConsumerText( String syncReplValue )
{
if ( syncReplValue != null )
{
try
{
// Parsing the SyncRepl value
SyncReplParser parser = new SyncReplParser();
SyncRepl syncRepl = parser.parse( syncReplValue );
// Creating a string builder to hold the SyncRepl description
StringBuilder sb = new StringBuilder();
// Replica ID
sb.append( "rid=" + syncRepl.getRid() );
// Provider
Provider provider = syncRepl.getProvider();
if ( provider != null )
{
sb.append( " provider=" + provider.toString() );
}
// Search Base
String searchBase = syncRepl.getSearchBase();
if ( ( searchBase != null ) && ( !"".equals( searchBase ) ) )
{
sb.append( " searchBase=\"" + searchBase + "\"" );
}
sb.append( " (and more options)" );
return sb.toString();
}
catch ( SyncReplParserException e )
{
// Silent
}
}
return syncReplValue;
}
/**
* {@inheritDoc}
*/
public void selectionChanged( IFormPart part, ISelection selection )
{
IStructuredSelection ssel = ( IStructuredSelection ) selection;
if ( ssel.size() == 1 )
{
databaseWrapper = ( DatabaseWrapper ) ssel.getFirstElement();
}
else
{
databaseWrapper = null;
}
refresh();
}
/**
* {@inheritDoc}
*/
public void commit( boolean onSave )
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
OlcDatabaseConfig database = databaseWrapper.getDatabase();
// Suffixes
database.clearOlcSuffix();
List<DnWrapper> dnWrappers = suffixDnTableWidget.getElements();
Dn[] suffixDns = new Dn[dnWrappers.size()];
int pos = 0;
for ( DnWrapper dnWrapper : dnWrappers )
{
suffixDns[pos++] = dnWrapper.getDn();
}
database.addOlcSuffix( suffixDns );
// Root DN
database.setOlcRootDN( rootDnEntryWidget.getDn() );
// Root Password
String rootPassword = rootPasswordWidget.getPasswordAsString();
if ( Strings.isNotEmpty( rootPassword ) )
{
database.setOlcRootPW( rootPassword );
}
// Schema DN
//database.setOlcSchemaDN( schemaDnEntryWidget.getDn() );
// Read Only
//database.setOlcReadOnly( readOnlyBooleanWithDefaultWidget.getValue() );
// Hidden
//database.setOlcHidden( hiddenBooleanWithDefaultWidget.getValue() );
// Database specific details block
if ( databaseSpecificDetailsBlock != null )
{
databaseSpecificDetailsBlock.commit( onSave );
}
// MirrorMode
//database.setOlcMirrorMode( mirrorModeBooleanWithDefaultWidget.getValue() );
// Disabled
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
database.setOlcDisabled( disabledBooleanWithDefaultWidget.getValue() );
}
// LastMod
//database.setOlcLastMod( lastModBooleanWithDefaultWidget.getValue() );
// AddAclContent
//database.setOlcAddContentAcl( addContentAclBooleanWithDefaultWidget.getValue() );
// Monitoring
if ( ( database instanceof OlcHdbConfig ) || ( database instanceof OlcBdbConfig ) )
{
//database.setOlcMonitoring( monitoringBooleanWithDefaultWidget.getValue() );
}
// MaxDerefDepth
//if ( ( maxDerefDepthText.getText() != null ) && ( maxDerefDepthText.getText().length() > 0 ) )
{
//database.setOlcMaxDerefDepth( Integer.parseInt( maxDerefDepthText.getText() ) );
}
}
}
/**
* {@inheritDoc}
*/
public void dispose()
{
}
/**
* {@inheritDoc}
*/
public void initialize( IManagedForm form )
{
toolkit = form.getToolkit();
}
/**
* {@inheritDoc}
*/
public boolean isDirty()
{
return dirty;
}
/**
* {@inheritDoc}
*/
public boolean isStale()
{
return false;
}
/**
* {@inheritDoc}
*/
public void setFocus()
{
// suffixText.setFocus();
}
/**
* {@inheritDoc}
*/
public boolean setFormInput( Object input )
{
return false;
}
/**
* {@inheritDoc}
*/
public void refresh()
{
removeListeners();
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
OlcDatabaseConfig database = databaseWrapper.getDatabase();
// Enabling or disabling UI elements depending on the database, dealing with
// the two specific Database (Frontend and Config)
if ( isFrontendDatabase( database ) )
{
//databaseTypeComboViewer.getControl().setEnabled( false );
suffixDnTableWidget.disable();
rootDnEntryWidget.setEnabled( false );
rootPasswordWidget.setEnabled( false );
//schemaDnEntryWidget.setEnabled( false );
//readOnlyBooleanWithDefaultWidget.setEnabled( false );
//hiddenBooleanWithDefaultWidget.setEnabled( false );
//mirrorModeBooleanWithDefaultWidget.setEnabled( false );
// Disabled
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
disabledBooleanWithDefaultWidget.setEnabled( false );
}
//lastModBooleanWithDefaultWidget.setEnabled( false );
//addContentAclBooleanWithDefaultWidget.setEnabled( false );
//monitoringBooleanWithDefaultWidget.setEnabled( false );
//maxDerefDepthText.setEnabled( false );
}
else if ( isConfigDatabase( database ) )
{
//databaseTypeComboViewer.getControl().setEnabled( false );
suffixDnTableWidget.enable();
rootDnEntryWidget.setEnabled( true );
rootPasswordWidget.setEnabled( true );
//schemaDnEntryWidget.setEnabled( true );
//readOnlyBooleanWithDefaultWidget.setEnabled( false );
//hiddenBooleanWithDefaultWidget.setEnabled( false );
//mirrorModeBooleanWithDefaultWidget.setEnabled( true );
// Disabled
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
disabledBooleanWithDefaultWidget.setEnabled( false );
}
//lastModBooleanWithDefaultWidget.setEnabled( false );
//addContentAclBooleanWithDefaultWidget.setEnabled( false );
//monitoringBooleanWithDefaultWidget.setEnabled( false );
//maxDerefDepthText.setEnabled( false );
}
else
{
//databaseTypeComboViewer.getControl().setEnabled( true );
suffixDnTableWidget.enable();
rootDnEntryWidget.setEnabled( true );
rootPasswordWidget.setEnabled( true );
//schemaDnEntryWidget.setEnabled( true );
//readOnlyBooleanWithDefaultWidget.setEnabled( true );
//hiddenBooleanWithDefaultWidget.setEnabled( true );
//mirrorModeBooleanWithDefaultWidget.setEnabled( true );
// Disabled
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
disabledBooleanWithDefaultWidget.setEnabled( true );
}
//lastModBooleanWithDefaultWidget.setEnabled( true );
//addContentAclBooleanWithDefaultWidget.setEnabled( true );
if ( ( database instanceof OlcHdbConfig ) || ( database instanceof OlcBdbConfig ) )
{
//monitoringBooleanWithDefaultWidget.setEnabled( true );
}
else
{
//monitoringBooleanWithDefaultWidget.setEnabled( false );
}
//maxDerefDepthText.setEnabled( true );
}
// Suffixes
suffixDnTableWidget.getElements().clear();
List<Dn> suffixesDnList = database.getOlcSuffix();
List<DnWrapper> dnWrappers = new ArrayList<DnWrapper>();
for ( Dn dn : suffixesDnList )
{
dnWrappers.add( new DnWrapper( dn ) );
}
suffixDnTableWidget.setElements( dnWrappers );
// Root DN
Dn rootDn = database.getOlcRootDN();
rootDnEntryWidget.setInput( rootDn );
// Root PW
String rootPassword = database.getOlcRootPW();
rootPasswordWidget.setPassword( ( rootPassword == null ) ? null : rootPassword.getBytes() );
// rootPasswordText.setText( ( rootPassword == null ) ? "" : rootPassword ); //$NON-NLS-1$
// Read Only
//readOnlyBooleanWithDefaultWidget.setValue( database.getOlcReadOnly() );
// Hidden
//hiddenBooleanWithDefaultWidget.setValue( database.getOlcHidden() );
// Mirror Mode
//mirrorModeBooleanWithDefaultWidget.setValue( database.getOlcMirrorMode() );
// Disabled
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
disabledBooleanWithDefaultWidget.setValue( database.getOlcDisabled() );
}
// LastMod
//lastModBooleanWithDefaultWidget.setValue( database.getOlcLastMod() );
// AddAclContent
//addContentAclBooleanWithDefaultWidget.setValue( database.getOlcAddContentAcl() );
// Monitoring
if ( ( database instanceof OlcHdbConfig ) || ( database instanceof OlcBdbConfig ) )
{
//monitoringBooleanWithDefaultWidget.setValue( database.getOlcMonitoring() );
}
//maxDerefDepthText.setText( database.getOlcMaxDerefDepth() == null ? "" : Integer.toString( database.getOlcMaxDerefDepth() ) );
// Overlays
refreshOverlaysTableViewer();
// Replication Consumers
refreshReplicationConsumersTableViewer();
//
// Specific Settings
//
// OlcHdbConfig Type
if ( database instanceof OlcHdbConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.HDB ) );
databaseSpecificDetailsBlock = new BerkeleyDbDatabaseSpecificDetailsBlock<OlcHdbConfig>( instance,
( OlcHdbConfig ) database, browserConnection );
}
// OlcBdbConfig Type
else if ( database instanceof OlcBdbConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.BDB ) );
databaseSpecificDetailsBlock = new BerkeleyDbDatabaseSpecificDetailsBlock<OlcBdbConfig>( instance,
( OlcBdbConfig ) database, browserConnection );
}
// OlcMdbConfig Type
else if ( database instanceof OlcMdbConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.MDB ) );
databaseSpecificDetailsBlock = new MdbDatabaseSpecificDetailsBlock( instance,
( OlcMdbConfig ) database, browserConnection );
}
// OlcLdifConfig Type
else if ( database instanceof OlcLdifConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.LDIF ) );
databaseSpecificDetailsBlock = new LdifDatabaseSpecificDetailsBlock( instance,
( OlcLdifConfig ) database );
}
// OlcNullConfig Type
else if ( database instanceof OlcNullConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.NULL ) );
databaseSpecificDetailsBlock = new NullDatabaseSpecificDetailsBlock( instance,
( OlcNullConfig ) database );
}
// OlcRelayConfig Type
else if ( database instanceof OlcRelayConfig )
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.RELAY ) );
databaseSpecificDetailsBlock = new RelayDatabaseSpecificDetailsBlock( instance,
( OlcRelayConfig ) database, browserConnection );
}
// None of these types
else
{
// Looking for the frontend database
if ( isFrontendDatabase( database ) )
{
//databaseTypeComboViewer.setInput( FRONTEND_DATABASE_TYPES );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.FRONTEND ) );
databaseSpecificDetailsBlock = new FrontendDatabaseSpecificDetailsBlock( instance, database,
browserConnection );
}
// Looking for the config database
else if ( isConfigDatabase( database ) )
{
//databaseTypeComboViewer.setInput( CONFIG_DATABASE_TYPES );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.CONFIG ) );
databaseSpecificDetailsBlock = null;
}
// Any other type of database
else
{
//databaseTypeComboViewer.setInput( DatabaseTypeEnum.values() );
//databaseTypeComboViewer.setSelection( new StructuredSelection( DatabaseTypeEnum.NONE ) );
databaseSpecificDetailsBlock = null;
}
}
updateDatabaseSpecificSettingsSection();
}
addListeners();
}
/**
* Refreshes overlays table viewer.
*/
private void refreshOverlaysTableViewer()
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
overlaysTableViewer.setInput( databaseWrapper.getDatabase().getOverlays().toArray() );
}
else
{
overlaysTableViewer.setInput( new Object[0] );
}
updateOverlaysTableButtonsState();
}
/**
* Updates the state of the overlays table buttons.
*/
private void updateOverlaysTableButtonsState()
{
StructuredSelection selection = ( StructuredSelection ) overlaysTableViewer.getSelection();
editOverlayButton.setEnabled( !selection.isEmpty() );
deleteOverlayButton.setEnabled( !selection.isEmpty() );
}
/**
* Refreshes replication consumers table viewer.
*/
private void refreshReplicationConsumersTableViewer()
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
replicationConsumersTableViewer.setInput( databaseWrapper.getDatabase().getOlcSyncrepl() );
}
else
{
replicationConsumersTableViewer.setInput( new Object[0] );
}
updateReplicationConsumersTableButtonsState();
}
/**
* Updates the state of the replication consumers table buttons.
*/
private void updateReplicationConsumersTableButtonsState()
{
StructuredSelection selection = ( StructuredSelection ) replicationConsumersTableViewer.getSelection();
editReplicationConsumerButton.setEnabled( !selection.isEmpty() );
deleteReplicationConsumerButton.setEnabled( !selection.isEmpty() );
}
/**
* Adds listeners to UI widgets.
*/
private void addListeners()
{
// The Database general listeners
addModifyListener( rootDnEntryWidget, dirtyWidgetModifyListener );
addModifyListener( rootPasswordWidget, dirtyWidgetModifyListener );
addModifyListener( suffixDnTableWidget, dirtyWidgetModifyListener );
// The Database limit listeners
addModifyListener( sizeLimitText, dirtyModifyListener );
addModifyListener( maxDerefDepthText, dirtyModifyListener );
addModifyListener( timeLimitTableWidget, dirtyWidgetModifyListener );
addModifyListener( limitsTableWidget, dirtyWidgetModifyListener );
// TODO...
//addModifyListener( schemaDnEntryWidget, dirtyWidgetModifyListener );
//addModifyListener( readOnlyBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//addModifyListener( hiddenBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//addModifyListener( mirrorModeBooleanWithDefaultWidget, dirtyWidgetModifyListener );
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
addModifyListener( disabledBooleanWithDefaultWidget, dirtyWidgetModifyListener );
}
addModifyListener( lastModBooleanWithDefaultWidget, dirtyWidgetModifyListener );
addSelectionListener( addContentAclCheckbox, dirtySelectionListener );
addModifyListener( monitoringBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//maxDerefDepthText.addModifyListener( dirtyModifyListener );
//addSelectionChangedListener( databaseTypeComboViewer, databaseTypeComboViewerSelectionChangedListener );
addDoubleClickListener( overlaysTableViewer, overlaysTableViewerDoubleClickListener );
addSelectionChangedListener( overlaysTableViewer, overlaysTableViewerSelectionChangedListener );
addSelectionListener( addOverlayButton, addOverlayButtonListener );
addSelectionListener( editOverlayButton, editOverlayButtonListener );
addSelectionListener( deleteOverlayButton, deleteOverlayButtonListener );
addDoubleClickListener( replicationConsumersTableViewer, replicationConsumersTableViewerDoubleClickListener );
addSelectionChangedListener( replicationConsumersTableViewer,
replicationConsumersTableViewerSelectionChangedListener );
addSelectionListener( addReplicationConsumerButton, addReplicationConsumerButtonListener );
addSelectionListener( editReplicationConsumerButton, editReplicationConsumerButtonListener );
addSelectionListener( deleteReplicationConsumerButton, deleteReplicationConsumerButtonListener );
}
/**
* Removes listeners from UI widgets.
*/
private void removeListeners()
{
// The Database general listeners
removeModifyListener( rootDnEntryWidget, dirtyWidgetModifyListener );
removeModifyListener( rootPasswordWidget, dirtyWidgetModifyListener );
removeModifyListener( suffixDnTableWidget, dirtyWidgetModifyListener );
// The Database limit listeners
removeModifyListener( sizeLimitText, dirtyModifyListener );
removeModifyListener( maxDerefDepthText, dirtyModifyListener );
removeModifyListener( timeLimitTableWidget, dirtyWidgetModifyListener );
removeModifyListener( limitsTableWidget, dirtyWidgetModifyListener );
removeModifyListener( suffixDnTableWidget, dirtyWidgetModifyListener );
//removeModifyListener( schemaDnEntryWidget, dirtyWidgetModifyListener );
//removeModifyListener( readOnlyBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//removeModifyListener( hiddenBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//removeModifyListener( mirrorModeBooleanWithDefaultWidget, dirtyWidgetModifyListener );
if ( browserConnection.getSchema().hasAttributeTypeDescription( "olcDisabled" ) )
{
removeModifyListener( disabledBooleanWithDefaultWidget, dirtyWidgetModifyListener );
}
removeModifyListener( lastModBooleanWithDefaultWidget, dirtyWidgetModifyListener );
removeSelectionListener( addContentAclCheckbox, dirtySelectionListener );
removeModifyListener( monitoringBooleanWithDefaultWidget, dirtyWidgetModifyListener );
//maxDerefDepthText.removeModifyListener( dirtyModifyListener );
//removeSelectionChangedListener( databaseTypeComboViewer, databaseTypeComboViewerSelectionChangedListener );
removeDoubleClickListener( overlaysTableViewer, overlaysTableViewerDoubleClickListener );
removeSelectionChangedListener( overlaysTableViewer, overlaysTableViewerSelectionChangedListener );
removeSelectionListener( addOverlayButton, addOverlayButtonListener );
removeSelectionListener( editOverlayButton, editOverlayButtonListener );
removeSelectionListener( deleteOverlayButton, deleteOverlayButtonListener );
removeDoubleClickListener( replicationConsumersTableViewer, replicationConsumersTableViewerDoubleClickListener );
removeSelectionChangedListener( replicationConsumersTableViewer,
replicationConsumersTableViewerSelectionChangedListener );
removeSelectionListener( addReplicationConsumerButton, addReplicationConsumerButtonListener );
removeSelectionListener( editReplicationConsumerButton, editReplicationConsumerButtonListener );
removeSelectionListener( deleteReplicationConsumerButton, deleteReplicationConsumerButtonListener );
}
/**
* Disposes the inner specific settings composite.
*/
private void disposeSpecificSettingsComposite()
{
if ( ( databaseSpecificDetailsComposite != null ) && !( databaseSpecificDetailsComposite.isDisposed() ) )
{
databaseSpecificDetailsComposite.dispose();
}
databaseSpecificDetailsComposite = null;
}
/**
* Updates the database specific settings section.
*/
private void updateDatabaseSpecificSettingsSection()
{
// Disposing existing specific settings composite
disposeSpecificSettingsComposite();
// Create the specific settings block content
if ( databaseSpecificDetailsBlock != null )
{
databaseSpecificDetailsComposite = databaseSpecificDetailsBlock.createBlockContent(
specificSettingsSectionComposite,
toolkit );
databaseSpecificDetailsBlock.refresh();
}
parentComposite.layout( true, true );
// Making the section visible or not
specificSettingsSection.setVisible( databaseSpecificDetailsBlock != null );
}
/**
* Action launched when the add overlay button is clicked.
*/
private void addOverlayButtonAction()
{
OverlayDialog dialog = new OverlayDialog( addOverlayButton.getShell(), true );
dialog.setBrowserConnection( browserConnection );
if ( dialog.open() == OverlayDialog.OK )
{
OlcOverlayConfig overlay = dialog.getOverlay();
if ( overlay != null )
{
// Updating the 'overlay' value with the ordering prefix
overlay.setOlcOverlay( "{" + getNewOverlayOrderingValue() + "}" + overlay.getOlcOverlay() );
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
databaseWrapper.getDatabase().addOverlay( overlay );
refreshOverlaysTableViewer();
setEditorDirty();
}
}
}
}
/**
* Gets the new overlay ordering value.
*
* @return the new overlay ordering value
*/
private int getNewOverlayOrderingValue()
{
return getMaxOverlayOrderingValue() + 1;
}
/**
* Gets the maximum ordering value.
*
* @return the maximum ordering value
*/
private int getMaxOverlayOrderingValue()
{
int maxOrderingValue = -1;
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
for ( OlcOverlayConfig overlay : databaseWrapper.getDatabase().getOverlays() )
{
if ( OpenLdapConfigurationPluginUtils
.hasOrderingPrefix( overlay.getOlcOverlay() ) )
{
int overlayOrderingValue = OpenLdapConfigurationPluginUtils.getOrderingPrefix( overlay
.getOlcOverlay() );
if ( overlayOrderingValue > maxOrderingValue )
{
maxOrderingValue = overlayOrderingValue;
}
}
}
}
return maxOrderingValue;
}
/**
* Action launched when the edit overlay button is clicked, or
* when the overlays table viewer is double-clicked.
*/
private void editOverlayButtonAction()
{
StructuredSelection selection = ( StructuredSelection ) overlaysTableViewer.getSelection();
if ( !selection.isEmpty() )
{
OlcOverlayConfig selectedOverlay = ( OlcOverlayConfig ) selection.getFirstElement();
OverlayDialog dialog = new OverlayDialog( addOverlayButton.getShell() );
dialog.setBrowserConnection( browserConnection );
dialog.setOverlay( selectedOverlay );
if ( dialog.open() == OverlayDialog.OK )
{
refreshOverlaysTableViewer();
setEditorDirty();
}
}
}
/**
* Action launched when the delete overlay button is clicked.
*/
private void deleteOverlayButtonAction()
{
StructuredSelection selection = ( StructuredSelection ) overlaysTableViewer.getSelection();
if ( !selection.isEmpty() )
{
OlcOverlayConfig overlay = ( OlcOverlayConfig ) selection.getFirstElement();
if ( MessageDialog.openConfirm( overlaysTableViewer.getControl().getShell(), "Delete Overlay?",
NLS.bind( "Are you sure you want to delete the ''{0}'' overlay?", getOverlayText( overlay ) ) ) )
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
databaseWrapper.getDatabase().removeOverlay( overlay );
refreshOverlaysTableViewer();
setEditorDirty();
}
}
}
}
/**
* Indicates if the given database is the frontend one.
*
* @param database the database
* @return <code>true</code> if the given database if the frontend one,
* <code>false</code> if not.
*/
private boolean isFrontendDatabase( OlcDatabaseConfig database )
{
if ( database != null )
{
int orderingPrefix = OpenLdapConfigurationPluginUtils.getOrderingPrefix( database.getOlcDatabase() );
String databaseName = OpenLdapConfigurationPluginUtils.stripOrderingPrefix( database.getOlcDatabase() );
return ( ( orderingPrefix == -1 ) && "frontend".equalsIgnoreCase( databaseName ) );
}
return false;
}
/**
* Indicates if the given database is the config one.
*
* @param database the database
* @return <code>true</code> if the given database if the config one,
* <code>false</code> if not.
*/
private boolean isConfigDatabase( OlcDatabaseConfig database )
{
if ( database != null )
{
int orderingPrefix = OpenLdapConfigurationPluginUtils.getOrderingPrefix( database.getOlcDatabase() );
String databaseName = OpenLdapConfigurationPluginUtils.stripOrderingPrefix( database.getOlcDatabase() );
return ( ( orderingPrefix == 0 ) && "config".equalsIgnoreCase( databaseName ) );
}
return false;
}
/**
* Action launched when the add replication consumer button is clicked.
*/
private void addReplicationConsumerButtonAction()
{
ReplicationConsumerDialog dialog = new ReplicationConsumerDialog( addReplicationConsumerButton.getShell(),
browserConnection );
if ( dialog.open() == OverlayDialog.OK )
{
SyncRepl syncRepl = dialog.getSyncRepl();
if ( syncRepl != null )
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
String newSyncReplValue = dialog.getSyncRepl().toString();
databaseWrapper.getDatabase().addOlcSyncrepl( newSyncReplValue );
refreshReplicationConsumersTableViewer();
replicationConsumersTableViewer.setSelection( new StructuredSelection( newSyncReplValue ) );
setEditorDirty();
}
}
}
}
/**
* Action launched when the edit replication consumer button is clicked, or
* when the replication consumers table viewer is double-clicked.
*/
private void editReplicationConsumerButtonAction()
{
StructuredSelection selection = ( StructuredSelection ) replicationConsumersTableViewer.getSelection();
if ( !selection.isEmpty() )
{
// Getting the raw SyncRepl value
String syncReplValue = ( String ) selection.getFirstElement();
String syncReplValueWithoutOrderingPrefix = syncReplValue;
// Getting the ordering prefix (if it exists)
int orderingPrefix = OpenLdapConfigurationPluginUtils.getOrderingPrefix( syncReplValue );
// If an ordering prefix was found, lets remove it before parsing the string
if ( orderingPrefix > 0 )
{
syncReplValueWithoutOrderingPrefix = OpenLdapConfigurationPluginUtils
.stripOrderingPrefix( syncReplValue );
}
// Parsing the SyncRepl value
SyncReplParser parser = new SyncReplParser();
try
{
SyncRepl syncRepl = parser.parse( syncReplValueWithoutOrderingPrefix );
// Opening a replication consumer dialog
ReplicationConsumerDialog dialog = new ReplicationConsumerDialog(
addReplicationConsumerButton.getShell(), syncRepl, browserConnection );
if ( dialog.open() == OverlayDialog.OK )
{
if ( ( databaseWrapper != null ) && ( databaseWrapper.getDatabase() != null ) )
{
String newSyncReplValue = dialog.getSyncRepl().toString();
// Add back the ordering prefix if it was present
if ( orderingPrefix > 0 )
{
newSyncReplValue = "{" + orderingPrefix + "}" + newSyncReplValue;
}
OlcDatabaseConfig databaseConfig = databaseWrapper.getDatabase();
List<String> newOlcSyncrepls = databaseConfig.getOlcSyncrepl();
newOlcSyncrepls.remove( syncReplValue );
newOlcSyncrepls.add( newSyncReplValue );
databaseConfig.setOlcSyncrepl( newOlcSyncrepls );
refreshReplicationConsumersTableViewer();
replicationConsumersTableViewer.setSelection( new StructuredSelection( newSyncReplValue ) );
setEditorDirty();
}
}
}
catch ( SyncReplParserException e )
{
CommonUIUtils
.openErrorDialog( NLS
.bind(
"The replication consumer definition could not be read correctly.\nThe following error occured:\n {0}",
e ) );
}
}
}
/**
* Action launched when the delete replication consumer button is clicked.
*/
private void deleteReplicationConsumerButtonAction()
{
StructuredSelection selection = ( StructuredSelection ) replicationConsumersTableViewer.getSelection();
if ( !selection.isEmpty() )
{
String syncReplValue = ( String ) selection.getFirstElement();
if ( MessageDialog.openConfirm( overlaysTableViewer.getControl().getShell(), "Delete Overlay?",
NLS.bind( "Are you sure you want to delete the ''{0}'' replication consumer ?",
getReplicationConsumerText( syncReplValue ) ) ) )
{
if ( databaseWrapper != null )
{
OlcDatabaseConfig databaseConfig = databaseWrapper.getDatabase();
if( databaseConfig != null )
{
List<String> newOlcSynrepls = databaseConfig.getOlcSyncrepl();
newOlcSynrepls.remove( syncReplValue );
databaseConfig.setOlcSyncrepl( newOlcSynrepls );
refreshReplicationConsumersTableViewer();
setEditorDirty();
}
}
}
}
}
/**
* Adds a modify listener to the given Text.
*
* @param text the Text control
* @param listener the listener
*/
protected void addModifyListener( Text text, ModifyListener listener )
{
if ( ( text != null ) && ( !text.isDisposed() ) && ( listener != null ) )
{
text.addModifyListener( listener );
}
}
/**
* Adds a modify listener to the given TableWidget.
*
* @param table the Text control
* @param listener the listener
*/
protected void addModifyListener( TableWidget<?> tabelWidget, WidgetModifyListener listener )
{
if ( ( tabelWidget != null ) && ( listener != null ) )
{
tabelWidget.addWidgetModifyListener( listener );
}
}
/**
* Adds a modify listener to the given BrowserWidget.
*
* @param widget the widget
* @param listener the listener
*/
protected void addModifyListener( AbstractWidget widget, WidgetModifyListener listener )
{
if ( ( widget != null ) && ( listener != null ) )
{
widget.addWidgetModifyListener( listener );
}
}
/**
* The olcTimeLimit listener
*/
private WidgetModifyListener timeLimitListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> timeLimits = new ArrayList<String>();
for ( TimeLimitWrapper timeLimitWrapper : timeLimitTableWidget.getElements() )
{
timeLimits.add( timeLimitWrapper.toString() );
}
OlcDatabaseConfig databaseConfig = databaseWrapper.getDatabase();
databaseConfig.setOlcTimeLimit( timeLimits );
}
};
/**
* The olcLimits listener
*/
private WidgetModifyListener limitsListener = new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent e )
{
List<String> limits = new ArrayList<String>();
for ( LimitsWrapper limitWrapper : limitsTableWidget.getElements() )
{
limits.add( limitWrapper.toString() );
}
OlcDatabaseConfig databaseConfig = databaseWrapper.getDatabase();
databaseConfig.setOlcLimits( limits );
}
};
/**
* Adds a selection listener to the given Button.
*
* @param button the Button control
* @param listener the listener
*/
protected void addSelectionListener( Button button, SelectionListener listener )
{
if ( ( button != null ) && ( !button.isDisposed() ) && ( listener != null ) )
{
button.addSelectionListener( listener );
}
}
/**
* Adds a selection changed listener to the given Viewer.
*
* @param viewer the Viewer control
* @param listener the listener
*/
protected void addSelectionChangedListener( Viewer viewer, ISelectionChangedListener listener )
{
if ( ( viewer != null ) && ( !viewer.getControl().isDisposed() ) && ( listener != null ) )
{
viewer.addSelectionChangedListener( listener );
}
}
/**
* Adds a double-click listener to the given Viewer.
*
* @param viewer the Viewer control
* @param listener the listener
*/
protected void addDoubleClickListener( TableViewer viewer, IDoubleClickListener listener )
{
if ( ( viewer != null ) && ( !viewer.getControl().isDisposed() ) && ( listener != null ) )
{
viewer.addDoubleClickListener( listener );
}
}
/**
* Removes a modify listener to the given Text.
*
* @param text the Text control
* @param listener the listener
*/
protected void removeModifyListener( Text text, ModifyListener listener )
{
if ( ( text != null ) && ( !text.isDisposed() ) && ( listener != null ) )
{
text.removeModifyListener( listener );
}
}
/**
* Adds a modify listener to the given BrowserWidget.
*
* @param widget the widget
* @param listener the listener
*/
protected void removeModifyListener( AbstractWidget widget, WidgetModifyListener listener )
{
if ( ( widget != null ) && ( listener != null ) )
{
widget.removeWidgetModifyListener( listener );
}
}
/**
* Removes a selection listener to the given Button.
*
* @param button the Button control
* @param listener the listener
*/
protected void removeSelectionListener( Button button, SelectionListener listener )
{
if ( ( button != null ) && ( !button.isDisposed() ) && ( listener != null ) )
{
button.removeSelectionListener( listener );
}
}
/**
* Removes a selection changed listener to the given Button.
*
* @param viewer the Viewer
* @param listener the listener
*/
protected void removeSelectionChangedListener( Viewer viewer, ISelectionChangedListener listener )
{
if ( ( viewer != null ) && ( !viewer.getControl().isDisposed() ) && ( listener != null ) )
{
viewer.removeSelectionChangedListener( listener );
}
}
/**
* Removes a selection changed listener to the given Button.
*
* @param viewer the TableViewer
* @param listener the listener
*/
protected void removeDoubleClickListener( TableViewer viewer, IDoubleClickListener listener )
{
if ( ( viewer != null ) && ( !viewer.getControl().isDisposed() ) && ( listener != null ) )
{
viewer.removeDoubleClickListener( listener );
}
}
/**
* Sets the associated editor dirty.
*/
public void setEditorDirty()
{
masterDetailsBlock.setEditorDirty();
}
/**
* Copies database properties from one instance to the other.
*
* @param original the original database
* @param destination the destination database
*/
private void copyDatabaseProperties( OlcDatabaseConfig original, OlcDatabaseConfig destination )
{
if ( ( original != null ) && ( destination != null ) )
{
// Special case for the 'olcDatabase' property
destination.setOlcDatabase( "{"
+ OpenLdapConfigurationPluginUtils.getOrderingPrefix( original.getOlcDatabase() ) + "}"
+ destination.getOlcDatabaseType() );
// All other properties
destination.setOlcAccess( original.getOlcAccess() );
destination.setOlcAddContentAcl( original.getOlcAddContentAcl() );
destination.setOlcHidden( original.getOlcHidden() );
destination.setOlcLastMod( original.getOlcLastMod() );
destination.setOlcLimits( original.getOlcLimits() );
destination.setOlcMaxDerefDepth( original.getOlcMaxDerefDepth() );
destination.setOlcMirrorMode( original.getOlcMirrorMode() );
destination.setOlcMonitoring( original.getOlcMonitoring() );
destination.setOlcPlugin( original.getOlcPlugin() );
destination.setOlcReadOnly( original.getOlcReadOnly() );
destination.setOlcReplica( original.getOlcReplica() );
destination.setOlcReplicaArgsFile( original.getOlcReplicaArgsFile() );
destination.setOlcReplicaPidFile( original.getOlcReplicaPidFile() );
destination.setOlcReplicationInterval( original.getOlcReplicationInterval() );
destination.setOlcReplogFile( original.getOlcReplogFile() );
destination.setOlcRequires( original.getOlcRequires() );
destination.setOlcRestrict( original.getOlcRestrict() );
destination.setOlcRootDN( original.getOlcRootDN() );
destination.setOlcRootPW( original.getOlcRootPW() );
destination.setOlcSchemaDN( original.getOlcSchemaDN() );
destination.setOlcSecurity( original.getOlcSecurity() );
destination.setOlcSizeLimit( original.getOlcSizeLimit() );
destination.setOlcSubordinate( original.getOlcSubordinate() );
destination.setOlcSuffix( original.getOlcSuffix() );
destination.setOlcSyncrepl( original.getOlcSyncrepl() );
destination.setOlcTimeLimit( original.getOlcTimeLimit() );
destination.setOlcUpdateDN( original.getOlcUpdateDN() );
destination.setOlcUpdateRef( original.getOlcUpdateRef() );
destination.setOverlays( original.getOverlays() );
}
}
}