/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed 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.jkiss.dbeaver.ext.oracle.views;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.ext.oracle.model.OracleConstants;
import org.jkiss.dbeaver.ext.oracle.model.dict.OracleLanguage;
import org.jkiss.dbeaver.ext.oracle.model.dict.OracleTerritory;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.connection.ConnectionPageAbstract;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.util.Map;
/**
* OracleConnectionPage
*/
public class OracleConnectionExtraPage extends ConnectionPageAbstract
{
private Combo languageCombo;
private Combo territoryCombo;
private Text nlsDateFormat;
private Button hideEmptySchemasCheckbox;
private Button showDBAAlwaysCheckbox;
private Button useRuleHint;
public OracleConnectionExtraPage()
{
setTitle("Oracle properties");
setDescription("Regional settings and performance");
}
@Override
public void dispose()
{
super.dispose();
}
@Override
public void createControl(Composite parent)
{
Composite cfgGroup = new Composite(parent, SWT.NONE);
GridLayout gl = new GridLayout(1, false);
gl.marginHeight = 10;
gl.marginWidth = 10;
cfgGroup.setLayout(gl);
GridData gd = new GridData(GridData.FILL_BOTH);
cfgGroup.setLayoutData(gd);
{
final Group sessionGroup = UIUtils.createControlGroup(cfgGroup, "Session settings", 2, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
languageCombo = UIUtils.createLabelCombo(sessionGroup, "Language", SWT.DROP_DOWN);
languageCombo.setToolTipText("Session language");
languageCombo.add(OracleConstants.NLS_DEFAULT_VALUE);
for (OracleLanguage language : OracleLanguage.values()) {
languageCombo.add(language.getLanguage());
}
languageCombo.setText(OracleConstants.NLS_DEFAULT_VALUE);
territoryCombo = UIUtils.createLabelCombo(sessionGroup, "Territory", SWT.DROP_DOWN);
territoryCombo.setToolTipText("Session territory");
territoryCombo.add(OracleConstants.NLS_DEFAULT_VALUE);
for (OracleTerritory territory : OracleTerritory.values()) {
territoryCombo.add(territory.getTerritory());
}
territoryCombo.setText(OracleConstants.NLS_DEFAULT_VALUE);
nlsDateFormat = UIUtils.createLabelText(sessionGroup, "NLS Date Format", "");
}
{
final Group contentGroup = UIUtils.createControlGroup(cfgGroup, "Content", 1, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
hideEmptySchemasCheckbox = UIUtils.createCheckbox(contentGroup, "Hide empty schemas", true);
hideEmptySchemasCheckbox.setToolTipText(
"Check existence of objects within schema and do not show empty schemas in tree. " + GeneralUtils.getDefaultLineSeparator() +
"Enabled by default but it may cause performance problems on databases with very big number of objects.");
showDBAAlwaysCheckbox = UIUtils.createCheckbox(contentGroup, "Always show DBA objects", false);
showDBAAlwaysCheckbox.setToolTipText(
"Always shows DBA-related metadata objects in tree even if user do not has DBA role.");
}
{
final Group contentGroup = UIUtils.createControlGroup(cfgGroup, "Performance", 1, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
useRuleHint = UIUtils.createCheckbox(contentGroup, "Use RULE hint for system catalog queries", true);
useRuleHint.setToolTipText(
"Adds RULE hint for some system catalog queries (like columns and constraints reading)." + GeneralUtils.getDefaultLineSeparator() +
"It significantly increases performance on some Oracle databases (and decreases on others).");
}
setControl(cfgGroup);
loadSettings();
}
@Override
public boolean isComplete()
{
return true;
}
@Override
public void loadSettings()
{
//oraHomeSelector.setVisible(isOCI);
// Load values from new connection info
DBPConnectionConfiguration connectionInfo = site.getActiveDataSource().getConnectionConfiguration();
Map<String, String> providerProperties = connectionInfo.getProviderProperties();
// Settings
final Object nlsLanguage = providerProperties.get(OracleConstants.PROP_SESSION_LANGUAGE);
if (nlsLanguage != null) {
languageCombo.setText(nlsLanguage.toString());
}
final Object nlsTerritory = providerProperties.get(OracleConstants.PROP_SESSION_TERRITORY);
if (nlsTerritory != null) {
territoryCombo.setText(nlsTerritory.toString());
}
final Object dateFormat = providerProperties.get(OracleConstants.PROP_SESSION_NLS_DATE_FORMAT);
if (dateFormat != null) {
nlsDateFormat.setText(dateFormat.toString());
}
final Object checkSchemaContent = providerProperties.get(OracleConstants.PROP_CHECK_SCHEMA_CONTENT);
if (checkSchemaContent != null) {
hideEmptySchemasCheckbox.setSelection(CommonUtils.getBoolean(checkSchemaContent, false));
}
showDBAAlwaysCheckbox.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_ALWAYS_SHOW_DBA), false));
useRuleHint.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_USE_RULE_HINT), false));
}
@Override
public void saveSettings(DBPDataSourceContainer dataSource)
{
Map<String, String> providerProperties = dataSource.getConnectionConfiguration().getProviderProperties();
{
// Settings
if (!OracleConstants.NLS_DEFAULT_VALUE.equals(languageCombo.getText())) {
providerProperties.put(OracleConstants.PROP_SESSION_LANGUAGE, languageCombo.getText());
} else {
providerProperties.remove(OracleConstants.PROP_SESSION_LANGUAGE);
}
if (!OracleConstants.NLS_DEFAULT_VALUE.equals(territoryCombo.getText())) {
providerProperties.put(OracleConstants.PROP_SESSION_TERRITORY, territoryCombo.getText());
} else {
providerProperties.remove(OracleConstants.PROP_SESSION_TERRITORY);
}
String dateFormat = nlsDateFormat.getText();
if (!dateFormat.isEmpty()) {
providerProperties.put(OracleConstants.PROP_SESSION_NLS_DATE_FORMAT, dateFormat);
} else {
providerProperties.remove(OracleConstants.PROP_SESSION_NLS_DATE_FORMAT);
}
providerProperties.put(
OracleConstants.PROP_CHECK_SCHEMA_CONTENT,
String.valueOf(hideEmptySchemasCheckbox.getSelection()));
providerProperties.put(
OracleConstants.PROP_ALWAYS_SHOW_DBA,
String.valueOf(showDBAAlwaysCheckbox.getSelection()));
providerProperties.put(
OracleConstants.PROP_USE_RULE_HINT,
String.valueOf(useRuleHint.getSelection()));
}
saveConnectionURL(dataSource.getConnectionConfiguration());
}
}