-
Notifications
You must be signed in to change notification settings - Fork 41
GroovyScriptGlobalObjectService
Ivan Mashintsev edited this page Jun 15, 2023
·
2 revisions
package ru.mail.jira.scripts.go
import ru.mail.jira.plugins.groovy.GroovyScriptGlobalObjectService
import ru.mail.jira.plugins.groovy.api.script.PluginModule
import ru.mail.jira.scripts.go.GlobalObject
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.user.ApplicationUser
public class GlobalObjectWithDependency {
private final GroovyScriptGlobalObjectService injectedGo;
public GlobalObjectWithDependency(@PluginModule GroovyScriptGlobalObjectService injectedGo) {
this.injectedGo = injectedGo;
}
ApplicationUser getAdmin() {
return injectedGo.getAdmin()
}
}
package ru.mail.jira.plugins.groovy;
import com.atlassian.crowd.embedded.api.Group;
import com.atlassian.jira.bc.EntityNotFoundException;
import com.atlassian.jira.bc.project.component.ProjectComponent;
import com.atlassian.jira.exception.CreateException;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.attachment.Attachment;
import com.atlassian.jira.issue.comments.Comment;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.option.Options;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.index.IndexException;
import com.atlassian.jira.issue.index.IssueIndexingParams;
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.issue.search.SearchException;
import com.atlassian.jira.issue.status.Status;
import com.atlassian.jira.jql.parser.JqlParseException;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.security.roles.ProjectRole;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.query.Query;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import javax.mail.MessagingException;
import org.ofbiz.core.entity.GenericEntityException;
public interface GroovyScriptGlobalObjectService {
/**
* Возвращает базовый url, на котором запущена используемая на текущий момент системы Jira.
* */
String getBaseUrl();
/**
* Возвращает количество issues по JQL.
* Выполняется с учетом прав текущего пользователя.
* @param jql : "project = TEST"
* */
long getCountIssuesByJQL(String jql) throws JqlParseException, SearchException;
/**
* Возвращает количество issues по JQL.
* Выполняется с учетом прав пользователя.
* @param jql : "project = TEST"
* @param user : getUser("admin")
* */
long getCountIssuesByJQL(String jql, ApplicationUser user) throws SearchException, JqlParseException;
/**
* Возвращает issues по JQL.
* Выполняется с учетом прав текущего пользователя.
* @param jql : "project = TEST"
* */
Collection<Issue> getIssuesByJQL(String jql) throws JqlParseException, SearchException;
/**
* Возвращает issues по JQL.
* Выполняется с учетом прав пользователя.
* @param jql : "project = TEST"
* @param user : getUser("admin")
* */
Collection<Issue> getIssuesByJQL(String jql, ApplicationUser user) throws JqlParseException, SearchException;
/**
* Возвращает issues по JQL в указанном диапазоне.
* Выполняется с учетом прав текущего пользователя.
* @param jql : "project = TEST"
* @param user : getUser("admin")
* @param startIndex : вернуть issues начиная с указанной позиции
* @param endIndex : вернуть issues заканчивая указанной позиции
* */
Collection<Issue> getIssuesByJQL(String jql, ApplicationUser user, int startIndex, int endIndex)
throws JqlParseException, SearchException;
long getCountIssuesByJQL(Query query) throws SearchException;
/**
* Возвращает количество issues по JQL.
* Выполняется с учетом прав пользователя.
* @param query : "project = TEST"
* @param user : getUser("admin")
* */
long getCountIssuesByJQL(Query query, ApplicationUser user) throws SearchException;
/**
* Возвращает количество issues по JQL.
* Выполняется с учетом прав текущего пользователя.
* @param query : parseQuery("project = TEST")
* */
Collection<Issue> getIssuesByJQL(Query query) throws SearchException;
/**
* Возвращает количество issues по JQL.
* Выполняется с учетом прав пользователя.
* @param query : parseQuery("project = TEST")
* @param user : getUser("admin")
* */
Collection<Issue> getIssuesByJQL(Query query, ApplicationUser user) throws SearchException;
/**
* Возвращает issues по JQL в указанном диапазоне.
* Выполняется с учетом прав текущего пользователя.
* @param query : parseQuery("project = TEST")
* @param user : getUser("admin")
* @param startIndex : вернуть issues начиная с указанной позиции
* @param endIndex : вернуть issues заканчивая указанной позиции
* */
Collection<Issue> getIssuesByJQL(Query query, ApplicationUser user, int startIndex, int endIndex)
throws SearchException;
/**
* Возвращает запрос полученный в результате разбора строки jql.
* @param jql : "project = TEST"
* */
Query parseQuery(String jql) throws JqlParseException;
/**
* Возвращает Attachments из issue.
* @param issue : getIssue("TEST-1")
* */
Collection<Attachment> getAttachments(Issue issue);
/**
* Создает комментарий в issue.
* Выполняется с учетом прав текущего пользователя.
* Без отправки уведомлений.
* @param issue : getIssue("TEST-1")
* @param text : "test comment"
* */
Comment createComment(Issue issue, String text);
/**
* Создает комментарий в issue.
* Выполняется с учетом прав пользователя.
* Без отправки уведомлений.
* @param issue : getIssue("TEST-1")
* @param user : getUser("admin")
* @param text : "test comment"
* */
Comment createComment(Issue issue, ApplicationUser user, String text);
/**
* Создает комментарий в issue.
* Выполняется с учетом прав пользователя.
* @param issue : getIssue("TEST-1")
* @param user : getUser("admin")
* @param text : "test comment"
* @param notification : флаг отправки уведомлений
* */
Comment createComment(Issue issue, ApplicationUser user, String text, boolean notification);
/**
* Создает комментарий в issue.
* Выполняется с учетом прав пользователя.
* @param issue : getIssue("TEST-1")
* @param user : getUser("admin")
* @param text : "test comment"
* @param groupLevel : ограничение видимости комментария группой
* @param roleLevelId : ограничение видимости комментария ролью
* @param notification : флаг отправки уведомлений
* */
Comment createComment(
Issue issue,
ApplicationUser user,
String text,
String groupLevel,
Long roleLevelId,
boolean notification);
/**
* Возвращает список комментариев (оставленное пользователем текстовое сообщение).
* @param issue : getIssue("TEST-1")
* */
Collection<String> getAllCommentsBody(Issue issue);
/**
* Возвращает список комментариев (как объектов).
* @param issue : getIssue("TEST-1")
* */
Collection<Comment> getAllComments(Issue issue);
/**
* Возвращает список компонент из проекта.
* @param project : getProject("TEST")
* */
Collection<ProjectComponent> getComponents(Project project);
/**
* Возвращает список компонент из проекта по id проекта.
* @param projectId : 10001
* */
Collection<ProjectComponent> getComponents(Long projectId);
/**
* Возвращает компоненту из проекта по ее названию.
* @param componentName : "component 1"
* @param projectId : 10001
* */
ProjectComponent getComponent(String componentName, Long projectId);
/**
* Возвращает компоненту из проекта по ее названию.
* @param componentName : "component 1"
* @param project : getProject("TEST")
* */
ProjectComponent getComponent(String componentName, Project project);
/**
* Возвращает компоненту по ее id.
* @param componentId : 10001
* */
ProjectComponent getComponent(Long componentId) throws EntityNotFoundException;
/**
* Проверяет, что в задаче есть компоненты.
* @param issue : getIssue("TEST-1")
* */
boolean hasComponents(Issue issue);
/**
* Проверяет, что в задаче есть указанная компонента.
* @param issue : getIssue("TEST-1")
* @param component : getComponent("component 1", getProject("TEST"))
* */
boolean hasComponent(Issue issue, ProjectComponent component);
/**
* Проверяет, что в задаче есть компонента с указанным названием.
* @param issue : getIssue("TEST-1")
* @param componentName : "component 1"
* */
boolean hasComponent(Issue issue, String componentName);
/**
* Проверяет, что в задаче есть компонента c указанным id.
* @param issue : getIssue("TEST-1")
* @param componentId : 10001
* */
boolean hasComponent(Issue issue, Long componentId);
/**
* Проверяет, что в задаче есть компоненты из списка.
* @param issue : getIssue("TEST-1")
* @param componentNames : ["component 1", "component 2"]
* */
// boolean hasComponents(Issue issue, Collection<String> componentNames)
/**
* Проверяет, что в задаче есть компоненты из списка.
* @param issue : getIssue("TEST-1")
* @param components : [getComponent(10001), getComponent(10002)]
* */
boolean hasComponents(Issue issue, Collection<ProjectComponent> components);
//todo updateIssue
//[customField: value]
/**
* Получает customField по id.
* @param fieldId : 10001
* */
CustomField getCustomFieldObject(Long fieldId);
/**
* Получает customField по названию.
* @param fieldName : "customfield_10001"
* */
CustomField getCustomFieldObject(String fieldName);
/**
* Получает значение customField из issue.
* @param issue : getIssue("TEST-1")
* @param fieldId : 10001
* */
Object gcfv(Issue issue, Long fieldId);
/** Отправляет email.
* @param emailAddr : "[email protected]"
* @param copy - ящики которые нужно добавить в копию, указываются через запятую
* @param subject - шаблон для заголовка сообщений
* @param body - тело сообщения
* @param from - адрес, который будет указан как отправитель этого сообщения. По умолчанию адрес JIRA
* @param replyTo - адрес, на который будет отправлен ответ на письмо
* @param emailFormat - "text/html" or "text/plain" or ...
* */
void sendEmail(
String emailAddr,
String copy,
String subject,
String body,
String from,
String replyTo,
String emailFormat);
/** Отправляет email.
* @param emailAddr : "[email protected]"
* @param copy - ящики которые нужно добавить в копию, указываются через запятую
* @param subject - шаблон для заголовка сообщений
* @param body - тело сообщения
* @param from - адрес, который будет указан как отправитель этого сообщения. По умолчанию адрес JIRA
* @param replyTo - адрес, на который будет отправлен ответ на письмо
* @param emailFormat - "text/html" or "text/plain" or ...
* @param attachments - list of attachments
* */
void sendEmail(
String emailAddr,
String copy,
String subject,
String body,
String from,
String replyTo,
String emailFormat,
List<Attachment> attachments)
throws MessagingException;
/**
* Получает список групп, в которых состоит пользователь.
* @param user : getUser("admin")
* */
Collection<Group> getGroupsForUser(ApplicationUser user);
/**
* Получает список пользователей, состоящих в группе (по ее имени).
* @param groupName : "jira-users"
* */
Collection<ApplicationUser> getUsersInGroup(String groupName);
/**
* Получает список пользователей, состоящих в группе.
* @param group : getGroup("jira-users")
* */
Collection<ApplicationUser> getUsersInGroup(Group group);
/**
* Получает группу по ее названию.
* @param groupName : "jira-users"
* */
Group getGroup(String groupName);
/**
* Проверяет, что текущий пользователь состоит в группе (по ее имени).
* @param groupName : "jira-users"
* */
boolean isCurrentUserInGroup(String groupName);
/**
* Проверяет, что текущий пользователь состоит в группе.
* @param group : getGroup("jira-users")
* */
boolean isCurrentUserInGroup(Group group);
/**
* Проверяет, что указанный пользователь состоит в группе (по ее имени).
* @param userName : "admin"
* @param groupName : "jira-users"
* */
boolean isUserInGroup(String userName, String groupName);
/**
* Проверяет, что указанный пользователь состоит в группе.
* @param user : getUser("admin")
* @param group : getGroup("jira-users")
* */
boolean isUserInGroup(ApplicationUser user, Group group);
/**
* Проверяет, что указанный пользователь состоит в группе (по ее имени).
* @param user : getUser("admin")
* @param groupName : "jira-users"
* */
boolean isUserInGroup(ApplicationUser user, String groupName);
/**
* Получает статус по id.
* @param statusId : "10001"
* */
Status getStatus(String statusId);
/**
* Получает предыдущий статус issue из истории.
* @param issue : getIssue("TEST-1")
* */
Status getPreviousStatus(Issue issue);
/**
* Получает предыдущее значение поля для issue из истории.
* @param customField : getCustomFieldObject(10001)
* @param issue : getIssue("TEST-1")
* */
String getPreviousCustomFieldValue(CustomField customField, Issue issue);
//todo getFromField
/**
* Получает предыдущего исполнителя для issue из истории.
* @param issue : getIssue("TEST-1")
* */
ApplicationUser getPreviousAssigneeFromHistory(Issue issue);
/**
* Возвращает html код таблицы из переданных заголовков и строк.
* @params heads: ["first","second","third"]
* @params rows:
* def row1 = [1,2,3]
* def row2 = [2,2,3]
* def row3 = [3,2,3]
* def row4 = [4,2,3]
* def rows = [row1, row2, row3, row4]
* @return getHTMLTable ( heads , rows )
*/
String createHTMLTable(List<String> heads, List<List<String>> rows);
//todo create Issue from json/map
//todo createSubIssue
//todo issue to map
/**
* Сохраняет изменения issue в базу данных.
* Выполняется с учетом прав текущего пользователя.
* Без уведомлений.
* @param issue : getIssue("TEST-1")
* */
Issue update(MutableIssue issue) throws IndexException;
/**
* Сохраняет изменения issue в базу данных.
* Выполняется с учетом прав пользователя.
* Без уведомлений.
* @param user : getUser("admin")
* @param issue : getIssue("TEST-1")
* */
Issue update(ApplicationUser user, MutableIssue issue) throws IndexException;
/**
* Сохраняет изменения issue в базу данных.
* Выполняется с учетом прав пользователя.
* @param user : getUser("admin")
* @param issue : getIssue("TEST-1")
* @param notification : флаг отправки уведомлений
* */
Issue update(ApplicationUser user, MutableIssue issue, boolean notification) throws IndexException;
/**
* Получает issue по id.
* @param issueId : 10001
* */
Issue getIssue(Long issueId);
/**
* Получает issue по key.
* @param issueKey : "TEST-1"
* */
Issue getIssue(String issueKey);
/**
* Связывает задачи указанным типом связи.
* Связи ориентированные.
* Выполняется с учетом прав текущего пользователя.
* @param fromIssue : getIssue("TEST-1")
* @param toIssue : getIssue("TEST-1")
* @param issueLinkTypeId : 10001
* */
void createLink(Issue fromIssue, Issue toIssue, Long issueLinkTypeId) throws CreateException;
/**
* Связывает задачи указанным типом связи.
* Связи ориентированные.
* Выполняется с учетом прав текущего пользователя.
* @param fromIssue : getIssue("TEST-1")
* @param toIssue : getIssue("TEST-1")
* @param issueLinkTypeId : 10001
* @param sequence : 0 - номер позиции новой связи в исходной issue
* */
void createLink(Issue fromIssue, Issue toIssue, Long issueLinkTypeId, Long sequence) throws CreateException;
/**
* Связывает задачи указанным типом связи.
* Связи ориентированные.
* Выполняется с учетом прав пользователя.
* @param fromIssue : getIssue("TEST-1")
* @param toIssue : getIssue("TEST-1")
* @param issueLinkTypeId : 10001
* @param sequence : 0 - номер позиции новой связи в исходной issue
* */
void createLink(
Issue fromIssue,
Issue toIssue,
Long issueLinkTypeId,
Long sequence,
ApplicationUser user) throws CreateException;
/**
* Получает список issues, которые ссылаются на указанную issue определенным типом связи.
* @param issue : getIssue("TEST-1")
* @param linkTypeId : 10001
* */
Collection<Issue> getInwardIssues(Issue issue, long linkTypeId);
/**
* Получает список issues, на которые ссылается указанная issue определенным типом связи.
* @param issue : getIssue("TEST-1")
* @param linkTypeId : 10001
* */
Collection<Issue> getOutwardIssues(Issue issue, long linkTypeId);
/**
* Получает список issues, связанных с issue определенным типом связи.
* @param issue : getIssue("TEST-1")
* @param linkTypeId : 10001
* */
Collection<Issue> getAllLinkedIssues(Issue issue, long linkTypeId);
/**
* Получает список issues, ссылающихся на указанную issue.
* @param issue : getIssue("TEST-1")
* */
Collection<Issue> getInwardIssues(Issue issue);
/**
* Получает список issues, на которые ссылается указанная issue.
* @param issue : getIssue("TEST-1")
* */
Collection<Issue> getOutwardIssues(Issue issue);
/**
* Получает список issues, связанных с issue.
* @param issue : getIssue("TEST-1")
* */
Collection<Issue> getAllLinkedIssues(Issue issue);
/**
* Получает список исходящих связей.
* @param issue : getIssue("TEST-1")
* */
Collection<IssueLink> getOutwardLinks(Issue issue);
/**
* Получает список входящих связей.
* @param issue : getIssue("TEST-1")
* */
Collection<IssueLink> getInwardLinks(Issue issue);
/**
* Получает Option по id.
* @param optionId : 10001
* */
Option getOptionById(Long optionId);
/**
* Получает все Options по текстовому значению.
* @param value : "option name 1"
* */
Collection<Option> getOptionsByValue(String value);
/**
* Получает все список опций для поля в указанном issue.
* Смотрится соответствующий контекст поля.
* @param customField : getCustomFieldObject(10001)
* @param issue : getIssue("TEST-1")
* */
Options getOptionsFor(CustomField customField, Issue issue);
/**
* Получает project по id.
* @param projectId : 10001
* */
Project getProject(Long projectId);
/**
* Получает project по key.
* @param projectKey : "TEST"
* @return объект проект
* */
Project getProject(String projectKey);
/**
* Получает список всех projects.
* */
Collection<Project> getAllProjects();
/**
* Реиндексирует список issues.
* @param issues : [getIssue("TEST-2"), getIssue("TEST-2")]
* */
Collection<Issue> reIndex(Collection<Issue> issues) throws IndexException;
/**
* Реиндексирует список issues.
* @param issues : [getIssue("TEST-2"), getIssue("TEST-2")]
* @param params : IssueIndexingParams.INDEX_ALL
* */
Collection<Issue> reIndex(Collection<Issue> issues, IssueIndexingParams params) throws IndexException;
/**
* Реиндексирует issue.
* @param issue : getIssue("TEST-2")
* */
Issue reIndex(Issue issue) throws IndexException;
/**
* Выполняет GET запрос по указанному URL.
* Возвращает ответ в виде json объекта.
* */
Object GET(String url) throws IOException;
/**
* Выполняет POST запрос по указанному URL.
* Возвращает ответ в виде json объекта.
* */
Object POST(String url, String content, String userName, String password) throws IOException;
/**
* Выполняет PUT запрос по указанному URL.
* Возвращает ответ в виде json объекта.
* */
Object PUT(String url, String content, String userName, String password) throws IOException;
/**
* Выполняет GET запрос по указанному URL.
* Возвращает ответ в виде json объекта.
* */
Object GET(String url, String userName, String password) throws IOException;
/**
* Парсит текст в json объект.
* @param text : "{"name": "Ivan"}"
* */
Object parseJSON(String text);
/**
* Конвертирует объект в json строку.
* */
String toJson(Object obj);
/**
* Проверяет, что указанный пользователь установлен в соответствующей роли на проекте.
* @param user : getUser("admin")
* @param projectRole : "ADMINISTRATORS"
* @param project : getProject("TEST")
* */
boolean isUserInProjectRole(ApplicationUser user, String projectRole, Project project);
/**
* Проверяет, что указанный пользователь установлен в соответствующей роли на проекте.
* @param user : getUser("admin")
* @param projectRole : getProjectRole("ADMINISTRATORS")
* @param project : getProject("TEST")
* */
boolean isUserInProjectRole(ApplicationUser user, ProjectRole projectRole, Project project);
/**
* Получает список ролей в проекте для указанного пользователя.
* @param user : getUser("admin")
* @param project : getProject("TEST")
* */
Collection<ProjectRole> getRolesForUser(ApplicationUser user, Project project);
/**
* Получает список пользователей в проекте для указанной роли.
* @param project : getProject("TEST")
* @param role : "ADMINISTRATORS"
* */
Collection<ApplicationUser> getUsersOnProjectRole(Project project, String role);
/**
* Получает список пользователей в проекте для указанной роли.
* @param project : getProject("TEST")
* @param role : getProjectRole("ADMINISTRATORS")
* */
Collection<ApplicationUser> getUsersOnProjectRole(Project project, ProjectRole role);
/**
* Получает проектную роль по названию.
* @param projectRoleName : "ADMINISTRATORS"
* */
ProjectRole getProjectRole(String projectRoleName);
/**
* Получает все проектные роли.
* */
Collection<ProjectRole> getAllRoles();
/**
* Ищет пользователя по почте.
* */
ApplicationUser findUserByEmail(String email);
/**
* Выполняет указанный переход с учетом прав текущего пользователя.
* @param issue : getIssue("TEST-1")
* @param actionId : 121
* */
boolean doTransition(MutableIssue issue, int actionId) throws GenericEntityException;
/**
* Выполняет указанный переход с учетом прав указанного пользователя.
* @param issue : getIssue("TEST-1")
* @param actionId : 121
* @param user : getUser("admin")
* */
boolean doTransition(MutableIssue issue, int actionId, ApplicationUser user) throws GenericEntityException;
/**
* Возвращает пользователя по логину: jellyrunner .
* */
ApplicationUser getJellyrunner();
/**
* Возвращает пользователя по указанному логину.
* @param userName : "admin"
* */
ApplicationUser getUser(String userName);
/**
* Возвращает пользователя по userKey.
* @param userKey : "[email protected]"
* */
ApplicationUser getUserByKey(String userKey);
/**
* Возвращает список наблюдателей за issue.
* @param issue : getIssue("TEST-1")
* */
Collection<ApplicationUser> getAllWatchers(Issue issue);
/**
* Убирает пользователя из наблюдателей.
* @param user : getUser("admin")
* @param issue : getIssue("TEST-1")
* */
Issue stopWatching(ApplicationUser user, Issue issue);
/**
* Добавляет пользователя в наблюдатели.
* @param user : getUser("admin")
* @param issue : getIssue("TEST-1")
* */
Issue startWatching(ApplicationUser user, Issue issue);
void setCheckBox(MutableIssue issue, long fieldId, List<Long> optionsId);
void setMultiSelectList(MutableIssue issue, long fieldId, List<Long> optionsId);
void setSingleSelectList(MutableIssue issue, long fieldId, long optionId);
void setCascadeSelectList(MutableIssue issue, long fieldId, long parentOptionId, long childOptionId);
}