/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* 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.ui.controls.resultset;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.EditTextDialog;
import org.jkiss.dbeaver.ui.dialogs.ViewExceptionDialog;
import org.jkiss.utils.CommonUtils;
import java.util.List;
class StatusDetailsDialog extends EditTextDialog {
private static final String DIALOG_ID = "DBeaver.StatusDetailsDialog";//$NON-NLS-1$
private final ResultSetViewer resultSetViewer;
private final List<Throwable> warnings;
private Table warnTable;
public StatusDetailsDialog(ResultSetViewer resultSetViewer, String message, List<Throwable> warnings) {
super(resultSetViewer.getControl().getShell(), "Status details", message);
this.resultSetViewer = resultSetViewer;
this.warnings = warnings;
textHeight = 100;
setReadonly(true);
}
@Override
protected IDialogSettings getDialogBoundsSettings()
{
return UIUtils.getDialogSettings(DIALOG_ID);
}
@Override
protected void createControlsBeforeText(Composite composite) {
UIUtils.createControlLabel(composite, "Message");
}
@Override
protected Composite createDialogArea(Composite parent) {
Composite composite = super.createDialogArea(parent);
if (!CommonUtils.isEmpty(warnings)) {
// Create warnings table
UIUtils.createControlLabel(composite, "Warnings");
warnTable = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION);
TableColumn exColumn = UIUtils.createTableColumn(warnTable, SWT.NONE, "Exception");
TableColumn msgColumn = UIUtils.createTableColumn(warnTable, SWT.NONE, "Message");
warnTable.setLinesVisible(true);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.minimumHeight = 100;
warnTable.setLayoutData(gd);
for (Throwable ex : warnings) {
TableItem warnItem = new TableItem(warnTable, SWT.NONE);
warnItem.setText(0, ex.getClass().getName());
if (ex.getMessage() != null) {
warnItem.setText(1, ex.getMessage());
}
warnItem.setData(ex);
}
exColumn.pack();
msgColumn.pack();
warnTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
openWarning();
}
});
warnTable.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_RETURN) {
openWarning();
e.doit = false;
}
}
});
}
return composite;
}
private void openWarning() {
TableItem[] selection = warnTable.getSelection();
if (selection.length == 0) {
return;
}
Throwable error = (Throwable) selection[0].getData();
ViewExceptionDialog veDialog = new ViewExceptionDialog(getShell(), error);
veDialog.open();
}
}