提交 02b84e65 编写于 作者: S Serge Rider

Transformer settings.

Radix & Epoch time transformers
上级 7b01e329
......@@ -1236,8 +1236,16 @@ public class ResultSetViewer extends Viewer
@Override
public void run() {
if (isChecked()) {
getTransformSettings().setCustomTransformer(descriptor.getId());
saveTransformerSettings();
final DBVTransformSettings settings = getTransformSettings();
final String oldCustomTransformer = settings.getCustomTransformer();
settings.setCustomTransformer(descriptor.getId());
TransformerSettingsDialog settingsDialog = new TransformerSettingsDialog(
ResultSetViewer.this, attr, settings);
if (settingsDialog.open() == IDialogConstants.OK_ID) {
saveTransformerSettings();
} else {
settings.setCustomTransformer(oldCustomTransformer);
}
}
}
};
......
......@@ -77,8 +77,8 @@ class TransformerSettingsDialog extends BaseDialog {
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();
......@@ -105,7 +105,7 @@ class TransformerSettingsDialog extends BaseDialog {
@Override
protected void okPressed()
{
final Map<Object, Object> properties = propertySource.getProperties();
final Map<Object, Object> properties = propertySource.getPropertiesWithDefaults();
for (Map.Entry<Object, Object> prop : properties.entrySet()) {
if (prop.getValue() != null) {
settings.setTransformOption(prop.getKey().toString(), prop.getValue().toString());
......
......@@ -20,11 +20,13 @@ package org.jkiss.dbeaver.model.impl.data.transformers;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.*;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.impl.data.ProxyValueHandler;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.utils.CommonUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
......@@ -37,24 +39,47 @@ import java.util.Map;
*/
public class EpochTimeAttributeTransformer implements DBDAttributeTransformer {
static final Log log = Log.getLog(EpochTimeAttributeTransformer.class);
private static final String PROP_UNIT = "unit";
enum EpochUnit {
seconds,
milliseconds,
nanoseconds
}
@Override
public void transformAttribute(@NotNull DBCSession session, @NotNull DBDAttributeBinding attribute, @NotNull List<Object[]> rows, @NotNull Map<String, String> options) throws DBException {
// TODO: Change attribute type (to DATETIME)
attribute.setValueHandler(new EpochValueHandler(attribute.getValueHandler()));
EpochUnit unit = EpochUnit.milliseconds;
if (options.containsKey(PROP_UNIT)) {
try {
unit = EpochUnit.valueOf(options.get(PROP_UNIT));
} catch (IllegalArgumentException e) {
log.error("Bad unit option", e);
}
}
attribute.setValueHandler(new EpochValueHandler(attribute.getValueHandler(), unit));
}
private class EpochValueHandler extends ProxyValueHandler {
public EpochValueHandler(DBDValueHandler target) {
private final EpochUnit unit;
public EpochValueHandler(DBDValueHandler target, EpochUnit unit) {
super(target);
this.unit = unit;
}
@NotNull
@Override
public String getValueDisplayString(@NotNull DBSTypedObject column, @Nullable Object value, @NotNull DBDDisplayFormat format) {
if (value instanceof Number) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH).format(
new Date(((Number) value).longValue()));
long dateValue = ((Number) value).longValue();
switch (unit) {
case seconds: dateValue *= 1000; break;
case nanoseconds: dateValue /= 1000; break;
}
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(
new Date(dateValue));
}
return DBUtils.getDefaultValueDisplayString(value, format);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册