The scenario is ...let say Task (parent) has three linked issues ie CR Task (standard type) ..so is all are the CR Task is in the same (Closed)status then the Task(parent) should transit to fully-deployed and any of the CR Task is not in closed status then the Task(parent) should transit to partially deployed.
We have written a script like below but it's not working as expected...
import java.util.Map;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import java.util.Collection;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.issue.link.IssueLinkType;
import com.atlassian.jira.issue.link.LinkCollection;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.web.bean.PagerFilter;
import org.ofbiz.core.entity.GenericValue;
import com.atlassian.jira.bc.issue.IssueService;
import com.atlassian.jira.bc.issue.IssueService.TransitionValidationResult;
import com.atlassian.jira.issue.IssueInputParameters;
import com.atlassian.jira.issue.IssueInputParametersImpl;
import com.atlassian.jira.workflow.JiraWorkflow;
import com.opensymphony.workflow.loader.ActionDescriptor;
import com.atlassian.jira.issue.MutableIssue;
MutableIssue myIssue = issue
Issue issue = issue;
if(issue != null)
{
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
boolean flag = false;
int count = 0;
@ Issue Status is : "+issue.getStatus().getName());
List<IssueLink> links = ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId());
@ Issue Links is : " +links);
for (final IssueLink link : links)
{
final String name = link.getIssueLinkType().getName();
final Issue destinationObject = link.getDestinationObject();
//Looking for Application Release
if(destinationObject.getIssueType().getName().equalsIgnoreCase("Task"))
{
List<IssueLink> application_linked_ticket = ComponentAccessor.getIssueLinkManager().getOutwardLinks(destinationObject.getId());
@ Destination object type : " +destinationObject.getIssueType().getName());
for (final IssueLink appLink : application_linked_ticket)
{
final Issue linkedTicket = appLink.getDestinationObject();
if(linkedTicket.getIssueType().getName().equalsIgnoreCase("CR Task") && !(issue.equals(linkedTicket)))
{
count++;
// Status Fully Deployed
if(linkedTicket.getStatus().getName().equalsIgnoreCase("In Progress"))
{
flag = true;
}
else
{
flag = false;
break;
}
}
}
// Transition to Fully Deployed
if(flag || count ==0)
{
@ fully Destination Object Status is : " + destinationObject.getStatus().getName());
JiraWorkflow workFlow = ComponentAccessor.getWorkflowManager().getWorkflow(destinationObject);
@ : " + ComponentAccessor.getWorkflowManager().getWorkflow(destinationObject));
com.opensymphony.workflow.loader.StepDescriptor currentStep = workFlow.getLinkedStep(destinationObject.getStatus());
List<ActionDescriptor> actions = currentStep.getActions();
for(ActionDescriptor action : actions)
{
@ Action for fully is : " + action.getId());
if(action.getId() == 41)
{
boolean result = false;
IssueService issueService = ComponentAccessor.getIssueService();
IssueService.IssueResult transResult;
IssueInputParameters issueInputParameters = new IssueInputParametersImpl();
TransitionValidationResult validationResult = issueService.validateTransition(user, destinationObject.getId(), action.getId(), issueInputParameters);
result = validationResult.isValid();
if(result)
{
transResult = issueService.transition(user, validationResult);
}
}
}
}
else //tranistion to partially deployed
{
@ partially Destination Object Status is : " + destinationObject.getStatus().getName());
JiraWorkflow workFlow = ComponentAccessor.getWorkflowManager().getWorkflow(destinationObject);
@ : " + ComponentAccessor.getWorkflowManager().getWorkflow(destinationObject));
com.opensymphony.workflow.loader.StepDescriptor currentStep = workFlow.getLinkedStep(destinationObject.getStatus());
List<ActionDescriptor> actions = currentStep.getActions();
for(ActionDescriptor action : actions)
{
@ Action for partially is : " + action.getId());
if(action.getId() == 11)
{
boolean result = false;
IssueService issueService = ComponentAccessor.getIssueService();
IssueService.IssueResult transResult;
IssueInputParameters issueInputParameters = new IssueInputParametersImpl();
TransitionValidationResult validationResult = issueService.validateTransition(user, destinationObject.getId(), action.getId(), issueInputParameters);
result = validationResult.isValid();
if(result)
{
transResult = issueService.transition(user, validationResult);
}
}
}
}
}
}
@ Issue Links For bloack");
}