/src/main/resources/com/onresolve/jira/groovy/canned/workflow/postfunctions/FireEventWhen.groovy
Groovy | 101 lines | 75 code | 19 blank | 7 comment | 3 complexity | d44d095b220f1da66583278e7420025d MD5 | raw file
- package com.onresolve.jira.groovy.canned.workflow.postfunctions
-
- import com.onresolve.jira.groovy.canned.CannedScript
- import com.atlassian.jira.util.ErrorCollection
- import com.onresolve.jira.groovy.canned.utils.CannedScriptUtils
- import com.atlassian.jira.issue.Issue
- import com.atlassian.jira.issue.comments.Comment
- import org.ofbiz.core.entity.GenericValue
- import com.atlassian.jira.event.issue.IssueEventSource
- import com.atlassian.jira.event.issue.IssueEventDispatcher
- import com.atlassian.jira.ManagerFactory
- import org.apache.log4j.Category
- import com.onresolve.jira.groovy.canned.utils.ConditionUtils
- import com.atlassian.jira.issue.MutableIssue
- import com.onresolve.jira.groovy.canned.utils.WorkflowUtils
- import com.atlassian.core.ofbiz.CoreFactory
-
- /**
- * User: jechlin2
- * Date: 20/12/10
- * Time: 14:57
- */
- class FireEventWhen implements CannedScript {
-
- Category log = Category.getInstance(FireEventWhen.class)
- public static String FIELD_EVENT_ID = "FIELD_EVENT_ID"
-
- String getName() {
- "Fires an event when condition is true"
- }
-
- public String getHelpUrl() {
- "https://studio.plugins.atlassian.com/wiki/display/GRV/Built-In+Scripts#Built-InScripts-Firesaneventwhenconditionistrue"
- }
-
- String getDescription() {
- "Fires an event that can be picked up by a notification scheme, in order to send mail only under certain conditions, eg Priority is Blocker"
- }
-
- List getCategories() {
- ["Function", "Listener"]
- }
-
-
- List getParameters(Map params) {
- [
- ConditionUtils.getConditionParameter(),
- [
- Name:FIELD_EVENT_ID,
- Label:"Event",
- Type: "list",
- Description:"Name of event to fire",
- Values: CannedScriptUtils.getEvents(true),
- ],
- ]
- }
-
- ErrorCollection doValidate(Map params, boolean forPreview) {
- return null
- }
-
- Map doScript(Map params) {
-
- Map transientVars = params['transientVars'] as Map
- MutableIssue issue = params['issue'] as MutableIssue
-
- Boolean doIt = ConditionUtils.processCondition(params[ConditionUtils.FIELD_CONDITION] as String, issue, false, params)
- if (! doIt) {
- return [:]
- }
-
- log.debug ("Raising event: " + params[FIELD_EVENT_ID])
-
- Comment comment = null
- GenericValue changeGroup = null
-
- if (transientVars) {
- comment = (Comment) transientVars.get("commentValue");
- changeGroup = (GenericValue) transientVars.get("changeGroup");
- Map eventParams = new HashMap(4);
- eventParams.put("eventsource", IssueEventSource.WORKFLOW);
- }
- else {
- Collection<GenericValue> changeGroups = CoreFactory.getGenericDelegator().findByAnd("ChangeGroup", ["issue": issue.getId()]);
- // todo: possible bug
- // https://answers.atlassian.com/questions/47303/how-to-fire-an-event-when-custom-field-gets-updated-to-from-a-specific-value-using-script-listeners
- changeGroup = changeGroups ? changeGroups.last() : null
- }
-
- IssueEventDispatcher.dispatchEvent(params[FIELD_EVENT_ID] as Long, issue, WorkflowUtils.getUser(params), comment, null, changeGroup, params, true);
- params
- }
-
- String getDescription(Map params, boolean forPreview) {
- return getDescription()
- }
-
- public Boolean isFinalParamsPage(Map params) {
- true
- }
- }