Search in sources :

Example 6 with DBDValueError

use of org.jkiss.dbeaver.model.impl.data.DBDValueError in project dbeaver by dbeaver.

the class ValueViewerPanel method viewValue.

private void viewValue(boolean forceRefresh) {
    if (valueSaving) {
        return;
    }
    if (valueManager == null || valueEditor == null) {
        forceRefresh = true;
    }
    if (forceRefresh) {
        cleanupPanel();
        referenceValueEditor = new ReferenceValueEditor(previewController, valueEditor);
        final boolean referenceValue = referenceValueEditor.isReferenceValue();
        if (referenceValue) {
            previewController.setEditType(IValueController.EditType.INLINE);
        } else {
            previewController.setEditType(IValueController.EditType.PANEL);
        }
        // Create a new one
        valueManager = previewController.getValueManager();
        try {
            valueEditor = valueManager.createEditor(previewController);
        } catch (Throwable e) {
            DBWorkbench.getPlatformUI().showError("Value preview", "Can't create value viewer", e);
            return;
        }
        if (valueEditor != null) {
            try {
                valueEditor.createControl();
            } catch (Exception e) {
                log.error(e);
            }
            boolean singleLineEditor = false;
            Control control = valueEditor.getControl();
            if (control != null) {
                singleLineEditor = control instanceof Combo || control instanceof CCombo || control instanceof Button || (control instanceof Text && (control.getStyle() & SWT.MULTI) == 0);
                UIUtils.addFocusTracker(presentation.getController().getSite(), VALUE_VIEW_CONTROL_ID, control);
                presentation.getController().lockActionsByFocus(control);
            }
            if (referenceValue || singleLineEditor) {
                GridLayout gl = new GridLayout(1, false);
                viewPlaceholder.setLayout(gl);
                valueEditor.getControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
                referenceValueEditor.setValueEditor(valueEditor);
                referenceValueEditor.createEditorSelector(viewPlaceholder);
            } else {
                viewPlaceholder.setLayout(new FillLayout());
            }
        } else {
            final Composite placeholder = UIUtils.createPlaceholder(viewPlaceholder, 1);
            placeholder.setBackground(placeholder.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
            placeholder.addPaintListener(e -> {
                Rectangle bounds = placeholder.getBounds();
                String message = "No editor for [" + previewController.getValueType().getTypeName() + "]";
                Point ext = e.gc.textExtent(message);
                e.gc.drawText(message, (bounds.width - ext.x) / 2, bounds.height / 3 + 20);
            });
            referenceValueEditor = null;
        }
        viewPlaceholder.layout();
    }
    if (valueEditor instanceof BaseValueEditor) {
        ((BaseValueEditor) valueEditor).setAutoSaveEnabled(false);
    }
    if (valueEditor != null) {
        try {
            Object newValue = previewController.getValue();
            if (newValue instanceof DBDValueError) {
            // Error value. Do not populate it in value viewer
            } else if (newValue instanceof DBDValue) {
                // Do not check for difference
                valueEditor.primeEditorValue(newValue);
            } else {
                Object oldValue = null;
                try {
                    if (previewController.getExecutionContext() != null) {
                        oldValue = valueEditor.extractEditorValue();
                    }
                } catch (Throwable e) {
                // Some error extracting current value
                // This may happen if we were disconnected
                }
                if (forceRefresh || !CommonUtils.equalObjects(oldValue, newValue)) {
                    valueEditor.primeEditorValue(newValue);
                }
            }
        } catch (DBException e) {
            log.error(e);
        }
        valueEditor.setDirty(false);
    }
    if (valueEditor instanceof BaseValueEditor) {
        ((BaseValueEditor) valueEditor).setAutoSaveEnabled(true);
    }
}
Also used : DBException(org.jkiss.dbeaver.DBException) Rectangle(org.eclipse.swt.graphics.Rectangle) CCombo(org.eclipse.swt.custom.CCombo) FillLayout(org.eclipse.swt.layout.FillLayout) Point(org.eclipse.swt.graphics.Point) ReferenceValueEditor(org.jkiss.dbeaver.ui.data.editors.ReferenceValueEditor) DBException(org.jkiss.dbeaver.DBException) BaseValueEditor(org.jkiss.dbeaver.ui.data.editors.BaseValueEditor) GridLayout(org.eclipse.swt.layout.GridLayout) CCombo(org.eclipse.swt.custom.CCombo) DBDValue(org.jkiss.dbeaver.model.data.DBDValue) GridData(org.eclipse.swt.layout.GridData) DBDValueError(org.jkiss.dbeaver.model.impl.data.DBDValueError)

Aggregations

DBDValueError (org.jkiss.dbeaver.model.impl.data.DBDValueError)6 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Map (java.util.Map)2 CCombo (org.eclipse.swt.custom.CCombo)2 Point (org.eclipse.swt.graphics.Point)2 Rectangle (org.eclipse.swt.graphics.Rectangle)2 FillLayout (org.eclipse.swt.layout.FillLayout)2 GridData (org.eclipse.swt.layout.GridData)2 GridLayout (org.eclipse.swt.layout.GridLayout)2 Nullable (org.jkiss.code.Nullable)2 DBException (org.jkiss.dbeaver.DBException)2 Log (org.jkiss.dbeaver.Log)2 ModelPreferences (org.jkiss.dbeaver.ModelPreferences)2 DBUtils (org.jkiss.dbeaver.model.DBUtils)2 DBDAttributeBinding (org.jkiss.dbeaver.model.data.DBDAttributeBinding)2 DBDDataReceiver (org.jkiss.dbeaver.model.data.DBDDataReceiver)2 DBDDataReceiverInteractive (org.jkiss.dbeaver.model.data.DBDDataReceiverInteractive)2 DBDValue (org.jkiss.dbeaver.model.data.DBDValue)2