提交 45f0760a 编写于 作者: A Anastasiya Volkova

dbeaver/dbeaver-ee#1040 "delete task folder" button added

上级 c2140d82
......@@ -77,6 +77,8 @@ public interface DBTTaskManager {
void deleteTaskConfiguration(@NotNull DBTTask task) throws DBException;
void removeTaskFolder(@NotNull DBTTaskFolder taskFolder) throws DBException;
@NotNull
File getStatisticsFolder();
......
......@@ -224,6 +224,20 @@ public class TaskManagerImpl implements DBTTaskManager {
TaskRegistry.getInstance().notifyTaskListeners(new DBTTaskEvent(task, DBTTaskEvent.Action.TASK_REMOVE));
}
@Override
public void removeTaskFolder(@NotNull DBTTaskFolder taskFolder) throws DBException {
if (!tasksFolders.contains(taskFolder)) {
throw new DBException("Task folder with name '" + taskFolder.getName() + "' is missing");
}
List<DBTTask> folderTasks = taskFolder.getTasks();
synchronized (tasksFolders) {
tasksFolders.remove(taskFolder);
}
saveConfiguration();
}
@NotNull
@Override
public File getStatisticsFolder() {
......@@ -297,6 +311,9 @@ public class TaskManagerImpl implements DBTTaskManager {
taskFolder = DBUtils.findObject(tasksFolders, taskFolderName);
if (taskFolder == null) {
taskFolder = new TaskFolderImpl(taskFolderName, projectMetadata, new ArrayList<>());
synchronized (tasksFolders) {
tasksFolders.add(taskFolder);
}
}
}
return taskFolder;
......
......@@ -16,6 +16,8 @@ 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.folder.delete.name = Delete task folder
command.org.jkiss.dbeaver.task.folder.delete.description = Delete task folder
command.org.jkiss.dbeaver.task.group.name = Group by
command.org.jkiss.dbeaver.task.group.description = Group tasks by
......
......@@ -37,6 +37,7 @@
<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.folder.task.delete" name="%command.org.jkiss.dbeaver.task.folder.delete.name" description="%command.org.jkiss.dbeaver.task.folder.delete.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>
......@@ -47,6 +48,7 @@
<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"/>
<image commandId="org.jkiss.dbeaver.folder.task.delete" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/delete.png"/>
</extension>
<extension point="org.eclipse.core.expressions.definitions">
......@@ -104,7 +106,6 @@
</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>
......@@ -119,7 +120,18 @@
<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.folder.task.create" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerFolderCreate"/>
<handler commandId="org.jkiss.dbeaver.folder.task.delete" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerFolderDelete">
<activeWhen><reference definitionId="org.jkiss.dbeaver.tasks.part.active"/></activeWhen>
<enabledWhen>
<with variable="selection">
<count value="+"/>
<iterate operator="and">
<instanceof value="org.jkiss.dbeaver.model.task.DBTTaskFolder"/>
</iterate>
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.task.group" class="org.jkiss.dbeaver.tasks.ui.view.TaskHandlerGroupBy">
</handler>
......
......@@ -74,6 +74,12 @@ public class TaskUIViewMessages extends NLS {
public static String task_handler_delete_confirm_question_delete_tasks;
public static String task_handler_delete_error_deleting_task_from_scheduler_title;
public static String task_handler_delete_error_deleting_task_from_scheduler_message;
public static String task_handler_delete_confirm_title_delete_task_folder;
public static String task_handler_delete_confirm_question_delete_task_folder;
public static String task_handler_delete_confirm_title_delete_tasks_folders;
public static String task_handler_delete_confirm_question_delete_tasks_folders;
public static String task_handler_delete_folder_error_title;
public static String task_handler_delete_folder_error_message;
static {
......
......@@ -51,3 +51,9 @@ task_handler_delete_confirm_title_delete_tasks = Delete tasks
task_handler_delete_confirm_question_delete_tasks = Are you sure you want to delete {0} tasks?
task_handler_delete_error_deleting_task_from_scheduler_title = Task deletion error
task_handler_delete_error_deleting_task_from_scheduler_message = Unable to delete task {0} from scheduler. The task won't be deleted from the project.
task_handler_delete_confirm_title_delete_task_folder = Delete task folder
task_handler_delete_confirm_question_delete_task_folder = Are you sure you want to delete task folder "{0}"? All tasks inside folder will NOT be deleted
task_handler_delete_confirm_title_delete_tasks_folders = Delete tasks folders
task_handler_delete_confirm_question_delete_tasks_folders = Are you sure you want to delete {0} tasks? All tasks inside folder will NOT be deleted
task_handler_delete_folder_error_title = Task folder deletion error
task_handler_delete_folder_error_message = Unable to delete task {0} from tasks folders list.
......@@ -70,6 +70,7 @@ public class DatabaseTasksView extends ViewPart implements DBTTaskListener {
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";
private static final String DELETE_FOLDER_TASK_CMD_ID = "org.jkiss.dbeaver.folder.task.delete";
public static final String GROUP_TASK_CMD_ID = "org.jkiss.dbeaver.task.group";
private static final ArrayList<Object> EMPTY_TASK_RUN_LIST = new ArrayList<>();
......@@ -171,8 +172,9 @@ 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(ActionUtils.makeCommandContribution(getSite(), CREATE_FOLDER_TASK_CMD_ID));
manager.add(ActionUtils.makeCommandContribution(getSite(), DELETE_FOLDER_TASK_CMD_ID));
manager.add(new Separator());
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(new Separator());
......
/*
* 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.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.task.DBTTask;
import org.jkiss.dbeaver.model.task.DBTTaskFolder;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.tasks.ui.internal.TaskUIViewMessages;
import org.jkiss.dbeaver.ui.UIUtils;
import java.util.ArrayList;
import java.util.List;
public class TaskHandlerFolderDelete extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final ISelection selection = HandlerUtil.getCurrentSelection(event);
List<DBTTaskFolder> tasksFoldersToDelete = new ArrayList<>();
if (selection instanceof IStructuredSelection) {
IStructuredSelection structSelection = (IStructuredSelection) selection;
for (Object element : structSelection) {
if (element instanceof DBTTaskFolder) {
tasksFoldersToDelete.add((DBTTaskFolder) element);
}
}
}
if (!tasksFoldersToDelete.isEmpty()) {
if (tasksFoldersToDelete.size() == 1) {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_task_folder, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_task_folder, tasksFoldersToDelete.get(0).getName()))) {
return null;
}
} else {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_tasks_folders, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_tasks_folders, tasksFoldersToDelete.size()))) {
return null;
}
}
for (DBTTaskFolder taskFolder : tasksFoldersToDelete) {
try {
taskFolder.getProject().getTaskManager().removeTaskFolder(taskFolder);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError(
TaskUIViewMessages.task_handler_delete_folder_error_title,
NLS.bind(TaskUIViewMessages.task_handler_delete_folder_error_message, taskFolder.getName()),
e
);
}
}
}
return null;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册