提交 0b5863a0 编写于 作者: S Serge Rider

#7450 Session manager: plaintext details presentation


Former-commit-id: 459f70c8
上级 dea98a3d
......@@ -16,7 +16,8 @@
*/
package org.jkiss.dbeaver.ext.oracle.model.session;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPObjectWithDescription;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Property;
......@@ -25,7 +26,7 @@ import java.sql.ResultSet;
/**
* Plan
*/
public class OracleServerExecutePlan implements DBPObject {
public class OracleServerExecutePlan implements DBPObjectWithDescription {
private String plan;
......@@ -38,4 +39,10 @@ public class OracleServerExecutePlan implements DBPObject {
public String getPlan() {
return plan;
}
@Nullable
@Override
public String getDescription() {
return plan;
}
}
......@@ -164,12 +164,12 @@ public class OracleServerSessionManager implements DBAServerSessionManager<Oracl
dbStat.setString(1, ((OracleServerSession) serverSession).getSqlId());
dbStat.setLong(2, ((OracleServerSession) serverSession).getSqlChildNumber());
try (JDBCResultSet dbResult = dbStat.executeQuery())
{
List<OracleServerExecutePlan> ExecutePlan = new ArrayList<>();
{
List<OracleServerExecutePlan> planItems = new ArrayList<>();
while (dbResult.next()) {
ExecutePlan.add(new OracleServerExecutePlan(dbResult));
planItems.add(new OracleServerExecutePlan(dbResult));
}
return ExecutePlan;
return planItems;
}
}
} catch (SQLException e) {
......
......@@ -37,5 +37,5 @@ public interface DBAServerSessionDetails {
List<? extends DBPObject> getSessionDetails(DBCSession session, DBAServerSession serverSession) throws DBException;
Class<? extends DBPObject> getDetailsType();
Class<?> getDetailsType();
}
......@@ -29,6 +29,7 @@ public class DatabaseEditorInputFactory implements IElementFactory
public static final String ID_FACTORY = DatabaseEditorInputFactory.class.getName(); //$NON-NLS-1$
static final String TAG_CLASS = "class"; //$NON-NLS-1$
static final String TAG_PROJECT = "project"; //$NON-NLS-1$
static final String TAG_DATA_SOURCE = "data-source"; //$NON-NLS-1$
static final String TAG_NODE = "node"; //$NON-NLS-1$
static final String TAG_NODE_NAME = "node-name"; //$NON-NLS-1$
......@@ -69,6 +70,7 @@ public class DatabaseEditorInputFactory implements IElementFactory
final DBNDatabaseNode node = input.getNavigatorNode();
memento.putString(TAG_CLASS, input.getClass().getName());
memento.putString(TAG_PROJECT, context.getDataSource().getContainer().getProject().getName());
memento.putString(TAG_DATA_SOURCE, context.getDataSource().getContainer().getId());
memento.putString(TAG_NODE, node.getNodeItemPath());
memento.putString(TAG_NODE_NAME, node.getNodeName());
......
......@@ -56,6 +56,7 @@ public class DatabaseLazyEditorInput implements IDatabaseEditorInput
private static final Log log = Log.getLog(DatabaseLazyEditorInput.class);
private final String nodePath;
private DBPProject project;
private String nodeName;
private final String activePageId;
private final String activeFolderId;
......@@ -85,6 +86,8 @@ public class DatabaseLazyEditorInput implements IDatabaseEditorInput
final String inputClass = memento.getString(DatabaseEditorInputFactory.TAG_CLASS);
nodePath = memento.getString(DatabaseEditorInputFactory.TAG_NODE);
nodeName = memento.getString(DatabaseEditorInputFactory.TAG_NODE_NAME);
String projectName = memento.getString(DatabaseEditorInputFactory.TAG_PROJECT);
project = CommonUtils.isEmpty(projectName) ? null : DBWorkbench.getPlatform().getWorkspace().getProject(projectName);
dataSourceId = memento.getString(DatabaseEditorInputFactory.TAG_DATA_SOURCE);
if (nodePath == null || inputClass == null || dataSourceId == null) {
log.error("Corrupted memento"); //$NON-NLS-2$
......@@ -209,12 +212,19 @@ public class DatabaseLazyEditorInput implements IDatabaseEditorInput
public IDatabaseEditorInput initializeRealInput(final DBRProgressMonitor monitor) throws DBException
{
// Get the node path.
dataSource = DBUtils.findDataSource(dataSourceId);
if (project != null) {
dataSource = project.getDataSourceRegistry().getDataSource(dataSourceId);
}
if (dataSource == null) {
dataSource = DBUtils.findDataSource(dataSourceId);
}
if (dataSource == null) {
log.error("Can't find data source '" + dataSourceId + "'"); //$NON-NLS-2$
return null;
}
final DBPProject project = dataSource.getRegistry().getProject();
if (project == null) {
project = dataSource.getRegistry().getProject();
}
final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel();
navigatorModel.ensureProjectLoaded(project);
//dataSourceContainer, project, nodePath, nodeName, activePageId, activeFolderId
......
......@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ui.views.session;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.Viewer;
......@@ -38,8 +39,10 @@ import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.PartInitException;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.dbeaver.model.DBPObjectWithDescription;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.admin.sessions.DBAServerSession;
import org.jkiss.dbeaver.model.admin.sessions.DBAServerSessionDetails;
......@@ -59,6 +62,7 @@ import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor;
import org.jkiss.dbeaver.runtime.properties.PropertyCollector;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.ProgressLoaderVisualizer;
import org.jkiss.dbeaver.ui.controls.autorefresh.AutoRefreshControl;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.SubEditorSite;
......@@ -200,8 +204,20 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
extDetailsItem.setToolTipText(detailsInfo.getDetailsTooltip());
}
DetailsListControl detailsProps = new DetailsListControl(detailsFolder, workbenchPart.getSite(), detailsInfo);
extDetailsItem.setControl(detailsProps);
Class<?> detailsType = detailsInfo.getDetailsType();
if (DBPObjectWithDescription.class.isAssignableFrom(detailsType)) {
StyledText text = new StyledText(detailsFolder, SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
text.setForeground(UIStyles.getDefaultTextForeground());
text.setBackground(UIStyles.getDefaultTextBackground());
text.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
text.setData(detailsInfo);
extDetailsItem.setControl(text);
} else if (DBPObject.class.isAssignableFrom(detailsType)) {
DetailsListControl detailsProps = new DetailsListControl(detailsFolder, workbenchPart.getSite(), detailsInfo);
extDetailsItem.setControl(detailsProps);
} else {
extDetailsItem.setControl(UIUtils.createLabel(detailsFolder, "Unsupported details type: " + detailsType));
}
}
}
}
......@@ -213,8 +229,14 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
CTabItem item = detailsFolder.getItem(detailsFolder.getSelectionIndex());
Object data = item.getData();
if (data instanceof DBAServerSessionDetails) {
DetailsListControl detailsViewer = (DetailsListControl) item.getControl();
detailsViewer.loadData();
Class<?> detailsType = ((DBAServerSessionDetails) data).getDetailsType();
if (DBPObjectWithDescription.class.isAssignableFrom(detailsType)) {
StyledText styledText = (StyledText) item.getControl();
loadPlainTextDetails((DBAServerSessionDetails) data, styledText);
} else {
DetailsListControl detailsViewer = (DetailsListControl) item.getControl();
detailsViewer.loadData();
}
}
}
});
......@@ -226,6 +248,25 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
sashMain.setWeights(new int[]{700, 300});
}
private void loadPlainTextDetails(DBAServerSessionDetails data, StyledText styledText) {
SessionDetailsLoadService loadingService = new SessionDetailsLoadService(data);
LoadingJob.createService(
loadingService,
new ProgressLoaderVisualizer<Collection<DBPObject>>(loadingService, styledText) {
@Override
public void completeLoading(Collection<DBPObject> dbpObjects) {
StringBuilder text = new StringBuilder();
for (DBPObject item : dbpObjects) {
if (item instanceof DBPObjectWithDescription) {
text.append(((DBPObjectWithDescription) item).getDescription());
text.append(GeneralUtils.getDefaultLineSeparator());
}
}
styledText.setText(text.toString());
}
}).schedule();
}
private void updatePreview() {
if (previewFolder.getSelectionIndex() == 0) {
// Show SQL
......@@ -249,8 +290,13 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
CTabItem detailsItem = detailsFolder.getItem(detailsFolder.getSelectionIndex());
Object data = detailsItem.getData();
if (data instanceof DBAServerSessionDetails) {
DetailsListControl detailsListControl = (DetailsListControl) detailsItem.getControl();
detailsListControl.loadData();
if (detailsItem.getControl() instanceof StyledText) {
StyledText styledText = (StyledText) detailsItem.getControl();
loadPlainTextDetails((DBAServerSessionDetails) data, styledText);
} else {
DetailsListControl detailsListControl = (DetailsListControl) detailsItem.getControl();
detailsListControl.loadData();
}
}
}
}
......@@ -499,11 +545,12 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
private DBAServerSessionDetails sessionDetails;
protected DetailsListControl(Composite parent, IWorkbenchSite site, DBAServerSessionDetails sessionDetails) {
DetailsListControl(Composite parent, IWorkbenchSite site, DBAServerSessionDetails sessionDetails) {
super(parent, SWT.SHEET, site, new ListContentProvider());
this.sessionDetails = sessionDetails;
}
@NotNull
@Override
protected String getListConfigId(List<Class<?>> classList) {
return "SessionDetails/" + sessionManager.getDataSource().getContainer().getDriver().getId() + "/" + sessionDetails.getDetailsTitle();
......@@ -526,7 +573,7 @@ public class SessionManagerViewer<SESSION_TYPE extends DBAServerSession>
private DBAServerSessionDetails sessionDetails;
public SessionDetailsLoadService(DBAServerSessionDetails sessionDetails) {
SessionDetailsLoadService(DBAServerSessionDetails sessionDetails) {
super("Load session details " + sessionDetails.getDetailsTitle(), sessionManager.getDataSource());
this.sessionDetails = sessionDetails;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册