Массовые операции
Массовые операции доступны в навигаторе. Каждая операция происходит в 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 # Компонент с подтверждением того что будет сделано