提交 9897ddc8 编写于 作者: S serge-rider

Debug tab redesign. Debug pannels support.

上级 7e7003de
......@@ -21,15 +21,10 @@ import org.jkiss.dbeaver.runtime.ide.core.DBeaverIDECore;
public class DBGConstants {
public static final String BUNDLE_SYMBOLIC_NAME = "org.jkiss.dbeaver.debug.core"; //$NON-NLS-1$
public static final String ATTR_NODE_PATH = BUNDLE_SYMBOLIC_NAME + ".ATTR_NODE_PATH"; //$NON-NLS-1$
public static final String ATTR_SCRIPT_TEXT = BUNDLE_SYMBOLIC_NAME + ".ATTR_SCRIPT_TEXT"; //$NON-NLS-1$
public static final String ATTR_SCRIPT_EXECUTE = BUNDLE_SYMBOLIC_NAME + ".ATTR_SCRIPT_EXECUTE"; //$NON-NLS-1$
public static final String ATTR_ATTACH_KIND = BUNDLE_SYMBOLIC_NAME + ".ATTR_ATTACH_KIND"; //$NON-NLS-1$
public static final String ATTR_ATTACH_PROCESS = BUNDLE_SYMBOLIC_NAME + ".ATTACH_PROCESS"; //$NON-NLS-1$
public static final String ATTR_PROCEDURE_NAME = BUNDLE_SYMBOLIC_NAME + ".ATTR_PROCEDURE_NAME"; //$NON-NLS-1$
public static final String ATTR_PROCEDURE_OID = BUNDLE_SYMBOLIC_NAME + ".ATTR_PROCEDURE_OID"; //$NON-NLS-1$
public static final String ATTR_DATASOURCE_ID = BUNDLE_SYMBOLIC_NAME + ".ATTR_DATASOURCE_ID"; //$NON-NLS-1$
public static final String ATTR_DATASOURCE_ID = BUNDLE_SYMBOLIC_NAME + ".ATTR_DATASOURCE_ID"; //$NON-NLS-1$
public static final String ATTR_DEBUG_TYPE = BUNDLE_SYMBOLIC_NAME + ".ATTR_DEBUG_TYPE"; //$NON-NLS-1$
public static final String ATTR_NODE_PATH = "PG.ATTR_NODE_PATH"; //$NON-NLS-1$
public static final String SOURCE_CONTAINER_TYPE_DATASOURCE = BUNDLE_SYMBOLIC_NAME + ".datasourceSourceContainerType"; //$NON-NLS-1$
public static final String BREAKPOINT_ATTRIBUTE_PROCEDURE_OID = BUNDLE_SYMBOLIC_NAME + ".procedureOid"; //$NON-NLS-1$
......
......@@ -30,9 +30,6 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
*/
public interface DBGController {
String ATTACH_KIND_LOCAL = "LOCAL"; //$NON-NLS-1$
String ATTACH_KIND_GLOBAL = "GLOBAL"; //$NON-NLS-1$
DBPDataSourceContainer getDataSourceContainer();
Map<String, Object> getDebugConfiguration();
......
......@@ -199,7 +199,7 @@ public class DebugCore {
public static Map<String, Object> toBreakpointDescriptor(Map<String, Object> attributes) {
HashMap<String, Object> result = new HashMap<>();
result.put(IMarker.LINE_NUMBER, attributes.get(IMarker.LINE_NUMBER));
result.put(DBGConstants.ATTR_PROCEDURE_OID, attributes.get(DBGConstants.ATTR_PROCEDURE_OID));
//result.put(PostgreDebugConstants.ATTR_PROCEDURE_OID, attributes.get(PostgreDebugConstants.ATTR_PROCEDURE_OID));
return result;
}
......
......@@ -22,7 +22,6 @@ import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_DATABASE
import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_DATASOURCE_ID;
import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_NODE_PATH;
import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_PROCEDURE_NAME;
import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_PROCEDURE_OID;
import static org.jkiss.dbeaver.debug.DBGConstants.BREAKPOINT_ATTRIBUTE_SCHEMA_NAME;
import static org.jkiss.dbeaver.debug.DBGConstants.MODEL_IDENTIFIER_DATABASE;
......@@ -31,8 +30,6 @@ import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.Breakpoint;
import org.jkiss.dbeaver.debug.DBGConstants;
import org.jkiss.dbeaver.debug.DBGController;
import org.jkiss.dbeaver.debug.core.DebugCore;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.struct.DBSObject;
......@@ -85,10 +82,6 @@ public class DatabaseBreakpoint extends Breakpoint implements IDatabaseBreakpoin
setAttribute(BREAKPOINT_ATTRIBUTE_PROCEDURE_NAME, procedureName);
}
protected void setProcedureOid(String procedureOid) throws CoreException {
setAttribute(DBGConstants.ATTR_PROCEDURE_OID, procedureOid);
}
protected void setNodePath(String nodePath) throws CoreException {
setAttribute(BREAKPOINT_ATTRIBUTE_NODE_PATH, nodePath);
}
......@@ -115,7 +108,9 @@ public class DatabaseBreakpoint extends Breakpoint implements IDatabaseBreakpoin
if (context.isEmpty()) {
return;
}
Object oid = context.get(DBGConstants.ATTR_PROCEDURE_OID);
attributes.put(DBGConstants.ATTR_PROCEDURE_OID, String.valueOf(oid));
/*
Object oid = context.get(PostgreDebugConstants.ATTR_PROCEDURE_OID);
attributes.put(PostgreDebugConstants.ATTR_PROCEDURE_OID, String.valueOf(oid));
*/
}
}
......@@ -24,7 +24,6 @@ import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
......@@ -62,11 +61,6 @@ public class DatabaseDebugConfigurationTab extends AbstractLaunchConfigurationTa
private Text driverText;
/**
* Modify listener that simply updates the owning launch configuration
* dialog.
*/
protected ModifyListener modifyListener = evt -> scheduleUpdateJob();
private SelectDataSourceCombo connectionCombo;
private Group typesGroup;
private Composite panelPlaceholder;
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2018 Serge Rider (serge@jkiss.org)
* Copyright (C) 2017-2018 Alexander Fedorov (alexander.fedorov@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.ext.postgresql.debug;
import org.jkiss.dbeaver.debug.DBGConstants;
public class PostgreDebugConstants {
public static final String ATTR_SCRIPT_TEXT = "PG.ATTR_SCRIPT_TEXT"; //$NON-NLS-1$
public static final String ATTR_SCRIPT_EXECUTE = "PG.ATTR_SCRIPT_EXECUTE"; //$NON-NLS-1$
public static final String ATTR_ATTACH_KIND = "PG.ATTR_ATTACH_KIND"; //$NON-NLS-1$
public static final String ATTR_ATTACH_PROCESS = "PG.ATTACH_PROCESS"; //$NON-NLS-1$
public static final String ATTR_PROCEDURE_NAME = "PG.ATTR_PROCEDURE_NAME"; //$NON-NLS-1$
public static final String ATTR_PROCEDURE_OID = "PG.ATTR_PROCEDURE_OID"; //$NON-NLS-1$
public static final String ATTACH_KIND_LOCAL = "LOCAL"; //$NON-NLS-1$
public static final String ATTACH_KIND_GLOBAL = "GLOBAL"; //$NON-NLS-1$
}
......@@ -24,6 +24,7 @@ import org.eclipse.osgi.util.NLS;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.debug.DBGConstants;
import org.jkiss.dbeaver.debug.core.DebugCore;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.ext.postgresql.debug.internal.PostgreDebugCoreMessages;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDatabase;
......@@ -62,10 +63,10 @@ public class PostgreSqlDebugCore {
ILaunchConfigurationWorkingCopy workingCopy = DebugCore.createConfiguration(container, CONFIGURATION_TYPE,
name);
workingCopy.setAttribute(DBGConstants.ATTR_DATASOURCE_ID, dataSourceContainer.getId());
workingCopy.setAttribute(DBGConstants.ATTR_PROCEDURE_OID, String.valueOf(procedure.getObjectId()));
workingCopy.setAttribute(DBGConstants.ATTR_PROCEDURE_NAME, procedureName);
workingCopy.setAttribute(PostgreDebugConstants.ATTR_PROCEDURE_OID, String.valueOf(procedure.getObjectId()));
workingCopy.setAttribute(PostgreDebugConstants.ATTR_PROCEDURE_NAME, procedureName);
workingCopy.setAttribute(DBGConstants.ATTR_SCRIPT_TEXT, DebugCore.composeScriptText(procedure));
workingCopy.setAttribute(PostgreDebugConstants.ATTR_SCRIPT_TEXT, DebugCore.composeScriptText(procedure));
final DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel();
DBNDatabaseNode node = navigatorModel.getNodeByObject(new VoidProgressMonitor(), procedure, false);
workingCopy.setAttribute(DBGConstants.ATTR_NODE_PATH, node.getNodeItemPath());
......
......@@ -18,8 +18,8 @@
package org.jkiss.dbeaver.ext.postgresql.debug.internal;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.debug.DBGConstants;
import org.jkiss.dbeaver.debug.DBGResolver;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -63,7 +63,7 @@ public class PostgreResolver implements DBGResolver {
HashMap<String, Object> context = new HashMap<String, Object>();
if (databaseObject instanceof PostgreProcedure) {
PostgreProcedure procedure = (PostgreProcedure) databaseObject;
context.put(DBGConstants.ATTR_PROCEDURE_OID, procedure.getObjectId());
context.put(PostgreDebugConstants.ATTR_PROCEDURE_OID, procedure.getObjectId());
}
return context;
}
......
......@@ -21,6 +21,7 @@ package org.jkiss.dbeaver.ext.postgresql.debug.internal.impl;
import org.eclipse.core.resources.IMarker;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.debug.*;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.utils.CommonUtils;
......@@ -40,11 +41,11 @@ public class PostgreDebugController extends DBGBaseController {
try {
PostgreDebugSession pgSession = new PostgreDebugSession(monitor,this);
int oid = CommonUtils.toInt(configuration.get(DBGConstants.ATTR_PROCEDURE_OID));
int pid = CommonUtils.toInt(configuration.get(DBGConstants.ATTR_ATTACH_PROCESS));
String kind = String.valueOf(configuration.get(DBGConstants.ATTR_ATTACH_KIND));
boolean global = DBGController.ATTACH_KIND_GLOBAL.equals(kind);
String call = (String) configuration.get(DBGConstants.ATTR_SCRIPT_TEXT);
int oid = CommonUtils.toInt(configuration.get(PostgreDebugConstants.ATTR_PROCEDURE_OID));
int pid = CommonUtils.toInt(configuration.get(PostgreDebugConstants.ATTR_ATTACH_PROCESS));
String kind = String.valueOf(configuration.get(PostgreDebugConstants.ATTR_ATTACH_KIND));
boolean global = PostgreDebugConstants.ATTACH_KIND_GLOBAL.equals(kind);
String call = (String) configuration.get(PostgreDebugConstants.ATTR_SCRIPT_TEXT);
pgSession.attach(monitor, oid, pid, global, call);
return pgSession;
......@@ -55,7 +56,7 @@ public class PostgreDebugController extends DBGBaseController {
@Override
public DBGBreakpointDescriptor describeBreakpoint(Map<String, Object> attributes) {
Object oid = attributes.get(DBGConstants.ATTR_PROCEDURE_OID);
Object oid = attributes.get(PostgreDebugConstants.ATTR_PROCEDURE_OID);
Object lineNumber = attributes.get(IMarker.LINE_NUMBER);
long parsed = Long.parseLong(String.valueOf(lineNumber));
return new PostgreDebugBreakpointDescriptor(oid, parsed, false);
......
......@@ -22,9 +22,8 @@ import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.InputDialog;
import org.jkiss.dbeaver.debug.DBGConstants;
import org.jkiss.dbeaver.debug.DBGController;
import org.jkiss.dbeaver.debug.ui.DatabaseLaunchShortcut;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.ext.postgresql.debug.core.PostgreSqlDebugCore;
import org.jkiss.dbeaver.model.struct.DBSObject;
......@@ -39,8 +38,8 @@ public class PgSqlGlobalLaunchShortcut extends DatabaseLaunchShortcut {
@Override
protected ILaunchConfiguration createConfiguration(DBSObject launchable) throws CoreException {
ILaunchConfigurationWorkingCopy workingCopy = PostgreSqlDebugCore.createConfiguration(launchable);
workingCopy.setAttribute(DBGConstants.ATTR_ATTACH_KIND, DBGController.ATTACH_KIND_GLOBAL);
String pid = workingCopy.getAttribute(DBGConstants.ATTR_ATTACH_PROCESS, (String)null);
workingCopy.setAttribute(PostgreDebugConstants.ATTR_ATTACH_KIND, PostgreDebugConstants.ATTACH_KIND_GLOBAL);
String pid = workingCopy.getAttribute(PostgreDebugConstants.ATTR_ATTACH_PROCESS, (String)null);
String dialogTitle = "Specify PID";
String dialogMessage = "Specify PID to attach. Use '-1' to allow any PID";
InputDialog dialog = new InputDialog(getShell(), dialogTitle, dialogMessage, pid, newText -> {
......@@ -61,15 +60,15 @@ public class PgSqlGlobalLaunchShortcut extends DatabaseLaunchShortcut {
return null;
}
String modified = dialog.getValue();
workingCopy.setAttribute(DBGConstants.ATTR_ATTACH_PROCESS, modified);
workingCopy.setAttribute(PostgreDebugConstants.ATTR_ATTACH_PROCESS, modified);
return workingCopy.doSave();
}
@Override
protected boolean isCandidate(ILaunchConfiguration config, DBSObject launchable, Map<String, Object> databaseContext) {
try {
String kind = config.getAttribute(DBGConstants.ATTR_ATTACH_KIND, (String)null);
if (!DBGController.ATTACH_KIND_LOCAL.equals(kind)) {
String kind = config.getAttribute(PostgreDebugConstants.ATTR_ATTACH_KIND, (String)null);
if (!PostgreDebugConstants.ATTACH_KIND_LOCAL.equals(kind)) {
return false;
}
} catch (CoreException e) {
......
......@@ -22,10 +22,9 @@ import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.ui.IWorkbenchPartSite;
import org.jkiss.dbeaver.debug.DBGConstants;
import org.jkiss.dbeaver.debug.DBGController;
import org.jkiss.dbeaver.debug.ui.DatabaseLaunchShortcut;
import org.jkiss.dbeaver.debug.ui.DatabaseScriptDialog;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.ext.postgresql.debug.core.PostgreSqlDebugCore;
import org.jkiss.dbeaver.model.struct.DBSObject;
......@@ -40,9 +39,9 @@ public class PgSqlLocalLaunchShortcut extends DatabaseLaunchShortcut {
@Override
protected ILaunchConfiguration createConfiguration(DBSObject launchable) throws CoreException {
ILaunchConfigurationWorkingCopy workingCopy = PostgreSqlDebugCore.createConfiguration(launchable);
workingCopy.setAttribute(DBGConstants.ATTR_ATTACH_KIND, DBGController.ATTACH_KIND_LOCAL);
workingCopy.setAttribute(PostgreDebugConstants.ATTR_ATTACH_KIND, PostgreDebugConstants.ATTACH_KIND_LOCAL);
IWorkbenchPartSite site = getWorkbenchPartSite();
String script = workingCopy.getAttribute(DBGConstants.ATTR_SCRIPT_TEXT, "");
String script = workingCopy.getAttribute(PostgreDebugConstants.ATTR_SCRIPT_TEXT, "");
String inputName = "Script";
DatabaseScriptDialog dialog = new DatabaseScriptDialog(getShell(), site, inputName, script, launchable);
dialog.create();
......@@ -54,15 +53,15 @@ public class PgSqlLocalLaunchShortcut extends DatabaseLaunchShortcut {
return null;
}
String modified = dialog.getScriptTextValue();
workingCopy.setAttribute(DBGConstants.ATTR_SCRIPT_TEXT, modified);
workingCopy.setAttribute(PostgreDebugConstants.ATTR_SCRIPT_TEXT, modified);
return workingCopy.doSave();
}
@Override
protected boolean isCandidate(ILaunchConfiguration config, DBSObject launchable, Map<String, Object> databaseContext) {
try {
String kind = config.getAttribute(DBGConstants.ATTR_ATTACH_KIND, (String)null);
if (!DBGController.ATTACH_KIND_LOCAL.equals(kind)) {
String kind = config.getAttribute(PostgreDebugConstants.ATTR_ATTACH_KIND, (String)null);
if (!PostgreDebugConstants.ATTACH_KIND_LOCAL.equals(kind)) {
return false;
}
} catch (CoreException e) {
......
......@@ -19,26 +19,47 @@
package org.jkiss.dbeaver.ext.postgresql.debug.ui.internal;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.jkiss.dbeaver.debug.ui.DBGConfigurationPanel;
import org.jkiss.dbeaver.ext.postgresql.debug.PostgreDebugConstants;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.ui.UIUtils;
import java.util.Map;
public class PostgreDebugPanelFunction implements DBGConfigurationPanel {
private Button kindLocal;
private Button kindGlobal;
@Override
public void createPanel(Composite parent) {
Button kindLocal = new Button(parent, SWT.RADIO);
kindLocal.setText("Local");
Button kindGlobal = new Button(parent, SWT.RADIO);
kindGlobal.setText("Global");
{
UIUtils.createControlGroup(parent, "Attach type", 2, GridData.FILL_HORIZONTAL, SWT.DEFAULT);
kindLocal = new Button(parent, SWT.RADIO);
kindLocal.setText("Local");
kindGlobal = new Button(parent, SWT.RADIO);
kindGlobal.setText("Global");
}
{
Group functionGroup = UIUtils.createControlGroup(parent, "Function", 2, GridData.VERTICAL_ALIGN_BEGINNING, SWT.DEFAULT);
UIUtils.createLabelText(functionGroup, "Function", "", SWT.BORDER | SWT.READ_ONLY, new GridData(GridData.FILL_HORIZONTAL));
UIUtils.createLabelText(functionGroup, "Process ID", "", SWT.BORDER | SWT.READ_ONLY, new GridData(GridData.FILL_HORIZONTAL));
}
}
@Override
public void loadConfiguration(DBPDataSourceContainer dataSource, Map<String, Object> configuration) {
Object kind = configuration.get(PostgreDebugConstants.ATTR_ATTACH_KIND);
if (PostgreDebugConstants.ATTACH_KIND_GLOBAL.equals(kind)) {
kindGlobal.setSelection(true);
} else {
kindLocal.setSelection(true);
}
}
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册