提交 22f3d2e4 编写于 作者: J jurgen

Preference store model

上级 15c38a50
package org.jkiss.dbeaver.model;
import java.util.EventListener;
import java.util.EventObject;
public interface DBPPreferenceListener extends EventListener {
class PropertyChangeEvent extends EventObject {
private String propertyName;
private Object oldValue;
private Object newValue;
public PropertyChangeEvent(Object source, String property, Object oldValue,
Object newValue) {
super(source);
this.propertyName = property;
this.oldValue = oldValue;
this.newValue = newValue;
}
public String getProperty() {
return propertyName;
}
public Object getNewValue() {
return newValue;
}
public Object getOldValue() {
return oldValue;
}
}
void propertyChange(PropertyChangeEvent event);
}
package org.jkiss.dbeaver.model;
public interface DBPPreferenceStore {
boolean contains(String name);
boolean getBoolean(String name);
double getDouble(String name);
float getFloat(String name);
int getInt(String name);
long getLong(String name);
String getString(String name);
boolean getDefaultBoolean(String name);
double getDefaultDouble(String name);
float getDefaultFloat(String name);
int getDefaultInt(String name);
long getDefaultLong(String name);
String getDefaultString(String name);
boolean isDefault(String name);
boolean needsSaving();
void setDefault(String name, double value);
void setDefault(String name, float value);
void setDefault(String name, int value);
void setDefault(String name, long value);
void setDefault(String name, String defaultObject);
void setDefault(String name, boolean value);
void setToDefault(String name);
void setValue(String name, double value);
void setValue(String name, float value);
void setValue(String name, int value);
void setValue(String name, long value);
void setValue(String name, String value);
void setValue(String name, boolean value);
void addPropertyChangeListener(DBPPreferenceListener listener);
void removePropertyChangeListener(DBPPreferenceListener listener);
}
......@@ -22,7 +22,7 @@ import org.jkiss.dbeaver.model.data.DBDDataFormatter;
import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.properties.PropertyDescriptorEx;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.utils.CommonUtils;
import java.io.IOException;
......@@ -152,8 +152,8 @@ public class DataFormatterProfile implements DBDDataFormatterProfile {
@Override
public boolean isOverridesParent()
{
if (store instanceof AbstractPreferenceStore) {
AbstractPreferenceStore prefStore = (AbstractPreferenceStore) store;
if (store instanceof SimplePreferenceStore) {
SimplePreferenceStore prefStore = (SimplePreferenceStore) store;
if (prefStore.isSet(PROP_LANGUAGE) || prefStore.isSet(PROP_COUNTRY) || prefStore.isSet(PROP_VARIANT)) {
return true;
......@@ -175,7 +175,7 @@ public class DataFormatterProfile implements DBDDataFormatterProfile {
@Override
public void reset()
{
if (store instanceof AbstractPreferenceStore) {
if (store instanceof SimplePreferenceStore) {
// Set all formatter properties to default
store.setToDefault(PROP_LANGUAGE);
store.setToDefault(PROP_COUNTRY);
......
......@@ -25,7 +25,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.xml.SAXListener;
......@@ -173,7 +173,7 @@ public class DataFormatterRegistry
for (DBDDataFormatterProfile profile : customProfiles) {
xml.startElement(RegistryConstants.TAG_PROFILE);
xml.addAttribute(RegistryConstants.ATTR_NAME, profile.getProfileName());
AbstractPreferenceStore store = (AbstractPreferenceStore) profile.getPreferenceStore();
SimplePreferenceStore store = (SimplePreferenceStore) profile.getPreferenceStore();
Map<String, String> props = store.getProperties();
if (props != null) {
for (Map.Entry<String,String> entry : props.entrySet()) {
......@@ -214,7 +214,7 @@ public class DataFormatterRegistry
}
}
private class CustomProfileStore extends AbstractPreferenceStore {
private class CustomProfileStore extends SimplePreferenceStore {
private CustomProfileStore()
{
super(DBeaverCore.getGlobalPreferenceStore());
......@@ -230,7 +230,7 @@ public class DataFormatterRegistry
private class FormattersParser implements SAXListener
{
private String profileName;
private AbstractPreferenceStore curStore;
private SimplePreferenceStore curStore;
@Override
public void saxStartElement(SAXReader reader, String namespaceURI, String localName, Attributes atts)
......
......@@ -57,7 +57,7 @@ import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
import org.jkiss.dbeaver.ui.dialogs.connection.EditConnectionDialog;
import org.jkiss.dbeaver.ui.dialogs.connection.EditConnectionWizard;
import org.jkiss.dbeaver.ui.properties.PropertyCollector;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
......@@ -997,7 +997,7 @@ public class DataSourceDescriptor
}
@Override
public AbstractPreferenceStore getPreferenceStore()
public SimplePreferenceStore getPreferenceStore()
{
return preferenceStore;
}
......
......@@ -19,7 +19,7 @@ package org.jkiss.dbeaver.registry;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBConstants;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.utils.CommonUtils;
import java.io.IOException;
......@@ -28,7 +28,7 @@ import java.util.Map;
/**
* DataSourcePreferenceStore
*/
public class DataSourcePreferenceStore extends AbstractPreferenceStore
public class DataSourcePreferenceStore extends SimplePreferenceStore
{
private final DataSourceDescriptor dataSourceDescriptor;
......
......@@ -40,7 +40,7 @@ import org.jkiss.dbeaver.registry.encode.PasswordEncrypter;
import org.jkiss.dbeaver.registry.encode.SimpleStringEncrypter;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
......@@ -494,7 +494,7 @@ public class DataSourceRegistry implements DBPDataSourceRegistry
// Preferences
{
// Save only properties who are differs from default values
AbstractPreferenceStore prefStore = dataSource.getPreferenceStore();
SimplePreferenceStore prefStore = dataSource.getPreferenceStore();
for (String propName : prefStore.preferenceNames()) {
String propValue = prefStore.getString(propName);
String defValue = prefStore.getDefaultString(propName);
......
......@@ -25,7 +25,7 @@ import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.Log;
import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor;
import org.jkiss.dbeaver.registry.DataSourceProviderRegistry;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.utils.CommonUtils;
import org.osgi.framework.Bundle;
......@@ -181,7 +181,7 @@ public class SQLTemplateStore extends TemplateStore {
log.error(x);
}
private static class CustomTemplatesStore extends AbstractPreferenceStore {
private static class CustomTemplatesStore extends SimplePreferenceStore {
private CustomTemplatesStore()
{
super(DBeaverCore.getGlobalPreferenceStore());
......
......@@ -27,7 +27,7 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
/**
* PrefPageDataEditor
......@@ -51,7 +51,7 @@ public class PrefPageDataEditor extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.RS_EDIT_USE_ALL_COLUMNS) ||
store.contains(DBeaverPreferences.RS_EDIT_MAX_TEXT_SIZE) ||
......
......@@ -29,7 +29,7 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
/**
* PrefPageMetaData
......@@ -50,7 +50,7 @@ public class PrefPageMetaData extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.READ_EXPENSIVE_PROPERTIES) ||
store.contains(DBeaverPreferences.META_SEPARATE_CONNECTION) ||
......
......@@ -32,7 +32,7 @@ import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.resultset.spreadsheet.Spreadsheet;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.utils.CommonUtils;
/**
......@@ -70,7 +70,7 @@ public class PrefPageResultSet extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.RESULT_SET_AUTO_FETCH_NEXT_SEGMENT) ||
store.contains(DBeaverPreferences.RESULT_SET_MAX_ROWS) ||
......
......@@ -34,7 +34,7 @@ import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditorInput;
import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import java.util.HashMap;
import java.util.Map;
......@@ -67,7 +67,7 @@ public class PrefPageSQLEditor extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.EDITOR_SEPARATE_CONNECTION) ||
store.contains(DBeaverPreferences.SCRIPT_AUTO_FOLDERS) ||
......
......@@ -29,7 +29,7 @@ import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.runtime.sql.SQLScriptCommitType;
import org.jkiss.dbeaver.runtime.sql.SQLScriptErrorHandling;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
import org.jkiss.utils.CommonUtils;
/**
......@@ -58,7 +58,7 @@ public class PrefPageSQLExecute extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE) ||
store.contains(DBeaverPreferences.STATEMENT_TIMEOUT) ||
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2015 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.utils;
import org.eclipse.core.commands.common.EventManager;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.SafeRunnable;
import org.jkiss.utils.CommonUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* Preference store which can be stored/loaded in any way.
* Also it can use parent store to obtain values from it if this store do not contain the key.
* However, save will always use THIS store, not parent.
* Originally copied from standard PreferenceStore class
*/
public abstract class AbstractPreferenceStore extends EventManager implements IPersistentPreferenceStore, IPropertyChangeListener {
private IPreferenceStore parentStore;
private Map<String, String> properties;
private Map<String, String> defaultProperties;
private boolean dirty = false;
public AbstractPreferenceStore()
{
defaultProperties = new HashMap<String, String>();
properties = new HashMap<String, String>();
}
protected AbstractPreferenceStore(IPreferenceStore parentStore)
{
this();
this.parentStore = parentStore;
if (parentStore != null) {
parentStore.addPropertyChangeListener(this);
}
}
public IPreferenceStore getParentStore()
{
return parentStore;
}
public Map<String, String> getProperties()
{
return properties;
}
public void setProperties(Map<String, String> properties)
{
this.properties = properties;
}
public Map<String, String> getDefaultProperties()
{
return defaultProperties;
}
public void setDefaultProperties(Map<String, String> defaultProperties)
{
this.defaultProperties = defaultProperties;
}
public void clear()
{
properties.clear();
}
@Override
public void addPropertyChangeListener(IPropertyChangeListener listener)
{
addListenerObject(listener);
}
@Override
public boolean contains(String name)
{
return (properties.containsKey(name) || defaultProperties
.containsKey(name));
}
@Override
public void firePropertyChangeEvent(String name, Object oldValue, Object newValue)
{
final Object[] finalListeners = getListeners();
// Do we need to fire an event.
if (finalListeners.length > 0
&& (oldValue == null || !oldValue.equals(newValue))) {
final PropertyChangeEvent pe = new PropertyChangeEvent(this, name,
oldValue, newValue);
for (int i = 0; i < finalListeners.length; ++i) {
final IPropertyChangeListener l = (IPropertyChangeListener) finalListeners[i];
SafeRunnable.run(new SafeRunnable(JFaceResources.getString("PreferenceStore.changeError")) //$NON-NLS-1$
{
@Override
public void run()
{
l.propertyChange(pe);
}
});
}
}
}
@Override
public boolean getBoolean(String name)
{
return toBoolean(getString(name));
}
@Override
public boolean getDefaultBoolean(String name)
{
return toBoolean(getDefaultString(name));
}
private boolean toBoolean(String value)
{
return value != null && value.equals(IPreferenceStore.TRUE);
}
@Override
public double getDouble(String name)
{
return toDouble(getString(name));
}
@Override
public double getDefaultDouble(String name)
{
return toDouble(getDefaultString(name));
}
private double toDouble(String value)
{
double ival = DOUBLE_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Double.parseDouble(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public float getFloat(String name)
{
return toFloat(getString(name));
}
@Override
public float getDefaultFloat(String name)
{
return toFloat(getDefaultString(name));
}
private float toFloat(String value)
{
float ival = FLOAT_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Float.parseFloat(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public int getInt(String name)
{
return toInt(getString(name));
}
@Override
public int getDefaultInt(String name)
{
return toInt(getDefaultString(name));
}
private int toInt(String value)
{
int ival = INT_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Integer.parseInt(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public long getLong(String name)
{
return toLong(getString(name));
}
@Override
public long getDefaultLong(String name)
{
return toLong(getDefaultString(name));
}
private long toLong(String value)
{
long ival = LONG_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Long.parseLong(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public String getString(String name)
{
String value = properties.get(name);
if (value == null) {
if (parentStore.isDefault(name)) {
value = defaultProperties.get(name);
}
if (value == null) {
value = parentStore.getString(name);
}
}
return value;
}
@Override
public String getDefaultString(String name)
{
String value = defaultProperties.get(name);
if (value == null) {
if (parentStore.isDefault(name)) {
return parentStore.getDefaultString(name);
} else {
return "";
}
}
return value;
}
@Override
public boolean isDefault(String name)
{
return (!properties.containsKey(name) && (defaultProperties.containsKey(name) || parentStore.isDefault(name)));
}
public boolean isSet(String name)
{
return properties.containsKey(name);
}
@Override
public boolean needsSaving()
{
return dirty;
}
public String[] preferenceNames()
{
return properties.keySet().toArray(new String[properties.size()]);
}
@Override
public void putValue(String name, String value)
{
String oldValue = getString(name);
if (oldValue == null || !oldValue.equals(value)) {
properties.put(name, String.valueOf(value));
dirty = true;
}
}
@Override
public void removePropertyChangeListener(IPropertyChangeListener listener)
{
removeListenerObject(listener);
}
@Override
public void setDefault(String name, double value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, float value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, int value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, long value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, String value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, boolean value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setToDefault(String name)
{
Object oldValue = properties.get(name);
properties.remove(name);
dirty = true;
Object newValue = null;
if (defaultProperties != null) {
newValue = defaultProperties.get(name);
}
firePropertyChangeEvent(name, oldValue, newValue);
}
@Override
public void setValue(String name, double value)
{
double oldValue = getDouble(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, float value)
{
float oldValue = getFloat(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, int value)
{
int oldValue = getInt(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, long value)
{
long oldValue = getLong(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, String value)
{
String oldValue = getString(name);
if (oldValue == null || !oldValue.equals(value) || !isSet(name)) {
properties.put(name, value);
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, boolean value)
{
boolean oldValue = getBoolean(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue ? Boolean.TRUE
: Boolean.FALSE, value ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public void save() throws IOException
{
}
@Override
public void propertyChange(PropertyChangeEvent event)
{
for (Object listener : getListeners()) {
((IPropertyChangeListener)listener).propertyChange(event);
}
}
}
package org.jkiss.dbeaver.utils;
import org.eclipse.core.commands.common.EventManager;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.SafeRunnable;
import org.jkiss.dbeaver.model.DBPPreferenceListener;
import org.jkiss.dbeaver.model.DBPPreferenceStore;
public abstract class AbstractPreferenceStore extends EventManager implements DBPPreferenceStore {
public static final boolean BOOLEAN_DEFAULT_DEFAULT = false;
public static final double DOUBLE_DEFAULT_DEFAULT = 0.0;
public static final float FLOAT_DEFAULT_DEFAULT = 0.0f;
public static final int INT_DEFAULT_DEFAULT = 0;
public static final long LONG_DEFAULT_DEFAULT = 0L;
public static final String STRING_DEFAULT_DEFAULT = ""; //$NON-NLS-1$
public static final String TRUE = "true"; //$NON-NLS-1$
public static final String FALSE = "false"; //$NON-NLS-1$
public void firePropertyChangeEvent(String name, Object oldValue,
Object newValue)
{
final Object[] finalListeners = getListeners();
// Do we need to fire an event.
if (finalListeners.length > 0
&& (oldValue == null || !oldValue.equals(newValue))) {
final PropertyChangeEvent pe = new PropertyChangeEvent(this, name,
oldValue, newValue);
for (int i = 0; i < finalListeners.length; ++i) {
final IPropertyChangeListener l = (IPropertyChangeListener) finalListeners[i];
SafeRunnable.run(new SafeRunnable(JFaceResources.getString("PreferenceStore.changeError")) //$NON-NLS-1$
{
@Override
public void run() {
l.propertyChange(pe);
}
});
}
}
}
@Override
public void addPropertyChangeListener(DBPPreferenceListener listener) {
addListenerObject(listener);
}
@Override
public void removePropertyChangeListener(DBPPreferenceListener listener) {
removeListenerObject(listener);
}
}
package org.jkiss.dbeaver.utils;
public class GlobalPreferenceStore extends AbstractPreferenceStore{
@Override
public boolean contains(String name) {
return false;
}
@Override
public boolean getBoolean(String name) {
return false;
}
@Override
public double getDouble(String name) {
return 0;
}
@Override
public float getFloat(String name) {
return 0;
}
@Override
public int getInt(String name) {
return 0;
}
@Override
public long getLong(String name) {
return 0;
}
@Override
public String getString(String name) {
return null;
}
@Override
public boolean getDefaultBoolean(String name) {
return false;
}
@Override
public double getDefaultDouble(String name) {
return 0;
}
@Override
public float getDefaultFloat(String name) {
return 0;
}
@Override
public int getDefaultInt(String name) {
return 0;
}
@Override
public long getDefaultLong(String name) {
return 0;
}
@Override
public String getDefaultString(String name) {
return null;
}
@Override
public boolean isDefault(String name) {
return false;
}
@Override
public boolean needsSaving() {
return false;
}
@Override
public void setDefault(String name, double value) {
}
@Override
public void setDefault(String name, float value) {
}
@Override
public void setDefault(String name, int value) {
}
@Override
public void setDefault(String name, long value) {
}
@Override
public void setDefault(String name, String defaultObject) {
}
@Override
public void setDefault(String name, boolean value) {
}
@Override
public void setToDefault(String name) {
}
@Override
public void setValue(String name, double value) {
}
@Override
public void setValue(String name, float value) {
}
@Override
public void setValue(String name, int value) {
}
@Override
public void setValue(String name, long value) {
}
@Override
public void setValue(String name, String value) {
}
@Override
public void setValue(String name, boolean value) {
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2015 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.utils;
import org.eclipse.core.commands.common.EventManager;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.SafeRunnable;
import org.jkiss.utils.CommonUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* Preference store which can be stored/loaded in any way.
* Also it can use parent store to obtain values from it if this store do not contain the key.
* However, save will always use THIS store, not parent.
* Originally copied from standard PreferenceStore class
*/
public abstract class SimplePreferenceStore extends EventManager implements IPersistentPreferenceStore, IPropertyChangeListener {
private IPreferenceStore parentStore;
private Map<String, String> properties;
private Map<String, String> defaultProperties;
private boolean dirty = false;
public SimplePreferenceStore()
{
defaultProperties = new HashMap<String, String>();
properties = new HashMap<String, String>();
}
protected SimplePreferenceStore(IPreferenceStore parentStore)
{
this();
this.parentStore = parentStore;
if (parentStore != null) {
parentStore.addPropertyChangeListener(this);
}
}
public IPreferenceStore getParentStore()
{
return parentStore;
}
public Map<String, String> getProperties()
{
return properties;
}
public void setProperties(Map<String, String> properties)
{
this.properties = properties;
}
public Map<String, String> getDefaultProperties()
{
return defaultProperties;
}
public void setDefaultProperties(Map<String, String> defaultProperties)
{
this.defaultProperties = defaultProperties;
}
public void clear()
{
properties.clear();
}
@Override
public void addPropertyChangeListener(IPropertyChangeListener listener)
{
addListenerObject(listener);
}
@Override
public boolean contains(String name)
{
return (properties.containsKey(name) || defaultProperties
.containsKey(name));
}
@Override
public void firePropertyChangeEvent(String name, Object oldValue, Object newValue)
{
final Object[] finalListeners = getListeners();
// Do we need to fire an event.
if (finalListeners.length > 0
&& (oldValue == null || !oldValue.equals(newValue))) {
final PropertyChangeEvent pe = new PropertyChangeEvent(this, name,
oldValue, newValue);
for (int i = 0; i < finalListeners.length; ++i) {
final IPropertyChangeListener l = (IPropertyChangeListener) finalListeners[i];
SafeRunnable.run(new SafeRunnable(JFaceResources.getString("PreferenceStore.changeError")) //$NON-NLS-1$
{
@Override
public void run()
{
l.propertyChange(pe);
}
});
}
}
}
@Override
public boolean getBoolean(String name)
{
return toBoolean(getString(name));
}
@Override
public boolean getDefaultBoolean(String name)
{
return toBoolean(getDefaultString(name));
}
private boolean toBoolean(String value)
{
return value != null && value.equals(IPreferenceStore.TRUE);
}
@Override
public double getDouble(String name)
{
return toDouble(getString(name));
}
@Override
public double getDefaultDouble(String name)
{
return toDouble(getDefaultString(name));
}
private double toDouble(String value)
{
double ival = DOUBLE_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Double.parseDouble(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public float getFloat(String name)
{
return toFloat(getString(name));
}
@Override
public float getDefaultFloat(String name)
{
return toFloat(getDefaultString(name));
}
private float toFloat(String value)
{
float ival = FLOAT_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Float.parseFloat(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public int getInt(String name)
{
return toInt(getString(name));
}
@Override
public int getDefaultInt(String name)
{
return toInt(getDefaultString(name));
}
private int toInt(String value)
{
int ival = INT_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Integer.parseInt(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public long getLong(String name)
{
return toLong(getString(name));
}
@Override
public long getDefaultLong(String name)
{
return toLong(getDefaultString(name));
}
private long toLong(String value)
{
long ival = LONG_DEFAULT_DEFAULT;
if (!CommonUtils.isEmpty(value)) {
try {
ival = Long.parseLong(value);
} catch (NumberFormatException e) {
// do nothing
}
}
return ival;
}
@Override
public String getString(String name)
{
String value = properties.get(name);
if (value == null) {
if (parentStore.isDefault(name)) {
value = defaultProperties.get(name);
}
if (value == null) {
value = parentStore.getString(name);
}
}
return value;
}
@Override
public String getDefaultString(String name)
{
String value = defaultProperties.get(name);
if (value == null) {
if (parentStore.isDefault(name)) {
return parentStore.getDefaultString(name);
} else {
return "";
}
}
return value;
}
@Override
public boolean isDefault(String name)
{
return (!properties.containsKey(name) && (defaultProperties.containsKey(name) || parentStore.isDefault(name)));
}
public boolean isSet(String name)
{
return properties.containsKey(name);
}
@Override
public boolean needsSaving()
{
return dirty;
}
public String[] preferenceNames()
{
return properties.keySet().toArray(new String[properties.size()]);
}
@Override
public void putValue(String name, String value)
{
String oldValue = getString(name);
if (oldValue == null || !oldValue.equals(value)) {
properties.put(name, String.valueOf(value));
dirty = true;
}
}
@Override
public void removePropertyChangeListener(IPropertyChangeListener listener)
{
removeListenerObject(listener);
}
@Override
public void setDefault(String name, double value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, float value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, int value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, long value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, String value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setDefault(String name, boolean value)
{
defaultProperties.put(name, String.valueOf(value));
}
@Override
public void setToDefault(String name)
{
Object oldValue = properties.get(name);
properties.remove(name);
dirty = true;
Object newValue = null;
if (defaultProperties != null) {
newValue = defaultProperties.get(name);
}
firePropertyChangeEvent(name, oldValue, newValue);
}
@Override
public void setValue(String name, double value)
{
double oldValue = getDouble(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, float value)
{
float oldValue = getFloat(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, int value)
{
int oldValue = getInt(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, long value)
{
long oldValue = getLong(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, String value)
{
String oldValue = getString(name);
if (oldValue == null || !oldValue.equals(value) || !isSet(name)) {
properties.put(name, value);
dirty = true;
firePropertyChangeEvent(name, oldValue, value);
}
}
@Override
public void setValue(String name, boolean value)
{
boolean oldValue = getBoolean(name);
if (oldValue != value || !isSet(name)) {
properties.put(name, String.valueOf(value));
dirty = true;
firePropertyChangeEvent(name, oldValue ? Boolean.TRUE
: Boolean.FALSE, value ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public void save() throws IOException
{
}
@Override
public void propertyChange(PropertyChangeEvent event)
{
for (Object listener : getListeners()) {
((IPropertyChangeListener)listener).propertyChange(event);
}
}
}
......@@ -28,7 +28,7 @@ import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.preferences.TargetPrefPage;
import org.jkiss.dbeaver.utils.AbstractPreferenceStore;
import org.jkiss.dbeaver.utils.SimplePreferenceStore;
/**
* PrefPageOracle
......@@ -50,7 +50,7 @@ public class PrefPageOracle extends TargetPrefPage
@Override
protected boolean hasDataSourceSpecificOptions(DataSourceDescriptor dataSourceDescriptor)
{
AbstractPreferenceStore store = dataSourceDescriptor.getPreferenceStore();
SimplePreferenceStore store = dataSourceDescriptor.getPreferenceStore();
return
store.contains(OracleConstants.PREF_EXPLAIN_TABLE_NAME) ||
store.contains(OracleConstants.PREF_SUPPORT_ROWID) ||
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册