提交 c2140d82 编写于 作者: A Anastasiya Volkova

dbeaver/dbeaver-ee#1040 "Create task folder" buttons added

上级 f43d7fc0
......@@ -54,6 +54,9 @@ public interface DBTTaskManager {
@Nullable
DBTTaskFolder[] getTasksFolders();
@NotNull
DBTTaskFolder createTaskFolder(@NotNull DBPProject project, @NotNull String folderName, @Nullable DBTTask[] folderTasks) throws DBException;
@NotNull
DBTTask createTask(
@NotNull DBTTaskType task,
......
......@@ -26,6 +26,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -34,6 +35,7 @@ import org.jkiss.dbeaver.model.task.*;
import org.jkiss.dbeaver.registry.ProjectMetadata;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.IOUtils;
......@@ -166,6 +168,19 @@ public class TaskManagerImpl implements DBTTaskManager {
return new TaskImpl(getProject(), type, TEMPORARY_ID, label, label, new Date(), null, null);
}
@NotNull
@Override
public DBTTaskFolder createTaskFolder(@NotNull DBPProject project, @NotNull String folderName, @Nullable DBTTask[] folderTasks) throws DBException {
if (!CommonUtils.isEmpty(tasksFolders) && tasksFolders.stream().anyMatch(taskFolder -> taskFolder.getName().equals(folderName))) {
throw new DBException("Task folder with name '" + folderName + "' already exists");
}
TaskFolderImpl taskFolder = new TaskFolderImpl(folderName, project, ArrayUtils.safeArray(folderTasks));
synchronized (tasksFolders) {
tasksFolders.add(taskFolder);
}
return taskFolder;
}
@Override
public void updateTaskConfiguration(@NotNull DBTTask task) throws DBException {
if (task.isTemporary()) {
......@@ -279,12 +294,7 @@ public class TaskManagerImpl implements DBTTaskManager {
private TaskFolderImpl searchTaskFolderByName(String taskFolderName) {
TaskFolderImpl taskFolder = null;
if (CommonUtils.isNotEmpty(taskFolderName)) {
for (TaskFolderImpl taskFolderImpl : tasksFolders) {
if (taskFolderImpl.getName().equals(taskFolderName)) {
taskFolder = taskFolderImpl;
break;
}
}
taskFolder = DBUtils.findObject(tasksFolders, taskFolderName);
if (taskFolder == null) {
taskFolder = new TaskFolderImpl(taskFolderName, projectMetadata, new ArrayList<>());
}
......@@ -338,7 +348,10 @@ public class TaskManagerImpl implements DBTTaskManager {
JSONUtils.field(jsonWriter, "task", task.getType().getId());
JSONUtils.field(jsonWriter, "label", task.getName());
JSONUtils.field(jsonWriter, "description", task.getDescription());
JSONUtils.field(jsonWriter, "taskFolder", task.getTaskFolder() != null ? task.getTaskFolder().getName() : "");
DBTTaskFolder taskFolder = task.getTaskFolder();
if (taskFolder != null) {
JSONUtils.field(jsonWriter, "taskFolder", taskFolder.getName());
}
JSONUtils.field(jsonWriter, "createTime", systemDateFormat.format(task.getCreateTime()));
JSONUtils.field(jsonWriter, "updateTime", systemDateFormat.format(task.getUpdateTime()));
JSONUtils.serializeProperties(jsonWriter, "state", task.getProperties());
......
......@@ -14,6 +14,8 @@ command.org.jkiss.dbeaver.task.edit.name = Edit task
command.org.jkiss.dbeaver.task.edit.description = Opens task configuration
command.org.jkiss.dbeaver.task.copy.name = Copy task
command.org.jkiss.dbeaver.task.copy.description = Create existing task copy
command.org.jkiss.dbeaver.task.folder.create.name = Create new task folder
command.org.jkiss.dbeaver.task.folder.create.description = Create new database task folder
command.org.jkiss.dbeaver.task.group.name = Group by
command.org.jkiss.dbeaver.task.group.description = Group tasks by
......
......@@ -36,6 +36,7 @@
<command id="org.jkiss.dbeaver.task.edit" name="%command.org.jkiss.dbeaver.task.edit.name" description="%command.org.jkiss.dbeaver.task.edit.description" categoryId="org.jkiss.dbeaver.core.navigator"/>
<command id="org.jkiss.dbeaver.task.create" name="%command.org.jkiss.dbeaver.task.create.name" description="%command.org.jkiss.dbeaver.task.create.description" categoryId="org.jkiss.dbeaver.core.navigator"/>
<command id="org.jkiss.dbeaver.task.copy" name="%command.org.jkiss.dbeaver.task.copy.name" description="%command.org.jkiss.dbeaver.task.copy.description" categoryId="org.jkiss.dbeaver.core.navigator"/>
<command id="org.jkiss.dbeaver.folder.task.create" name="%command.org.jkiss.dbeaver.task.folder.create.name" description="%command.org.jkiss.dbeaver.task.folder.create.description" categoryId="org.jkiss.dbeaver.core.navigator"/>
<command id="org.jkiss.dbeaver.task.group" name="%command.org.jkiss.dbeaver.task.group.name" description="%command.org.jkiss.dbeaver.task.group.description" categoryId="org.jkiss.dbeaver.core.navigator">
<commandParameter id="group" name="Group by" optional="false"/>
</command>
......@@ -45,6 +46,7 @@
<image commandId="org.jkiss.dbeaver.task.run" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/run.png"/>
<image commandId="org.jkiss.dbeaver.task.create" icon="icons/task_create.png"/>
<image commandId="org.jkiss.dbeaver.task.edit" icon="icons/task_edit.png"/>
<image commandId="org.jkiss.dbeaver.folder.task.create" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/file/folder_add.png"/>
</extension>
<extension point="org.eclipse.core.expressions.definitions">
......@@ -102,6 +104,7 @@
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.task.create" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerCreate"/>
<handler commandId="org.jkiss.dbeaver.folder.task.create" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerFolderCreate"/>
<handler commandId="org.jkiss.dbeaver.task.copy" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerCopy">
<activeWhen><reference definitionId="org.jkiss.dbeaver.tasks.part.active"/></activeWhen>
<enabledWhen>
......@@ -116,6 +119,7 @@
<handler commandId="org.eclipse.ui.file.refresh" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerRefresh">
<activeWhen><reference definitionId="org.jkiss.dbeaver.tasks.part.active"/></activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.task.create" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerCreate"/>
<handler commandId="org.jkiss.dbeaver.task.group" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerGroupBy">
</handler>
......@@ -149,6 +153,7 @@
<separator name="additions" visible="true"/>
<command commandId="org.jkiss.dbeaver.task.run"/>
<command commandId="org.jkiss.dbeaver.task.create"/>
<command commandId="org.jkiss.dbeaver.folder.task.create"/>
<command commandId="org.eclipse.ui.edit.delete"/>
<separator name="additions" visible="true"/>
</menuContribution>
......
......@@ -508,11 +508,6 @@ public class DatabaseTasksTree {
} else {
children.addAll(allTasksFolders.stream().filter(taskFolder -> taskFolder.getProject() == parentElement).collect(Collectors.toList()));
children.addAll(allTasks.stream().filter(task -> task.getTaskFolder() == null && task.getProject() == parentElement).collect(Collectors.toList()));
/*for (DBTTask task : allTasks) {
if (task.getProject() == parentElement) {
children.add(task);
}
}*/
}
} else if (parentElement instanceof DBTTaskFolder) {
DBTTaskFolder taskFolder = (DBTTaskFolder) parentElement;
......@@ -597,37 +592,6 @@ public class DatabaseTasksTree {
}
}
private static class TaskFolderNode {
final DBPProject project;
final DBTTaskFolder taskFolder;
TaskFolderNode(DBPProject project, DBTTaskFolder taskFolder) {
this.project = project;
this.taskFolder = taskFolder;
}
@Override
public String toString() {
return taskFolder.getName();
}
@Override
public int hashCode() {
return (project == null ? 0 : project.hashCode()) +
(taskFolder == null ? 0 : taskFolder.hashCode());
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof TaskFolderNode)) {
return false;
}
TaskFolderNode cmp = (TaskFolderNode) obj;
return project == cmp.project &&
CommonUtils.equalObjects(taskFolder, cmp.taskFolder);
}
}
private static class TaskCategoryNode {
final DBPProject project;
final TaskCategoryNode parent;
......
......@@ -69,6 +69,7 @@ public class DatabaseTasksView extends ViewPart implements DBTTaskListener {
public static final String COPY_TASK_CMD_ID = "org.jkiss.dbeaver.task.copy";
public static final String EDIT_TASK_CMD_ID = "org.jkiss.dbeaver.task.edit";
public static final String RUN_TASK_CMD_ID = "org.jkiss.dbeaver.task.run";
private static final String CREATE_FOLDER_TASK_CMD_ID = "org.jkiss.dbeaver.folder.task.create";
public static final String GROUP_TASK_CMD_ID = "org.jkiss.dbeaver.task.group";
private static final ArrayList<Object> EMPTY_TASK_RUN_LIST = new ArrayList<>();
......@@ -170,6 +171,7 @@ public class DatabaseTasksView extends ViewPart implements DBTTaskListener {
//manager.add(ActionUtils.makeCommandContribution(getSite(), IWorkbenchCommandConstants.FILE_PROPERTIES, "Task properties", null));
manager.add(ActionUtils.makeCommandContribution(getSite(), CREATE_TASK_CMD_ID));
manager.add(ActionUtils.makeCommandContribution(getSite(), COPY_TASK_CMD_ID));
manager.add(ActionUtils.makeCommandContribution(getSite(), CREATE_FOLDER_TASK_CMD_ID));
manager.add(ActionUtils.makeCommandContribution(getSite(), IWorkbenchCommandConstants.EDIT_DELETE, TaskUIViewMessages.db_tasks_view_context_menu_command_delete_task, null));
manager.add(new Separator());
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2021 DBeaver Corp and others
*
* 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.tasks.ui.view;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.app.DBPProject;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import java.util.List;
public class TaskHandlerFolderCreate extends AbstractHandler {
private static final Log log = Log.getLog(TaskHandlerFolderCreate.class);
@Override
public Object execute(ExecutionEvent event) {
DBPProject project = NavigatorUtils.getSelectedProject();
CreateFolderDialog createFolderDialog = new CreateFolderDialog(HandlerUtil.getActiveShell(event), project);
if (createFolderDialog.open() == IDialogConstants.OK_ID) {
DBPProject folderProject = createFolderDialog.getProject();
try {
folderProject.getTaskManager().createTaskFolder(folderProject, createFolderDialog.getName(), null);
} catch (DBException e) {
log.error("Can't create new task folder", e);
}
}
return null;
}
private class CreateFolderDialog extends BaseDialog {
private DBPProject project;
private String name;
CreateFolderDialog(Shell parentShell, DBPProject project) {
super(parentShell, "Create new task folder", null);
this.project = project;
}
@Override
protected Composite createDialogArea(Composite parent) {
final Composite composite = super.createDialogArea(parent);
final Text nameText = UIUtils.createLabelText(composite, "Name", ""); //$NON-NLS-2$
nameText.addModifyListener(e -> {
name = nameText.getText().trim();
getButton(IDialogConstants.OK_ID).setEnabled(!name.isEmpty());
});
List<DBPProject> projects = DBWorkbench.getPlatform().getWorkspace().getProjects();
UIUtils.createControlLabel(composite, "Folder project");
final Combo projectCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
projectCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
for (DBPProject project : projects) {
projectCombo.add(project.getName());
}
projectCombo.setText(project.getName());
projectCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
project = projects.get(projectCombo.getSelectionIndex());
}
});
return composite;
}
public String getName() {
return name;
}
public DBPProject getProject() {
return project;
}
@Override
protected void createButtonsForButtonBar(Composite parent)
{
super.createButtonsForButtonBar(parent);
getButton(IDialogConstants.OK_ID).setEnabled(false);
}
}
}
......@@ -83,7 +83,7 @@ public class EditTaskConfigurationDialog extends BaseDialog
@Override
protected IDialogSettings getDialogBoundsSettings() {
return null;//UIUtils.getDialogSettings(DIALOG_ID);
return UIUtils.getDialogSettings(DIALOG_ID);
}
@Override
......@@ -119,7 +119,6 @@ public class EditTaskConfigurationDialog extends BaseDialog
taskFoldersCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
DBTTaskFolder[] tasksFolders = taskManager.getTasksFolders();
taskFoldersCombo.add("");
if (!ArrayUtils.isEmpty(tasksFolders)) {
for (DBTTaskFolder taskFolder : tasksFolders) {
taskFoldersCombo.add(taskFolder.getName());
......
......@@ -66,7 +66,6 @@ class TaskConfigurationWizardPageTask extends ActiveWizardPage<TaskConfiguration
private DBTTaskType selectedTaskType;
private String taskName;
private String taskDescription;
private DBTTaskFolder taskFolder;
private Map<String, Object> initialProperties = new LinkedHashMap<>();
private TaskImpl task;
......@@ -83,7 +82,6 @@ class TaskConfigurationWizardPageTask extends ActiveWizardPage<TaskConfiguration
if (this.task != null) {
this.taskName = this.task.getName();
this.taskDescription = this.task.getDescription();
this.taskFolder = this.task.getTaskFolder();
this.selectedTaskType = this.task.getType();
this.selectedCategory = selectedTaskType.getCategory();
}
......@@ -159,7 +157,6 @@ class TaskConfigurationWizardPageTask extends ActiveWizardPage<TaskConfiguration
taskFoldersCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
DBTTaskFolder[] tasksFolders = selectedProject.getTaskManager().getTasksFolders();
taskFoldersCombo.add("");
if (!ArrayUtils.isEmpty(tasksFolders)) {
for (DBTTaskFolder taskFolder : tasksFolders) {
taskFoldersCombo.add(taskFolder.getName());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册