I have requirement to find certain linked issues of a issue in particular project or all of JIRA based on criteria.
The requirement is too find all the tickets which have due date later than parent linked issue
For Eg.
Issue Ticket(MM/dd/yyyy) Linked Issues
ABCDEF-15(Due Date- 09/01/2018) ---> KLMNOP-254 (07/31/2018)
---> KLMNOP-380 (06/30/2018)
---> KLMNOP-410 (09/30/2018)
---> KLMNOP-415 (09/30/2018)
---> TUVWXY-12484 (06/30/2018)
---> KLMNOP-385 (06/30/2018)
---> KLMNOP-271 (06/30/2018)
---> KLMNOP-273 (06/30/2018)
---> KLMNOP-336 (12/31/2021)
Final Result
Issue Ticket Linked Issues(dates after link due date)
ABCDEF-15(Due Date- 09/01/2018) ---> KLMNOP-410 (09/30/2018)
---> KLMNOP-415 (09/30/2018)
---> KLMNOP-336 (12/31/2021)
I want the linked issue for ABCDEF-15, this is a specific type of ticket.
The example provided Example JQL Function is too simple and does not explain the JQL API.
Here is my sample code
import java.util.LinkedList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.JiraDataType;
import com.atlassian.jira.JiraDataTypes;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.link.IssueLinkManager;
import com.atlassian.jira.jql.operand.QueryLiteral;
import com.atlassian.jira.jql.query.QueryCreationContext;
import com.atlassian.jira.plugin.jql.function.AbstractJqlFunction;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.util.MessageSet;
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
import com.atlassian.query.clause.TerminalClause;
import com.atlassian.query.operand.FunctionOperand;
/**
* Echoes the the string passed in as an argument.
*/
@Scanned
public class AkhilTestJqlFunction extends AbstractJqlFunction
{
private static final Logger log = LoggerFactory.getLogger(AkhilTestJqlFunction.class);
@ComponentImport
private final IssueLinkManager issueLinkManager;
@ComponentImport
private final IssueManager issueManager;
@ComponentImport
private final CustomFieldManager customFieldManager;
public AkhilTestJqlFunction(IssueLinkManager issueLinkManager, IssueManager issueManager,
CustomFieldManager customFieldManager) {
super();
log.warn("warn- AkhilTestJqlFunction constructor got called");
log.debug("debug- AkhilTestJqlFunction constructor got called");
log.trace("trace- AkhilTestJqlFunction constructor got called");
this.issueLinkManager = issueLinkManager;
this.issueManager = issueManager;
this.customFieldManager = customFieldManager;
}
public MessageSet validate(User searcher, FunctionOperand operand, TerminalClause terminalClause)
{
return validateNumberOfArgs(operand, 1);
}
public List<QueryLiteral> getValues(QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause)
{
log.warn("warn- get values got called");
log.debug("debug- get values got called");
log.trace("trace- get values got called");
final List<QueryLiteral> literals = new LinkedList<QueryLiteral>();
/*final List<UserHistoryItem> projects = userProjectHistoryManager.getProjectHistoryWithoutPermissionChecks(queryCreationContext.getApplicationUser());
for (final UserHistoryItem userHistoryItem : projects) {
final String value = userHistoryItem.getEntityId();
try {
literals.add(new QueryLiteral(operand, Long.parseLong(value)));
} catch (NumberFormatException e) {
log.warn(String.format("User history returned a non numeric project IS '%s'.", value));
}
}*/
return null;
}
public int getMinimumNumberOfExpectedArguments()
{
return 0;
}
public JiraDataType getDataType()
{
return JiraDataTypes.ISSUE;
}
public MessageSet validate(ApplicationUser arg0, FunctionOperand operand, TerminalClause arg2) {
return validateNumberOfArgs(operand, 0);
}
}
The above code is still in progress code.
Please help by providing solution and pointing me in right direction.