未验证 提交 3d986bf2 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #3289 from dbeaver/2357-omit-header-should-be-on-for-procedure-under-debug

#2357 Omit header should be on for procedure under debug
......@@ -83,6 +83,8 @@ import java.util.List;
public class EntityEditor extends MultiPageDatabaseEditor
implements IPropertyChangeReflector, IProgressControlProvider, ISaveablePart2, ITabbedFolderContainer, IDataSourceContainerProvider, IEntityEditorContext
{
public static final String ID = "org.jkiss.dbeaver.ui.editors.entity.EntityEditor"; //$NON-NLS-1$
private static final Log log = Log.getLog(EntityEditor.class);
private static class EditorDefaults {
......
......@@ -6,7 +6,10 @@ Bundle-Version: 1.0.10
Bundle-Release-Date: 20180416
Bundle-Vendor: %Bundle-Vendor
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.runtime,
Require-Bundle: org.eclipse.osgi.services,
org.eclipse.e4.core.services,
org.eclipse.e4.core.contexts,
org.eclipse.core.runtime,
org.eclipse.debug.core;visibility:=reexport,
org.jkiss.dbeaver.model;visibility:=reexport,
org.jkiss.dbeaver.runtime.ide.core,
......
......@@ -43,9 +43,11 @@ import org.jkiss.dbeaver.debug.DBGException;
import org.jkiss.dbeaver.debug.DBGResolver;
import org.jkiss.dbeaver.debug.core.model.DatabaseDebugTarget;
import org.jkiss.dbeaver.debug.core.model.DatabaseStackFrame;
import org.jkiss.dbeaver.debug.internal.core.DebugCoreActivator;
import org.jkiss.dbeaver.debug.internal.core.DebugCoreMessages;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -54,6 +56,7 @@ import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedure;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameter;
import org.jkiss.dbeaver.runtime.ide.core.DBeaverIDECore;
import org.jkiss.dbeaver.utils.GeneralUtils;
public class DebugCore {
......@@ -312,12 +315,16 @@ public class DebugCore {
final DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel();
DBNDatabaseNode node = navigatorModel.getNodeByObject(dbsObject);
if (node != null) {
return node.getNodeItemPath();
String nodePath = node.getNodeItemPath();
DebugCore.postDebuggerSourceEvent(nodePath);
return nodePath;
}
}
if (object instanceof String) {
// well, let's be positive and assume it's a node path already
return (String) object;
String nodePath = (String) object;
DebugCore.postDebuggerSourceEvent(nodePath);
return nodePath;
}
return null;
}
......@@ -328,5 +335,10 @@ public class DebugCore {
result.put(DBGController.PROCEDURE_OID, attributes.get(BREAKPOINT_ATTRIBUTE_PROCEDURE_OID));
return result;
}
public static void postDebuggerSourceEvent(String nodePath) {
String encoded = GeneralUtils.encodeTopic(DBPScriptObject.OPTION_DEBUGGER_SOURCE);
DebugCoreActivator.getDefault().postEvent(encoded, nodePath);
}
}
......@@ -18,6 +18,11 @@
package org.jkiss.dbeaver.debug.internal.core;
import javax.inject.Inject;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
......@@ -26,6 +31,8 @@ public class DebugCoreActivator implements BundleActivator {
private static DebugCoreActivator activator;
private static BundleContext bundleContext;
private IEventBroker eventBroker;
public static DebugCoreActivator getDefault() {
return activator;
}
......@@ -38,13 +45,18 @@ public class DebugCoreActivator implements BundleActivator {
public void start(BundleContext context) throws Exception {
bundleContext = context;
activator = this;
IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(bundleContext);
eventBroker = serviceContext.get(IEventBroker.class);
}
@Override
public void stop(BundleContext context) throws Exception {
activator = null;
bundleContext = null;
}
public void postEvent(String topic, Object data) {
eventBroker.post(topic, data);
}
}
......@@ -47,8 +47,8 @@ import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.navigator.DBNRoot;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditor;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditorInput;
public class DatabaseDebugModelPresentation extends LabelProvider implements IDebugModelPresentationExtension {
......@@ -169,16 +169,18 @@ public class DatabaseDebugModelPresentation extends LabelProvider implements IDe
protected IEditorInput createEditorInput(DBNDatabaseNode dbnNode) {
EntityEditorInput editorInput = new EntityEditorInput(dbnNode);
editorInput.setAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE, Boolean.TRUE);
// FIXME:AF: how to retrieve it? probably org.jkiss.dbeaver.databaseor and EntityEditorsRegistry can help
// String folderId = "postgresql.source.view";
// editorInput.setDefaultFolderId(folderId);
DebugEditorAdvisor editorAdvisor = DebugUI.findEditorAdvisor(dbnNode.getDataSourceContainer());
if (editorAdvisor != null) {
String sourceFolderId = editorAdvisor.getSourceFolderId();
editorInput.setDefaultFolderId(sourceFolderId);
}
DebugCore.postDebuggerSourceEvent(dbnNode.getNodeItemPath());
return editorInput;
}
@Override
public String getEditorId(IEditorInput input, Object element) {
// FIXME:AF: is there a constant anywhere?
return "org.jkiss.dbeaver.ui.editors.entity.EntityEditor";
return EntityEditor.ID;
}
@Override
......
......@@ -181,6 +181,7 @@ public abstract class DatabaseLaunchShortcut implements ILaunchShortcut2 {
}
}
if (config != null) {
DebugCore.postDebuggerSourceEvent(DebugCore.extractNodePath(config));
DebugUITools.launch(config, mode);
}
}
......
/*
* 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.debug.ui;
public interface DebugEditorAdvisor {
String getSourceFolderId();
}
......@@ -18,11 +18,13 @@
package org.jkiss.dbeaver.debug.ui;
import org.eclipse.core.runtime.Adapters;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.struct.DBSObject;
public class DebugUI {
......@@ -31,6 +33,14 @@ public class DebugUI {
private static final Log log = Log.getLog(DebugUI.class);
public static DebugEditorAdvisor findEditorAdvisor(DBPDataSourceContainer dataSourceContainer) {
DebugEditorAdvisor advisor = Adapters.adapt(dataSourceContainer, DebugEditorAdvisor.class);
if (advisor != null) {
return advisor;
}
return null;
}
public static DBSObject extractDatabaseObject(IEditorPart editor) {
if (editor != null) {
IEditorInput editorInput = editor.getEditorInput();
......
......@@ -32,7 +32,6 @@ public class PostgreDebugAdapterFactory implements IAdapterFactory {
private static final Class<?>[] CLASSES = new Class[] { DBGController.class, DBGResolver.class };
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adapterType == DBGController.class) {
......@@ -45,7 +44,7 @@ public class PostgreDebugAdapterFactory implements IAdapterFactory {
DBPDataSourceProvider dataSourceProvider = driver.getDataSourceProvider();
if (dataSourceProvider instanceof PostgreDataSourceProvider) {
PostgreDebugController postgreDebugController = new PostgreDebugController(sourceContainer);
return (T) postgreDebugController;
return adapterType.cast(postgreDebugController);
}
}
......@@ -55,7 +54,7 @@ public class PostgreDebugAdapterFactory implements IAdapterFactory {
DBPDataSource dataSource = sourceContainer.getDataSource();
if (dataSource instanceof PostgreDataSource) {
PostgreDataSource postgeDataSource = (PostgreDataSource) dataSource;
return (T) new PostgreResolver(postgeDataSource);
return adapterType.cast(new PostgreResolver(postgeDataSource));
}
}
}
......
......@@ -120,6 +120,13 @@
type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget">
</adapter>
</factory>
<factory
adaptableType="org.jkiss.dbeaver.model.DBPDataSourceContainer"
class="org.jkiss.dbeaver.ext.postgresql.debug.ui.internal.PostgreDebugUIAdapterFactory">
<adapter
type="org.jkiss.dbeaver.debug.ui.DebugEditorAdvisor">
</adapter>
</factory>
</extension>
<extension
......
/*
* 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.ui.internal;
import org.eclipse.core.runtime.IAdapterFactory;
import org.jkiss.dbeaver.debug.ui.DebugEditorAdvisor;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreDataSource;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
public class PostgreDebugUIAdapterFactory implements IAdapterFactory {
private static final Class<?>[] CLASSES = new Class[] { DebugEditorAdvisor.class };
private DebugEditorAdvisor debugEditorAdvisor = new PostgreSourceEditorAdvisor();
@Override
public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
if (adapterType == DebugEditorAdvisor.class) {
if (adaptableObject instanceof DBPDataSourceContainer) {
DBPDataSourceContainer sourceContainer = (DBPDataSourceContainer) adaptableObject;
DBPDataSource dataSource = sourceContainer.getDataSource();
if (dataSource instanceof PostgreDataSource) {
return adapterType.cast(debugEditorAdvisor);
}
}
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
return CLASSES;
}
}
/*
* 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.ui.internal;
import org.jkiss.dbeaver.debug.ui.DebugEditorAdvisor;
public class PostgreSourceEditorAdvisor implements DebugEditorAdvisor {
private static final String POSTGRESQL_SOURCE_VIEW = "postgresql.source.view"; //$NON-NLS-1$
@Override
public String getSourceFolderId() {
return POSTGRESQL_SOURCE_VIEW;
}
}
......@@ -4,8 +4,11 @@ Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.jkiss.dbeaver.ext.postgresql;singleton:=true
Bundle-Version: 2.1.54
Bundle-Release-Date: 20180416
Require-Bundle: org.eclipse.ui,
Require-Bundle: org.eclipse.osgi.services,
org.eclipse.e4.core.services,
org.eclipse.e4.core.contexts,
org.eclipse.core.runtime,
org.eclipse.ui,
org.eclipse.ui.views,
org.eclipse.jface,
org.eclipse.jface.text,
......
......@@ -16,6 +16,9 @@
*/
package org.jkiss.dbeaver.ext.postgresql;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.ui.plugin.AbstractUIPlugin;
......@@ -33,19 +36,22 @@ public class PostgreActivator extends AbstractUIPlugin {
// The shared instance
private static PostgreActivator plugin;
private static BundleContext bundleContext;
public PostgreActivator() {
public PostgreActivator() {
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
bundleContext = context;
plugin = this;
}
@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
bundleContext = context;
super.stop(context);
}
......@@ -63,4 +69,9 @@ public class PostgreActivator extends AbstractUIPlugin {
super.initializeImageRegistry(reg);
reg.put(IMG_PG_SQL, getImageDescriptor("$nl$/icons/postgresql_icon.png")); //$NON-NLS-1$
}
public IEventBroker getEventBroker() {
IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(bundleContext);
return serviceContext.get(IEventBroker.class);
}
}
......@@ -17,6 +17,9 @@
package org.jkiss.dbeaver.ext.postgresql.ui.editors;
import java.util.Map;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.Separator;
......@@ -25,6 +28,8 @@ import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.jkiss.dbeaver.ext.postgresql.PostgreActivator;
import org.jkiss.dbeaver.ext.postgresql.PostgreConstants;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreProcedure;
import org.jkiss.dbeaver.ext.postgresql.model.PostgreScriptObject;
......@@ -32,24 +37,54 @@ import org.jkiss.dbeaver.ext.postgresql.model.PostgreTableBase;
import org.jkiss.dbeaver.model.DBPScriptObject;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput;
import org.jkiss.dbeaver.ui.editors.sql.SQLSourceViewer;
import java.util.HashMap;
import java.util.Map;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
/**
* PostgreSourceViewEditor
*/
public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject> {
private boolean omitHeader = false;
public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject> implements EventHandler {
private static final String TOPIC_DEBUGGER_SOURCE = GeneralUtils.encodeTopic(DBPScriptObject.OPTION_DEBUGGER_SOURCE);
private Button omitHeaderCheck;
private boolean showPermissions = true;
private boolean showColumnComments = true;
private IEventBroker eventBroker;
public PostgreSourceViewEditor()
{
}
@Override
public void handleEvent(Event event) {
String topic = event.getTopic();
if (TOPIC_DEBUGGER_SOURCE.equals(topic)) {
Object data = event.getProperty(IEventBroker.DATA);
if (data instanceof String) {
String nodePath = (String) data;
IDatabaseEditorInput editorInput = getEditorInput();
if (nodePath.equals(editorInput.getNavigatorNode().getNodeItemPath())) {
Object omitValue = editorInput.getAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE);
boolean omitHeader = Boolean.parseBoolean(String.valueOf(omitValue));
if (!omitHeader) {
setOmitHeader(true);
}
}
}
}
}
@Override
public void dispose() {
if (eventBroker != null) {
eventBroker.unsubscribe(this);
}
super.dispose();
}
@Override
protected boolean isReadOnly()
......@@ -67,6 +102,10 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
protected void contributeEditorCommands(IContributionManager contributionManager)
{
super.contributeEditorCommands(contributionManager);
if (eventBroker == null) {
eventBroker = PostgreActivator.getDefault().getEventBroker();
eventBroker.subscribe(TOPIC_DEBUGGER_SOURCE, this);
}
PostgreScriptObject sourceObject = getSourceObject();
if (sourceObject instanceof PostgreProcedure) {
contributionManager.add(new Separator());
......@@ -74,10 +113,14 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
@Override
protected Control createControl(Composite parent) {
omitHeaderCheck = UIUtils.createCheckbox(parent, "Omit procedure header", "Show only procedure body without auto-generated header", false, 0);
Object omitValue = getEditorInput().getAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE);
boolean omitHeader = Boolean.parseBoolean(String.valueOf(omitValue));
omitHeaderCheck.setSelection(omitHeader);
omitHeaderCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
omitHeader = omitHeaderCheck.getSelection();
boolean omitHeader = omitHeaderCheck.getSelection();
getEditorInput().setAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE, omitHeader);
refreshPart(PostgreSourceViewEditor.this, true);
}
});
......@@ -118,14 +161,22 @@ public class PostgreSourceViewEditor extends SQLSourceViewer<PostgreScriptObject
}
public void setOmitHeader(boolean omitHeader) {
this.omitHeader = omitHeader;
this.omitHeaderCheck.setSelection(omitHeader);
refreshPart(this, true);
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
getEditorInput().setAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE, omitHeader);
omitHeaderCheck.setSelection(omitHeader);
refreshPart(this, true);
}
});
}
@Override
protected Map<String, Object> getSourceOptions() {
Map<String, Object> options = super.getSourceOptions();
Object omitValue = getEditorInput().getAttribute(DBPScriptObject.OPTION_DEBUGGER_SOURCE);
boolean omitHeader = Boolean.parseBoolean(String.valueOf(omitValue));
options.put(DBPScriptObject.OPTION_DEBUGGER_SOURCE, omitHeader);
options.put(PostgreConstants.OPTION_DDL_SHOW_PERMISSIONS, showPermissions);
options.put(PostgreConstants.OPTION_DDL_SHOW_COLUMN_COMMENTS, showColumnComments);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册