提交 577ac2e8 编写于 作者: S Serge Rider

#2928 SQL Script execute task


Former-commit-id: dc789342
上级 5b81a3a9
......@@ -102,6 +102,7 @@
<extension point="org.jkiss.dbeaver.task">
<configurator type="dataTransfer" class="org.jkiss.dbeaver.tools.transfer.ui.wizard.DataTransferTaskConfigurator"/>
<configurator type="sql" class="org.jkiss.dbeaver.tools.sql.ui.wizard.SQLTaskConfigurator"/>
</extension>
</plugin>
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 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.tools.sql.ui.wizard;
import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.tasks.ui.wizard.TaskConfigurationWizard;
import org.jkiss.dbeaver.tools.sql.SQLTConstants;
import java.util.Map;
class SQLTaskConfigurationWizard extends TaskConfigurationWizard {
@Override
protected String getDefaultWindowTitle() {
return "Script Execute";
}
@Override
public String getTaskTypeId() {
return SQLTConstants.TASK_SCRIPT_EXECUTE;
}
@Override
public void saveTaskState(DBRRunnableContext runnableContext, Map<String, Object> state) {
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 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.tools.sql.ui.wizard;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.model.runtime.DBRRunnableContext;
import org.jkiss.dbeaver.model.task.DBTTask;
import org.jkiss.dbeaver.model.task.DBTTaskConfigPanel;
import org.jkiss.dbeaver.model.task.DBTTaskConfigurator;
import org.jkiss.dbeaver.model.task.DBTTaskType;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.SelectDataSourceCombo;
import org.jkiss.dbeaver.ui.navigator.INavigatorFilter;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.ui.navigator.database.load.TreeNodeSpecial;
import org.jkiss.utils.CommonUtils;
import java.util.Collection;
/**
* SQL task configurator
*/
public class SQLTaskConfigurator implements DBTTaskConfigurator {
private static final Log log = Log.getLog(SQLTaskConfigurator.class);
@Override
public ConfigPanel createInputConfigurator(DBRRunnableContext runnableContext, @NotNull DBTTaskType taskType) {
return new ConfigPanel(runnableContext, taskType);
}
@Override
public IWizard createTaskConfigWizard(@NotNull DBTTask taskConfiguration) {
return new SQLTaskConfigurationWizard();
}
private static class ConfigPanel implements DBTTaskConfigPanel {
private DBRRunnableContext runnableContext;
private DBTTaskType taskType;
private DBPProject currentProject;
private SQLTaskConfigurationWizard sqlWizard;
private Runnable propertyChangeListener;
private DBNResource selectedScript;
private DBPProject selectedProject;
private SelectDataSourceCombo dsSelectCombo;
ConfigPanel(DBRRunnableContext runnableContext, DBTTaskType taskType) {
this.runnableContext = runnableContext;
this.taskType = taskType;
this.currentProject = NavigatorUtils.getSelectedProject();
}
@Override
public void createControl(Object parent, Object wizard, Runnable propertyChangeListener) {
sqlWizard = (SQLTaskConfigurationWizard) wizard;
this.propertyChangeListener = propertyChangeListener;
Group group = UIUtils.createControlGroup(
(Composite) parent,
"SQL Script parameters",
1,
GridData.FILL_BOTH,
0);
INavigatorFilter filter = null;/*new INavigatorFilter() {
@Override
public boolean filterFolders() {
return false;
}
@Override
public boolean isLeafObject(Object object) {
return object instanceof DBNResource && ((DBNResource) object).getResource() instanceof IFile;
}
@Override
public boolean select(Object element) {
if (element instanceof DBNRoot) {
return true;
}
if (!(element instanceof DBNResource)) {
return false;
}
return isResourceApplicable((DBNResource) element);
}
}*/;
DatabaseNavigatorTree dataSourceTree = new DatabaseNavigatorTree(
group,
DBWorkbench.getPlatform().getNavigatorModel().getRoot(),
SWT.SINGLE | SWT.BORDER,
false,
filter);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 300;
dataSourceTree.setLayoutData(gd);
dataSourceTree.getViewer().addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof TreeNodeSpecial) {
return true;
}
if (element instanceof DBNResource) {
return isResourceApplicable((DBNResource) element);
}
return false;
}
});
dataSourceTree.getViewer().addSelectionChangedListener(event -> {
DBPProject oldSelectedProject = selectedProject;
selectedProject = null;
selectedScript = null;
ISelection selection = event.getSelection();
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
Object firstElement = ((IStructuredSelection) selection).getFirstElement();
if (firstElement instanceof DBNResource) {
selectedScript = (DBNResource) firstElement;
selectedProject = selectedScript.getOwnerProject();
}
}
if (selectedProject != oldSelectedProject) {
dsSelectCombo.removeAll();
if (selectedProject != null) {
for (DBPDataSourceContainer ds : selectedProject.getDataSourceRegistry().getDataSources()) {
dsSelectCombo.addItem(ds);
}
}
}
updateDataSource();
});
dsSelectCombo = new SelectDataSourceCombo(group) {
@Override
protected DBPProject getActiveProject() {
return selectedProject == null ? NavigatorUtils.getSelectedProject() : selectedProject;
}
};
}
private boolean isResourceApplicable(DBNResource element) {
IResource resource = element.getResource();
if (resource instanceof IFolder) {
// FIXME: this is a hack
return "script folder".equals(element.getNodeType());
}
return resource instanceof IContainer || (resource instanceof IFile && "sql".equals(resource.getFileExtension()));
}
private void updateDataSource() {
DBPDataSourceContainer ds = null;
if (selectedScript != null) {
Collection<DBPDataSourceContainer> associatedDataSources = selectedScript.getAssociatedDataSources();
if (!CommonUtils.isEmpty(associatedDataSources)) {
ds = associatedDataSources.iterator().next();
}
}
dsSelectCombo.select(ds);
if (propertyChangeListener != null) {
propertyChangeListener.run();
}
}
private void updateSettings(Runnable propertyChangeListener) {
// saveSettings();
// propertyChangeListener.run();
// UIUtils.asyncExec(() -> UIUtils.packColumns(objectsTable, true));
}
@Override
public void loadSettings() {
}
@Override
public void saveSettings() {
}
@Override
public boolean isComplete() {
return selectedScript != null && dsSelectCombo.getSelectedItem() != null;
}
}
}
......@@ -7,7 +7,8 @@ Bundle-Version: 2.0.8.qualifier
Bundle-Release-Date: 20200106
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Export-Package: org.jkiss.dbeaver.tools.transfer,
Export-Package: org.jkiss.dbeaver.tools.sql,
org.jkiss.dbeaver.tools.transfer,
org.jkiss.dbeaver.tools.transfer.database,
org.jkiss.dbeaver.tools.transfer.registry,
org.jkiss.dbeaver.tools.transfer.stream,
......
......@@ -187,6 +187,11 @@
<task id="dataImport" name="Data import" description="Data import task" icon="icons/import.png" type="dataTransfer" handler="org.jkiss.dbeaver.tools.transfer.task.DTTaskHandlerImport">
<objectType name="org.jkiss.dbeaver.model.struct.DBSDataManipulator"/>
</task>
<category id="sql" name="SQL" description="SQL execute tasks" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/misc/sql.png"/>
<task id="scriptExecute" name="SQL Script" description="Execute SQL script" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/sql_script_exec.png" type="sql" handler="org.jkiss.dbeaver.tools.sql.task.SQLScriptExecuteHandler">
<objectType name="org.eclipse.core.resources.IFile"/>
</task>
</extension>
<extension point="org.jkiss.dbeaver.serialize">
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 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.tools.sql;
/**
* SQL tasks constants
*/
public class SQLTConstants {
public static final String TASK_SCRIPT_EXECUTE = "scriptExecute";
}
......@@ -19,10 +19,8 @@ package org.jkiss.dbeaver.tools;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.tools.registry.ToolsRegistry;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
/**
* ToolsPropertyTester
......@@ -50,8 +48,7 @@ public class ToolsPropertyTester extends PropertyTester
switch (property) {
case PROP_HAS_TOOLS: {
DBSObject object = RuntimeUtils.getObjectAdapter(structuredSelection.getFirstElement(), DBSObject.class);
return object != null && ToolsRegistry.getInstance().hasTools(structuredSelection);
return ToolsRegistry.getInstance().hasTools(structuredSelection);
}
}
return false;
......
......@@ -20,6 +20,7 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
......@@ -107,13 +108,17 @@ public class ToolsRegistry
public boolean hasTools(IStructuredSelection selection) {
boolean singleObject = selection.size() == 1;
for (Iterator iter = selection.iterator(); iter.hasNext(); ) {
DBSObject selectedObject = DBUtils.getFromObject(iter.next());
if (selectedObject != null) {
Object item = iter.next();
DBSObject dbObject = DBUtils.getFromObject(item);
if (dbObject != null) {
item = dbObject;
}
if (item instanceof DBPObject) {
for (ToolDescriptor descriptor : tools) {
if (descriptor.isSingleton() && !singleObject) {
continue;
}
if (descriptor.appliesTo(selectedObject)) {
if (descriptor.appliesTo((DBPObject) item)) {
return true;
}
}
......
......@@ -3421,6 +3421,10 @@ public class SQLEditor extends SQLEditorBase implements
}
private void dumpOutput(DBRProgressMonitor monitor) {
if (outputViewer == null) {
return;
}
List<ServerOutputInfo> outputs;
synchronized (serverOutputs) {
outputs = new ArrayList<>(serverOutputs);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册