/* * 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.util.Strings; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; import org.eclipse.swt.SWT; 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.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.apache.directory.studio.openldap.common.ui.widgets.BooleanWithDefaultWidget; import org.apache.directory.studio.openldap.common.ui.widgets.DirectoryBrowserWidget; import org.apache.directory.studio.openldap.common.ui.widgets.FileBrowserWidget; import org.apache.directory.studio.openldap.common.ui.widgets.UnixPermissionsWidget; import org.apache.directory.studio.openldap.config.OpenLdapConfigurationPluginUtils; import org.apache.directory.studio.openldap.config.editor.dialogs.DbConfigurationDialog; import org.apache.directory.studio.openldap.config.model.database.OlcBdbConfig; import org.apache.directory.studio.openldap.config.model.database.OlcBdbConfigLockDetectEnum; import org.apache.directory.studio.openldap.config.model.widgets.IndicesWidget; import org.apache.directory.studio.openldap.config.model.widgets.LockDetectWidget; /** * This class implements a block for Berkeley DB Database Specific Details. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class BerkeleyDbDatabaseSpecificDetailsBlock<BDB extends OlcBdbConfig> extends AbstractDatabaseSpecificDetailsBlock<BDB> { // UI Widgets private DirectoryBrowserWidget directoryBrowserWidget; private UnixPermissionsWidget modeUnixPermissionsWidget; private Button editConfigurationButton; private FileBrowserWidget cryptFileBrowserWidget; private Text cryptKeyText; private Text sharedMemoryKeyText; private IndicesWidget indicesWidget; private BooleanWithDefaultWidget linearIndexBooleanWithDefaultWidget; private Text cacheSizeText; private Text cacheFreeText; private Text dnCacheSizeText; private Text idlCacheSizeText; private Text searchStackDepthText; private Text pageSizeText; private Text checkpointText; private BooleanWithDefaultWidget disableSynchronousDatabaseWritesBooleanWithDefaultWidget; private BooleanWithDefaultWidget allowReadsOfUncommitedDataBooleanWithDefaultWidget; private LockDetectWidget lockDetectWidget; // Listeners private SelectionListener editConfigurationButtonSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { DbConfigurationDialog dialog = new DbConfigurationDialog( editConfigurationButton.getShell(), database.getOlcDbConfig().toArray( new String[0] ) ); if ( dialog.open() == DbConfigurationDialog.OK ) { List<String> newConfiguration = new ArrayList<String>(); String[] configurationFromDialog = dialog.getConfiguration(); if ( configurationFromDialog.length > 0 ) { for ( String configurationLineFromDialog : configurationFromDialog ) { newConfiguration.add( configurationLineFromDialog ); } } database.setOlcDbConfig( newConfiguration ); detailsPage.setEditorDirty(); } } }; /** * Creates a new instance of BdbDatabaseSpecificDetailsBlock. * * @param databaseDetailsPage the database details page * @param database the database * @param browserConnection the connection */ public BerkeleyDbDatabaseSpecificDetailsBlock( DatabasesDetailsPage detailsPage, BDB database, IBrowserConnection browserConnection ) { super( detailsPage, database, browserConnection ); } /** * {@inheritDoc} */ public Composite createBlockContent( Composite parent, FormToolkit toolkit ) { // Composite Composite composite = toolkit.createComposite( parent ); composite.setLayout( new GridLayout() ); composite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); createDatabaseConfigurationSection( composite, toolkit ); createDatabaseIndexesSection( composite, toolkit ); createDatabaseCacheSection( composite, toolkit ); createDatabaseLimitsSection( composite, toolkit ); createDatabaseOptionsSection( composite, toolkit ); return composite; } /** * Creates the database configuration section. * * @param parent the parent composite * @param toolkit the toolkit */ private void createDatabaseConfigurationSection( Composite parent, FormToolkit toolkit ) { // Database Configuration Section Section databaseConfigurationSection = toolkit.createSection( parent, Section.TWISTIE ); databaseConfigurationSection.setText( "Database Configuration" ); databaseConfigurationSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite databaseConfigurationComposite = toolkit.createComposite( databaseConfigurationSection ); toolkit.paintBordersFor( databaseConfigurationComposite ); databaseConfigurationComposite.setLayout( new GridLayout( 2, false ) ); databaseConfigurationSection.setClient( databaseConfigurationComposite ); // Directory Text toolkit.createLabel( databaseConfigurationComposite, "Directory:" ); Composite directoryComposite = toolkit.createComposite( databaseConfigurationComposite ); GridLayout directoryCompositeGridLayout = new GridLayout( 2, false ); directoryCompositeGridLayout.marginHeight = directoryCompositeGridLayout.marginWidth = 0; directoryCompositeGridLayout.verticalSpacing = 0; directoryComposite.setLayout( directoryCompositeGridLayout ); directoryComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); directoryBrowserWidget = new DirectoryBrowserWidget( "" ); directoryBrowserWidget.createWidget( directoryComposite, toolkit ); // Mode Text toolkit.createLabel( databaseConfigurationComposite, "Mode:" ); modeUnixPermissionsWidget = new UnixPermissionsWidget(); modeUnixPermissionsWidget.create( databaseConfigurationComposite, toolkit ); modeUnixPermissionsWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Configuration Text toolkit.createLabel( databaseConfigurationComposite, "Configuration:" ); editConfigurationButton = toolkit.createButton( databaseConfigurationComposite, "Edit Configuration...", SWT.PUSH ); editConfigurationButton.addSelectionListener( editConfigurationButtonSelectionListener ); // Crypt File Text toolkit.createLabel( databaseConfigurationComposite, "Crypt File:" ); Composite cryptFileComposite = toolkit.createComposite( databaseConfigurationComposite ); GridLayout cryptFileCompositeGridLayout = new GridLayout( 2, false ); cryptFileCompositeGridLayout.marginHeight = cryptFileCompositeGridLayout.marginWidth = 0; cryptFileCompositeGridLayout.verticalSpacing = 0; cryptFileComposite.setLayout( cryptFileCompositeGridLayout ); cryptFileComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); cryptFileBrowserWidget = new FileBrowserWidget( "", new String[0], FileBrowserWidget.TYPE_OPEN ); cryptFileBrowserWidget.createWidget( cryptFileComposite, toolkit ); // Crypt Key Text toolkit.createLabel( databaseConfigurationComposite, "Crypt Key:" ); cryptKeyText = toolkit.createText( databaseConfigurationComposite, "" ); cryptKeyText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Shared Memory Key Text toolkit.createLabel( databaseConfigurationComposite, "Shared Memory Key:" ); sharedMemoryKeyText = BaseWidgetUtils.createIntegerText( toolkit, databaseConfigurationComposite ); sharedMemoryKeyText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * Creates the database indexes section. * * @param parent the parent composite * @param toolkit the toolkit */ private void createDatabaseIndexesSection( Composite parent, FormToolkit toolkit ) { // Database Indices Section Section databaseIndexesSection = toolkit.createSection( parent, Section.TWISTIE ); databaseIndexesSection.setText( "Database Indices" ); databaseIndexesSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite databaseIndexesComposite = toolkit.createComposite( databaseIndexesSection ); toolkit.paintBordersFor( databaseIndexesComposite ); databaseIndexesComposite.setLayout( new GridLayout( 2, false ) ); databaseIndexesSection.setClient( databaseIndexesComposite ); // Indices Widget indicesWidget = new IndicesWidget( browserConnection ); indicesWidget.createWidgetWithEdit( databaseIndexesComposite, toolkit ); indicesWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); // Linear Indexes Widget toolkit.createLabel( databaseIndexesComposite, "Linear Index:" ); linearIndexBooleanWithDefaultWidget = new BooleanWithDefaultWidget( false ); linearIndexBooleanWithDefaultWidget.create( databaseIndexesComposite, toolkit ); linearIndexBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * Creates the database cache section. * * @param parent the parent composite * @param toolkit the toolkit */ private void createDatabaseCacheSection( Composite parent, FormToolkit toolkit ) { // Database Cache Section Section databaseCacheSection = toolkit.createSection( parent, Section.TWISTIE ); databaseCacheSection.setText( "Database Cache" ); databaseCacheSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite databaseCacheComposite = toolkit.createComposite( databaseCacheSection ); toolkit.paintBordersFor( databaseCacheComposite ); databaseCacheComposite.setLayout( new GridLayout( 2, false ) ); databaseCacheSection.setClient( databaseCacheComposite ); // Cache Size Text toolkit.createLabel( databaseCacheComposite, "Cache Size:" ); cacheSizeText = BaseWidgetUtils.createIntegerText( toolkit, databaseCacheComposite ); cacheSizeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Cache Free Text toolkit.createLabel( databaseCacheComposite, "Cache Free:" ); cacheFreeText = BaseWidgetUtils.createIntegerText( toolkit, databaseCacheComposite ); cacheFreeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // DN Cache Size Text toolkit.createLabel( databaseCacheComposite, "DN Cache Size:" ); dnCacheSizeText = BaseWidgetUtils.createIntegerText( toolkit, databaseCacheComposite ); dnCacheSizeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // IDL Cache Size Text toolkit.createLabel( databaseCacheComposite, "IDL Cache Size:" ); idlCacheSizeText = BaseWidgetUtils.createIntegerText( toolkit, databaseCacheComposite ); idlCacheSizeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * Creates the database limits section. * * @param parent the parent composite * @param toolkit the toolkit */ private void createDatabaseLimitsSection( Composite parent, FormToolkit toolkit ) { // Database Limits Section Section databaseLimitsSection = toolkit.createSection( parent, Section.TWISTIE ); databaseLimitsSection.setText( "Database Limits" ); databaseLimitsSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite databaseLimitsComposite = toolkit.createComposite( databaseLimitsSection ); toolkit.paintBordersFor( databaseLimitsComposite ); databaseLimitsComposite.setLayout( new GridLayout( 2, false ) ); databaseLimitsSection.setClient( databaseLimitsComposite ); // Search Stack Depth Text toolkit.createLabel( databaseLimitsComposite, "Search Stack Depth:" ); searchStackDepthText = BaseWidgetUtils.createIntegerText( toolkit, databaseLimitsComposite ); searchStackDepthText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Page Size Text toolkit.createLabel( databaseLimitsComposite, "Page Size:" ); pageSizeText = toolkit.createText( databaseLimitsComposite, "" ); pageSizeText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Checkpoint Text toolkit.createLabel( databaseLimitsComposite, "Checkpoint Interval:" ); checkpointText = toolkit.createText( databaseLimitsComposite, "" ); checkpointText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * Creates the database options section. * * @param parent the parent composite * @param toolkit the toolkit */ private void createDatabaseOptionsSection( Composite parent, FormToolkit toolkit ) { // Database Options Section Section databaseOptionsSection = toolkit.createSection( parent, Section.TWISTIE ); databaseOptionsSection.setText( "Database Options" ); databaseOptionsSection.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite databaseOptionsComposite = toolkit.createComposite( databaseOptionsSection ); toolkit.paintBordersFor( databaseOptionsComposite ); databaseOptionsComposite.setLayout( new GridLayout( 2, false ) ); databaseOptionsSection.setClient( databaseOptionsComposite ); // Disable Synchronous Database Writes Widget toolkit.createLabel( databaseOptionsComposite, "Disable Synchronous Database Writes:" ); disableSynchronousDatabaseWritesBooleanWithDefaultWidget = new BooleanWithDefaultWidget( false ); disableSynchronousDatabaseWritesBooleanWithDefaultWidget.create( databaseOptionsComposite, toolkit ); disableSynchronousDatabaseWritesBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Allow Reads Of Uncommited Data Widget toolkit.createLabel( databaseOptionsComposite, "Allow Reads Of Uncommited Data:" ); allowReadsOfUncommitedDataBooleanWithDefaultWidget = new BooleanWithDefaultWidget( false ); allowReadsOfUncommitedDataBooleanWithDefaultWidget.create( databaseOptionsComposite, toolkit ); allowReadsOfUncommitedDataBooleanWithDefaultWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Deadlock Detection Algorithm Widget toolkit.createLabel( databaseOptionsComposite, "Deadlock Detection Algorithm:" ); lockDetectWidget = new LockDetectWidget(); lockDetectWidget.createWidget( databaseOptionsComposite ); lockDetectWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * {@inheritDoc} */ public void refresh() { removeListeners(); if ( database != null ) { // Directory Text String directory = database.getOlcDbDirectory(); directoryBrowserWidget.setDirectoryPath( ( directory == null ) ? "" : directory ); // Mode Text String mode = database.getOlcDbMode(); modeUnixPermissionsWidget.setValue( mode ); // Crypt File Text String cryptFile = database.getOlcDbCryptFile(); cryptFileBrowserWidget.setFilename( ( cryptFile == null ) ? "" : cryptFile ); // Crypt Key Text byte[] cryptKey = database.getOlcDbCryptKey(); cryptKeyText.setText( ( cryptKey == null ) ? "" : new String( cryptKey ) ); //$NON-NLS-1$ // Shared Memory Key Text Integer sharedMemoryKey = database.getOlcDbShmKey(); sharedMemoryKeyText.setText( ( sharedMemoryKey == null ) ? "" : "" + sharedMemoryKey ); //$NON-NLS-1$ // Indices Text //indicesWidget.setIndices( database.getOlcDbIndex() ); // Linear Index Widget linearIndexBooleanWithDefaultWidget.setValue( database.getOlcDbLinearIndex() ); // Cache Size Text Integer cacheSize = database.getOlcDbCacheSize(); cacheSizeText.setText( ( cacheSize == null ) ? "" : "" + cacheSize ); //$NON-NLS-1$ // Cache Free Text Integer cacheFree = database.getOlcDbCacheFree(); cacheFreeText.setText( ( cacheFree == null ) ? "" : "" + cacheFree ); //$NON-NLS-1$ // DN Cache Size Text Integer dnCacheSize = database.getOlcDbDNcacheSize(); dnCacheSizeText.setText( ( dnCacheSize == null ) ? "" : "" + dnCacheSize ); //$NON-NLS-1$ // IDL Cache Size Text Integer idlCacheSize = database.getOlcDbIDLcacheSize(); idlCacheSizeText.setText( ( idlCacheSize == null ) ? "" : "" + idlCacheSize ); //$NON-NLS-1$ // Search Stack Depth Text Integer searchStackDepth = database.getOlcDbSearchStack(); searchStackDepthText.setText( ( searchStackDepth == null ) ? "" : "" + searchStackDepth ); //$NON-NLS-1$ // Page Size Text List<String> pageSize = database.getOlcDbPageSize(); pageSizeText.setText( ( pageSize == null ) ? "" : OpenLdapConfigurationPluginUtils.concatenate( pageSize ) ); //$NON-NLS-1$ // Checkpoint Text String checkpoint = database.getOlcDbCheckpoint(); checkpointText.setText( ( checkpoint == null ) ? "" : checkpoint ); //$NON-NLS-1$ // Disable Synchronous Database Writes Widget disableSynchronousDatabaseWritesBooleanWithDefaultWidget.setValue( database.getOlcDbNoSync() ); // Allow Reads Of Uncommited Data Widget allowReadsOfUncommitedDataBooleanWithDefaultWidget.setValue( database.getOlcDbDirtyRead() ); // Deadlock Detection Algorithm Text lockDetectWidget.setValue( OlcBdbConfigLockDetectEnum.fromString( database.getOlcDbLockDetect() ) ); } addListeners(); } /** * Adds the listeners. */ private void addListeners() { directoryBrowserWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); modeUnixPermissionsWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); editConfigurationButton.addSelectionListener( editConfigurationButtonSelectionListener ); cryptFileBrowserWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); cryptKeyText.addModifyListener( dirtyModifyListener ); sharedMemoryKeyText.addModifyListener( dirtyModifyListener ); indicesWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); linearIndexBooleanWithDefaultWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); cacheSizeText.addModifyListener( dirtyModifyListener ); cacheFreeText.addModifyListener( dirtyModifyListener ); dnCacheSizeText.addModifyListener( dirtyModifyListener ); idlCacheSizeText.addModifyListener( dirtyModifyListener ); searchStackDepthText.addModifyListener( dirtyModifyListener ); pageSizeText.addModifyListener( dirtyModifyListener ); checkpointText.addModifyListener( dirtyModifyListener ); disableSynchronousDatabaseWritesBooleanWithDefaultWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); allowReadsOfUncommitedDataBooleanWithDefaultWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); lockDetectWidget.addWidgetModifyListener( dirtyWidgetModifyListener ); } /** * Removes the listeners */ private void removeListeners() { directoryBrowserWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); modeUnixPermissionsWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); editConfigurationButton.removeSelectionListener( editConfigurationButtonSelectionListener ); cryptFileBrowserWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); cryptKeyText.removeModifyListener( dirtyModifyListener ); sharedMemoryKeyText.removeModifyListener( dirtyModifyListener ); indicesWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); linearIndexBooleanWithDefaultWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); cacheSizeText.removeModifyListener( dirtyModifyListener ); cacheFreeText.removeModifyListener( dirtyModifyListener ); dnCacheSizeText.removeModifyListener( dirtyModifyListener ); idlCacheSizeText.removeModifyListener( dirtyModifyListener ); searchStackDepthText.removeModifyListener( dirtyModifyListener ); pageSizeText.removeModifyListener( dirtyModifyListener ); checkpointText.removeModifyListener( dirtyModifyListener ); disableSynchronousDatabaseWritesBooleanWithDefaultWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); allowReadsOfUncommitedDataBooleanWithDefaultWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); lockDetectWidget.removeWidgetModifyListener( dirtyWidgetModifyListener ); } /** * {@inheritDoc} */ public void commit( boolean onSave ) { // Directory Text String directory = directoryBrowserWidget.getDirectoryPath(); if ( Strings.isEmpty( directory ) ) { database.setOlcDbDirectory( null ); } else { database.setOlcDbDirectory( directory ); } directoryBrowserWidget.saveDialogSettings(); // Mode Text database.setOlcDbMode( modeUnixPermissionsWidget.getValue() ); // Crypt File Text String cryptFile = cryptFileBrowserWidget.getFilename(); if ( Strings.isEmpty( cryptFile ) ) { database.setOlcDbCryptFile( null ); } else { database.setOlcDbCryptFile( cryptFile ); } cryptFileBrowserWidget.saveDialogSettings(); // Crypt Key Text String cryptKey = cryptKeyText.getText(); if ( Strings.isEmpty( cryptKey ) ) { database.setOlcDbCryptKey( null ); } else { database.setOlcDbCryptKey( cryptKey.getBytes() ); } // Shared Memory Key Text try { database.setOlcDbShmKey( Integer.parseInt( sharedMemoryKeyText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbShmKey( null ); } // Indices Widget database.clearOlcDbIndex(); /* for ( String index : indicesWidget.getIndices() ) { database.addOlcDbIndex( index ); } */ // Linear Index Widget database.setOlcDbLinearIndex( linearIndexBooleanWithDefaultWidget.getValue() ); // Cache Size Text try { database.setOlcDbCacheSize( Integer.parseInt( cacheSizeText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbCacheSize( null ); } // Cache Free Text try { database.setOlcDbCacheFree( Integer.parseInt( cacheFreeText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbCacheFree( null ); } // DN Cache Size Text try { database.setOlcDbDNcacheSize( Integer.parseInt( dnCacheSizeText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbDNcacheSize( null ); } // IDL Cache Size Text try { database.setOlcDbIDLcacheSize( Integer.parseInt( idlCacheSizeText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbIDLcacheSize( null ); } // Search Stack Depth Text try { database.setOlcDbSearchStack( Integer.parseInt( searchStackDepthText.getText() ) ); } catch ( NumberFormatException e ) { database.setOlcDbSearchStack( null ); } // Page Size Text //TODO // Checkpoint Text database.setOlcDbCheckpoint( checkpointText.getText() ); // Disable Synchronous Database Writes Widget database.setOlcDbNoSync( disableSynchronousDatabaseWritesBooleanWithDefaultWidget.getValue() ); // Allow Reads Of Uncommited Data Widget database.setOlcDbDirtyRead( allowReadsOfUncommitedDataBooleanWithDefaultWidget.getValue() ); // Deadlock Detection Algorithm Text OlcBdbConfigLockDetectEnum lockDetect = lockDetectWidget.getValue(); if ( lockDetect != null ) { database.setOlcDbLockDetect( lockDetect.toString() ); } else { database.setOlcDbLockDetect( null ); } } }