提交 ff4acc12 编写于 作者: L LonwoLonwo

dbeaver/dbeaver-ee#1040 way to store tasks folders in the json file improved;...

dbeaver/dbeaver-ee#1040 way to store tasks folders in the json file improved; delete task folder button united with delete task button
上级 e73ccf37
......@@ -32,7 +32,9 @@ import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DefaultProgressMonitor;
import org.jkiss.dbeaver.model.task.*;
import org.jkiss.dbeaver.registry.DataSourceFolder;
import org.jkiss.dbeaver.registry.ProjectMetadata;
import org.jkiss.dbeaver.registry.RegistryConstants;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
......@@ -57,7 +59,6 @@ public class TaskManagerImpl implements DBTTaskManager {
public static final String CONFIG_FILE = "tasks.json";
public static final String TASK_STATS_FOLDER = "task-stats";
public static final String EMPTY_TASK_FOLDER = "#emptyTaskFolder.";
private static Gson CONFIG_GSON = new GsonBuilder()
.setLenient()
.serializeNulls()
......@@ -189,7 +190,7 @@ public class TaskManagerImpl implements DBTTaskManager {
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));
TaskFolderImpl taskFolder = new TaskFolderImpl(folderName, project, folderTasks != null ? new ArrayList<>(Arrays.asList(folderTasks)) : new ArrayList<>());
synchronized (tasksFolders) {
tasksFolders.add(taskFolder);
}
......@@ -216,8 +217,6 @@ public class TaskManagerImpl implements DBTTaskManager {
}
}
saveConfiguration();
TaskRegistry.getInstance().notifyTaskListeners(
new DBTTaskEvent(
task,
......@@ -226,6 +225,8 @@ public class TaskManagerImpl implements DBTTaskManager {
if (task.getTaskFolder() != null) {
TaskRegistry.getInstance().notifyTaskFoldersListeners(new DBTTaskFolderEvent(task.getTaskFolder(), DBTTaskFolderEvent.Action.TASK_FOLDER_UPDATE));
}
saveConfiguration();
}
@Override
......@@ -289,25 +290,19 @@ public class TaskManagerImpl implements DBTTaskManager {
try (Reader configReader = new InputStreamReader(is, StandardCharsets.UTF_8)) {
Map<String, Object> jsonMap = JSONUtils.parseMap(CONFIG_GSON, configReader);
for (Map.Entry<String, Map<String, Object>> folderMap : JSONUtils.getNestedObjects(jsonMap, "tasksFolders")) {
String taskName = folderMap.getKey();
if (CommonUtils.isNotEmpty(taskName)) {
createTaskFolder(projectMetadata, taskName, new DBTTask[0]);
}
}
for (Map.Entry<String, Object> taskMap : jsonMap.entrySet()) {
Map<String, Object> taskJSON = (Map<String, Object>) taskMap.getValue();
try {
String id = taskMap.getKey();
if (id.startsWith(EMPTY_TASK_FOLDER)) {
// Read empty tasks
String emptyTaskProjectName = JSONUtils.getString(taskJSON, "emptyTaskProjectName");
String emptyTaskName = JSONUtils.getString(taskJSON, "emptyTaskName");
List<DBPProject> projectsList = new ArrayList<>(DBWorkbench.getPlatform().getWorkspace().getProjects());
DBPProject folderProject = projectMetadata;
Optional<DBPProject> dbpProject = projectsList.stream().filter(project -> project.getName().equals(emptyTaskProjectName)).findFirst();
if (dbpProject.isPresent()) {
folderProject = dbpProject.get();
}
if (CommonUtils.isNotEmpty(emptyTaskName)) {
createTaskFolder(folderProject, emptyTaskName, new DBTTask[0]);
}
} else {
if (!id.startsWith("tasksFolders")) {
String task = JSONUtils.getString(taskJSON, "task");
String label = CommonUtils.toString(JSONUtils.getString(taskJSON, "label"), id);
String description = JSONUtils.getString(taskJSON, "description");
......@@ -339,7 +334,6 @@ public class TaskManagerImpl implements DBTTaskManager {
}
}
} catch (Exception e) {
log.warn("Error parsing task configuration", e);
}
......@@ -365,7 +359,7 @@ public class TaskManagerImpl implements DBTTaskManager {
return taskFolder;
}
private void saveConfiguration() {
public void saveConfiguration() {
IProgressMonitor monitor = new NullProgressMonitor();
File configFile = getConfigFile(true);
......@@ -405,6 +399,16 @@ public class TaskManagerImpl implements DBTTaskManager {
private void serializeTasks(DBRProgressMonitor monitor, JsonWriter jsonWriter) throws IOException {
jsonWriter.setIndent("\t");
jsonWriter.beginObject();
if (!CommonUtils.isEmpty(tasksFolders)) {
jsonWriter.name("tasksFolders");
jsonWriter.beginObject();
for (TaskFolderImpl taskFolder : tasksFolders) {
jsonWriter.name(taskFolder.getName());
jsonWriter.beginObject();
jsonWriter.endObject();
}
jsonWriter.endObject();
}
for (TaskImpl task : tasks) {
jsonWriter.name(task.getId());
jsonWriter.beginObject();
......@@ -420,19 +424,6 @@ public class TaskManagerImpl implements DBTTaskManager {
JSONUtils.serializeProperties(jsonWriter, "state", task.getProperties());
jsonWriter.endObject();
}
if (!CommonUtils.isEmpty(tasksFolders) && tasksFolders.stream().anyMatch(taskFolder -> taskFolder.getTasks().isEmpty())) {
// Write empty task folders to JSON
List<TaskFolderImpl> emptyTaskFolders = tasksFolders.stream()
.filter(taskFolder -> taskFolder.getTasks().isEmpty())
.collect(Collectors.toList());
for (TaskFolderImpl taskFolder : emptyTaskFolders) {
jsonWriter.name(EMPTY_TASK_FOLDER + taskFolder.getProject().getName() + "." + taskFolder.getName());
jsonWriter.beginObject();
JSONUtils.field(jsonWriter, "emptyTaskProjectName", taskFolder.getProject().getName());
JSONUtils.field(jsonWriter, "emptyTaskName", taskFolder.getName());
jsonWriter.endObject();
}
}
jsonWriter.endObject();
}
......
......@@ -15,9 +15,7 @@ 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.folder.delete.name = Delete task folder
command.org.jkiss.dbeaver.task.folder.delete.description = Delete task folder
command.org.jkiss.dbeaver.task.folder.create.description = Create a new task storage folder
command.org.jkiss.dbeaver.task.group.name = Group by
command.org.jkiss.dbeaver.task.group.description = Group tasks by
......
......@@ -13,6 +13,8 @@ command.org.jkiss.dbeaver.task.edit.name = \u0418\u0437\u043C\u0435\u043D\u0438\
command.org.jkiss.dbeaver.task.edit.description = \u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438
command.org.jkiss.dbeaver.task.copy.name = \u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0443
command.org.jkiss.dbeaver.task.copy.description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0443\u044E \u043A\u043E\u043F\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438
command.org.jkiss.dbeaver.task.folder.create.name = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u0447
command.org.jkiss.dbeaver.task.folder.create.description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u0434\u043B\u044F \u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447
command.org.jkiss.dbeaver.task.group.name = \u0421\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E
command.org.jkiss.dbeaver.task.group.description = \u0421\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0438 \u043F\u043E
......
......@@ -37,7 +37,6 @@
<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>
......@@ -48,7 +47,6 @@
<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">
......@@ -67,7 +65,10 @@
<with variable="selection">
<count value="+"/>
<iterate operator="and">
<instanceof value="org.jkiss.dbeaver.model.task.DBTTask"/>
<or>
<instanceof value="org.jkiss.dbeaver.model.task.DBTTask"/>
<instanceof value="org.jkiss.dbeaver.model.task.DBTTaskFolder"/>
</or>
</iterate>
</with>
</enabledWhen>
......@@ -121,17 +122,6 @@
<activeWhen><reference definitionId="org.jkiss.dbeaver.tasks.part.active"/></activeWhen>
</handler>
<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,10 +74,6 @@ 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;
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = Task last run duration
db_tasks_view_column_controller_add_name_result = Result
db_tasks_view_column_controller_add_descr_task_result = Task result
db_tasks_view_cell_text_success = Success
db_tasks_view_context_menu_command_delete_task = Delete task
db_tasks_view_context_menu_command_delete_task = Delete
db_tasks_view_adapter_label_database_tasks = Database Tasks
db_tasks_view_run_log_view = View log
db_tasks_view_run_log_delete = Delete run log
......@@ -45,16 +45,12 @@ db_tasks_view_open_run_log_folder_open = Open logs folder
task_handler_copy_name_dialog_enter_task = Enter new task name
task_handler_delete_confirm_title_delete_task = Delete task
task_handler_delete_confirm_question_delete_task = Are you sure you want to delete task "{0}"?
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_confirm_title_delete_task = Delete object
task_handler_delete_confirm_question_delete_task = Are you sure you want to delete object "{0}"?
task_handler_delete_confirm_title_delete_tasks = Delete objects
task_handler_delete_confirm_question_delete_tasks = Are you sure you want to delete {0} objects?
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.
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = Dauer der letzten Ausf
db_tasks_view_column_controller_add_name_result = Ergebnis
db_tasks_view_column_controller_add_descr_task_result = Aufgabenergebnis
db_tasks_view_cell_text_success = Erfolg
db_tasks_view_context_menu_command_delete_task = Aufgabe l\u00F6schen
db_tasks_view_context_menu_command_delete_task = L\u00F6schen
db_tasks_view_adapter_label_database_tasks = Datenbankaufgaben
db_tasks_view_run_log_view = Protokoll anzeigen
db_tasks_view_run_log_delete = Laufprotokoll l\u00F6schen
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = Tarea \u00FAltima dura
db_tasks_view_column_controller_add_name_result = Resultado
db_tasks_view_column_controller_add_descr_task_result = Resultado de la tarea
db_tasks_view_cell_text_success = \u00C9xito
db_tasks_view_context_menu_command_delete_task = Eliminar tarea
db_tasks_view_context_menu_command_delete_task = Eliminar
db_tasks_view_adapter_label_database_tasks = Tareas de base de datos
db_tasks_view_run_log_view = Ver registro
db_tasks_view_run_log_delete = Eliminar registro de ejecuci\u00F3n
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = Dur\u00E9e de la derni
db_tasks_view_column_controller_add_name_result = R\u00E9sultat
db_tasks_view_column_controller_add_descr_task_result = R\u00E9sultat de la t\u00E2che
db_tasks_view_cell_text_success = Succ\u00E8s
db_tasks_view_context_menu_command_delete_task = Supprimer la t\u00E2che
db_tasks_view_context_menu_command_delete_task = Supprimer
db_tasks_view_adapter_label_database_tasks = T\u00E2ches de base de donn\u00E9es
db_tasks_view_run_log_view = Afficher le journal
db_tasks_view_run_log_delete = Supprimer le journal d'ex\u00E9cution
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = Durata dell'ultima ese
db_tasks_view_column_controller_add_name_result = Risultato
db_tasks_view_column_controller_add_descr_task_result = Risultato dell'attivit\u00E0
db_tasks_view_cell_text_success = Successo
db_tasks_view_context_menu_command_delete_task = Elimina attivit\u00E0
db_tasks_view_context_menu_command_delete_task = Elimina
db_tasks_view_adapter_label_database_tasks = Attivit\u00E0 del database
db_tasks_view_run_log_view = Vista del registro
db_tasks_view_run_log_delete = Elimina registro esecuzioni
......
......@@ -32,7 +32,7 @@ db_tasks_view_column_controller_add_descr_task_duration = \u0414\u043B\u0438\u04
db_tasks_view_column_controller_add_name_result = \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442
db_tasks_view_column_controller_add_descr_task_result = \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447\u0438
db_tasks_view_cell_text_success = \u0423\u0441\u043F\u0435\u0448\u043D\u043E
db_tasks_view_context_menu_command_delete_task = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0443
db_tasks_view_context_menu_command_delete_task = \u0423\u0434\u0430\u043B\u0438\u0442\u044C
db_tasks_view_adapter_label_database_tasks = \u0417\u0430\u0434\u0430\u0447\u0438 \u0411\u0414
db_tasks_view_run_log_view = \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0436\u0443\u0440\u043D\u0430\u043B
db_tasks_view_run_log_delete = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0436\u0443\u0440\u043D\u0430\u043B \u0437\u0430\u043F\u0443\u0441\u043A\u043E\u0432
......
......@@ -579,8 +579,8 @@ public class DatabaseTasksTree {
for (DBTTask task : CommonUtils.safeCollection(getSortedByParameterTasks(parentType, isCategory))) {
DBTTaskFolder taskFolder = task.getTaskFolder();
if (taskFolder != null) {
if (typeFoldersWrappersList.size() > 0 && typeFoldersWrappersList.stream().anyMatch(taskFolderWrapper -> taskFolderWrapper.taskFolder == taskFolder)) {
TaskFolderWrapper folderWrapper = typeFoldersWrappersList.stream().filter(taskFolderWrapper -> taskFolderWrapper.taskFolder == taskFolder).findFirst().get();
if (typeFoldersWrappersList.size() > 0 && typeFoldersWrappersList.stream().anyMatch(taskFolderWrapper -> taskFolderWrapper.getTaskFolder()== taskFolder)) {
TaskFolderWrapper folderWrapper = typeFoldersWrappersList.stream().filter(taskFolderWrapper -> taskFolderWrapper.getTaskFolder() == taskFolder).findFirst().get();
folderWrapper.addTaskToList(task);
} else {
TaskFolderWrapper taskFolderWrapper = new TaskFolderWrapper(taskFolder, new ArrayList<>(Collections.singletonList(task)));
......@@ -691,7 +691,7 @@ public class DatabaseTasksTree {
// We need this class for category/type task grouping. One folder can belong to different categories/types
// So this is a tricky way to separate it
private class TaskFolderWrapper extends TaskFolderImpl {
class TaskFolderWrapper extends TaskFolderImpl {
DBTTaskFolder taskFolder;
List<DBTTask> allSpecificTypeTasks;
......@@ -705,6 +705,10 @@ public class DatabaseTasksTree {
void addTaskToList(DBTTask task) {
allSpecificTypeTasks.add(task);
}
public DBTTaskFolder getTaskFolder() {
return taskFolder;
}
}
private abstract class TaskLabelProvider extends ColumnLabelProvider {
......
......@@ -70,7 +70,6 @@ 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<>();
......@@ -174,7 +173,6 @@ public class DatabaseTasksView extends ViewPart implements DBTTaskListener {
manager.add(ActionUtils.makeCommandContribution(getSite(), COPY_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());
......
......@@ -24,13 +24,14 @@ 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.DBPNamedObject;
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.Iterator;
import java.util.List;
public class TaskHandlerDelete extends AbstractHandler {
......@@ -39,36 +40,54 @@ public class TaskHandlerDelete extends AbstractHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
final ISelection selection = HandlerUtil.getCurrentSelection(event);
List<DBTTask> tasksToDelete = new ArrayList<>();
List<DBPNamedObject> objectsToDelete = new ArrayList<>();
if (selection instanceof IStructuredSelection) {
IStructuredSelection structSelection = (IStructuredSelection)selection;
for (Iterator<?> iter = structSelection.iterator(); iter.hasNext(); ) {
Object element = iter.next();
for (Object element : structSelection) {
if (element instanceof DBTTask) {
tasksToDelete.add((DBTTask) element);
objectsToDelete.add((DBTTask) element);
} else if (element instanceof DatabaseTasksTree.TaskFolderWrapper) {
objectsToDelete.add(((DatabaseTasksTree.TaskFolderWrapper) element).getTaskFolder());
} else if (element instanceof DBTTaskFolder) {
objectsToDelete.add((DBTTaskFolder) element);
}
}
}
if (!tasksToDelete.isEmpty()) {
if (tasksToDelete.size() == 1) {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_task, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_task, tasksToDelete.get(0).getName()))) {
if (!objectsToDelete.isEmpty()) {
if (objectsToDelete.size() == 1) {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_task, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_task, objectsToDelete.get(0).getName()))) {
return null;
}
} else {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_tasks, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_tasks, tasksToDelete.size()))) {
if (!UIUtils.confirmAction(HandlerUtil.getActiveShell(event), TaskUIViewMessages.task_handler_delete_confirm_title_delete_tasks, NLS.bind(TaskUIViewMessages.task_handler_delete_confirm_question_delete_tasks, objectsToDelete.size()))) {
return null;
}
}
for (DBTTask task : tasksToDelete) {
for (DBPNamedObject object : objectsToDelete) {
try {
task.getProject().getTaskManager().deleteTaskConfiguration(task);
if (object instanceof DBTTask) {
DBTTask task = (DBTTask) object;
task.getProject().getTaskManager().deleteTaskConfiguration(task);
} else {
DBTTaskFolder taskFolder = (DBTTaskFolder) object;
taskFolder.getProject().getTaskManager().removeTaskFolder(taskFolder);
}
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError(
if (object instanceof DBTTask) {
DBWorkbench.getPlatformUI().showError(
TaskUIViewMessages.task_handler_delete_error_deleting_task_from_scheduler_title,
NLS.bind(TaskUIViewMessages.task_handler_delete_error_deleting_task_from_scheduler_message, task.getId()),
NLS.bind(TaskUIViewMessages.task_handler_delete_error_deleting_task_from_scheduler_message, ((DBTTask)object).getId()),
e
);
} else {
DBWorkbench.getPlatformUI().showError(
TaskUIViewMessages.task_handler_delete_folder_error_title,
NLS.bind(TaskUIViewMessages.task_handler_delete_folder_error_message, object.getName()),
e
);
);
}
}
}
}
......
......@@ -29,6 +29,9 @@ 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.model.task.DBTTaskFolder;
import org.jkiss.dbeaver.model.task.DBTTaskManager;
import org.jkiss.dbeaver.registry.task.TaskManagerImpl;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.tasks.ui.internal.TaskUIViewMessages;
import org.jkiss.dbeaver.ui.UIUtils;
......@@ -48,8 +51,10 @@ public class TaskHandlerFolderCreate extends AbstractHandler {
CreateFolderDialog createFolderDialog = new CreateFolderDialog(HandlerUtil.getActiveShell(event), project);
if (createFolderDialog.open() == IDialogConstants.OK_ID) {
DBPProject folderProject = createFolderDialog.getProject();
DBTTaskManager taskManager = folderProject.getTaskManager();
DBTTaskFolder taskFolder = null;
try {
folderProject.getTaskManager().createTaskFolder(folderProject, createFolderDialog.getName(), null);
taskFolder = taskManager.createTaskFolder(folderProject, createFolderDialog.getName(), null);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError(
TaskUIViewMessages.task_handler_folder_create_error_title,
......@@ -58,6 +63,9 @@ public class TaskHandlerFolderCreate extends AbstractHandler {
);
log.error("Can't create new task folder", e);
}
if (taskFolder != null && taskManager instanceof TaskManagerImpl) {
((TaskManagerImpl) taskManager).saveConfiguration();
}
}
return null;
}
......
/*
* 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.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.
先完成此消息的编辑!
想要评论请 注册