提交 74f8bc6e 编写于 作者: S Serge Rider

Transformer settings editor

上级 8f3738e5
......@@ -2417,7 +2417,8 @@
custom="true">
<type kind="NUMERIC"/>
<propertyGroup label="Properties">
<property id="radix" label="Radix" type="integer" description="Number radix" defaultValue="10" required="true" validValues="2,8,10,16,32"/>
<property id="radix" label="Radix" type="string" description="Number radix" defaultValue="16" required="true" validValues="2,8,10,16,32"/>
<property id="bits" label="Bits" type="integer" description="Visible bit number" defaultValue="32" required="true"/>
<property id="prefix" label="Show prefix" type="boolean" description="Shows radix prefix (0x for hex)" defaultValue="false" required="true"/>
</propertyGroup>
</transformer>
......
......@@ -41,29 +41,30 @@ public class PropertySourceCustom implements DBPPropertySource {
{
}
public PropertySourceCustom(Collection<? extends DBPPropertyDescriptor> properties, Map<Object, Object> values)
public PropertySourceCustom(Collection<? extends DBPPropertyDescriptor> properties, Map<?, ?> values)
{
addProperties(properties);
setValues(values);
}
public void setValues(Map<Object, Object> values)
public void setValues(Map<?, ?> values)
{
this.originalValues = new HashMap<>();
// Set only allowed properties + transform property types
for (Map.Entry<Object, Object> value : values.entrySet()) {
Object propValue = value.getValue();
for (DBPPropertyDescriptor prop : props) {
if (prop.getId().equals(value.getKey())) {
if (propValue instanceof String) {
propValue = GeneralUtils.convertString((String) value.getValue(), prop.getDataType());
if (values != null) {
for (Map.Entry<?, ?> value : values.entrySet()) {
Object propValue = value.getValue();
for (DBPPropertyDescriptor prop : props) {
if (prop.getId().equals(value.getKey())) {
if (propValue instanceof String) {
propValue = GeneralUtils.convertString((String) value.getValue(), prop.getDataType());
}
originalValues.put(value.getKey(), propValue);
break;
}
originalValues.put(value.getKey(), propValue);
break;
}
}
}
}
public void setDefaultValues(Map<Object, Object> defaultValues)
......
......@@ -1246,7 +1246,14 @@ public class ResultSetViewer extends Viewer
}
if (customTransformer != null && !CommonUtils.isEmpty(customTransformer.getProperties())) {
manager.add(new Action("Settings ...") {
@Override
public void run() {
TransformerSettingsDialog settingsDialog = new TransformerSettingsDialog(
ResultSetViewer.this, attr, transformSettings);
if (settingsDialog.open() == IDialogConstants.OK_ID) {
dataSource.getContainer().persistConfiguration();
}
}
});
}
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 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.ui.controls.resultset;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.model.data.DBDAttributeTransformerDescriptor;
import org.jkiss.dbeaver.model.virtual.DBVTransformSettings;
import org.jkiss.dbeaver.runtime.properties.PropertySourceCustom;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog;
import org.jkiss.dbeaver.ui.properties.PropertyTreeViewer;
import org.jkiss.utils.CommonUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
class TransformerSettingsDialog extends BaseDialog {
static final Log log = Log.getLog(TransformerSettingsDialog.class);
private final ResultSetViewer viewer;
private final DBDAttributeBinding attr;
private final DBVTransformSettings settings;
private PropertyTreeViewer propertiesEditor;
private PropertySourceCustom propertySource;
public TransformerSettingsDialog(ResultSetViewer viewer, DBDAttributeBinding attr, DBVTransformSettings settings) {
super(viewer.getControl().getShell(), "Transformer settings", null);
this.viewer = viewer;
this.attr = attr;
this.settings = settings;
}
@Override
protected Composite createDialogArea(Composite parent)
{
Composite composite = super.createDialogArea(parent);
final DBPDataSource dataSource = viewer.getDataContainer() == null ? null : viewer.getDataContainer().getDataSource();
Collection<? extends DBPPropertyDescriptor> properties = Collections.emptyList();
final DBDAttributeTransformerDescriptor transformer;
if (dataSource != null && !CommonUtils.isEmpty(settings.getCustomTransformer())) {
transformer = dataSource.getContainer().getApplication().getValueHandlerRegistry().getTransformer(settings.getCustomTransformer());
if (transformer != null) {
properties = transformer.getProperties();
}
} else {
transformer = null;
}
if (transformer != null) {
final Composite placeholder = UIUtils.createControlGroup(composite, "Transformer", 2, GridData.FILL_HORIZONTAL, -1);
UIUtils.createLabelText(placeholder, "Name", transformer.getName(), SWT.READ_ONLY);
UIUtils.createLabelText(placeholder, "Info", transformer.getDescription(), SWT.READ_ONLY | SWT.WRAP);
}
Map<String, String> transformOptions = settings.getTransformOptions();
if (transformOptions == null) {
transformOptions = Collections.emptyMap();
}
propertiesEditor = new PropertyTreeViewer(composite, SWT.BORDER);
propertySource = new PropertySourceCustom(
properties,
transformOptions);
propertiesEditor.loadProperties(propertySource);
propertiesEditor.getControl().setFocus();
return parent;
}
@Override
protected void createButtonsForButtonBar(Composite parent)
{
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected void okPressed()
{
super.okPressed();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册