Skip to content

Массовые операции

Массовые операции доступны в навигаторе. Каждая операция происходит в 4 шага:

  • Выбор задач
  • Выбор операции
  • Настройка операции
  • Подтверждение

Для добавления новой операции, реализуйте интерфейс BulkAction.

Пример реализации действия Наблюдать за задачами

java
package ru.slie.luna.issue.bulk.impl;

import ru.slie.luna.exception.ValidateException;
import ru.slie.luna.issue.IssueManager;
import ru.slie.luna.issue.MutableIssue;
import ru.slie.luna.issue.bulk.BulkAction;
import ru.slie.luna.issue.bulk.BulkActionProgressTracker;
import ru.slie.luna.issue.bulk.BulkActionValidationResult;
import ru.slie.luna.locale.I18nResolver;
import ru.slie.luna.permission.PermissionKey;
import ru.slie.luna.permission.PermissionManager;
import ru.slie.luna.user.User;
import ru.slie.luna.utils.BatchIterable;

import java.util.List;
import java.util.Optional;
import java.util.Set;

@Component
public class BulkActionStartWatch implements BulkAction<Object> {
    private final I18nResolver i18n;
    private final IssueManager issueManager;
    private final PermissionManager permissionManager;

    public BulkActionStartWatch(I18nResolver i18n,
                                IssueManager issueManager,
                                PermissionManager permissionManager) {
        this.i18n = i18n;
        this.issueManager = issueManager;
        this.permissionManager = permissionManager;
    }

    @Override
    public String getName() {
        return i18n.getText("app.bulk.action.start_watch.label");
    }

    @Override
    public String getDescription() {
        return i18n.getText("app.bulk.action.start_watch.description");
    }

    @Override
    public Object convertRequest(Object request) {
        return request;
    }

    @Override
    public BulkActionValidationResult validateParams(User user, Set<String> keys, Object params) {
        BulkActionValidationResult result = new BulkActionValidationResult();
        BatchIterable<String> iterable = BatchIterable.of(keys, 100);
        for (List<String> batch : iterable) {
            List<MutableIssue> issues = issueManager.getByKeys(batch);
            for (MutableIssue issue : issues) {
                if (!permissionManager.hasPermission(PermissionKey.BROWSE_PROJECT, user, issue)) {
                    // Ошибку можно будет вывести в компоненте параметров
                    result.addError(issue.getKey(), i18n.getText("app.bulk.action.watch.no_view_permission"));
                }
            }
        }

        return result;
    }

    @Override
    public void runSync(User user, Set<String> keys, Object params, BulkActionProgressTracker tracker) {
        for (String key: keys) {
            Optional<MutableIssue> issue = issueManager.getByKey(key);
            if (issue.isEmpty()) {
                tracker.incrementProcessed();
                continue;
            }

            if (!permissionManager.hasPermission(PermissionKey.BROWSE_PROJECT, user, issue.get())) {
                issueManager.addWatcher(issue.get(), user);
            }

            tracker.incrementProcessed();
        }
    }
}

Дескриптор плагина

yaml
bulkActions:
  - key: BulkActionStartWatch
    name: Start watch bulk action
    className: ru.slie.luna.issue.bulk.impl.BulkActionStartWatch
    paramsComponent:
      path: frontend/BulkActionStartWatchParamsView.js # Дополнительные настройки
    confirmComponent:
      path: frontend/BulkActionStartWatchConfirmView.js # Компонент с подтверждением того что будет сделано