|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.atlassian.greenhopper.customfield.backlog.BacklogJqlOperandResolverWrapper
public class BacklogJqlOperandResolverWrapper
Searching for Backlogs in JQL is using implicit inclusion: When the user looks for one backlog, all children are considered to be automatically included. Since the relation between issue and backlog is 1-n (unlike n-m against fixVersions), this implicit inclusion has to be done in the JQL logic.
The inversion of that is called "pending" (as in "issues that are still in the 'parent/product' backlog and not yet scheduled into a sprint").
PendingJqlFunction
is used to disable the implicit inclusion.
Now in order to make the whole thing work, we have to modify the query. A good place might have been BacklogIndexInfoResolver
, but it
operates on plain String/Long values and has no notion of QueryLiteral
s or any other object that could carry the logic around that the
function was involved, so it wouldn't have worked for the function.
What we're doing instead is wrapping the JqlOperandResolver that constructs the QueryLiterals in the first place. Since the JIRA-generated instance
is final, we'll wrap it here. Only one instance of the wrapper will be created by BacklogSearcher
.
Constructor Summary | |
---|---|
BacklogJqlOperandResolverWrapper(com.atlassian.jira.jql.operand.JqlOperandResolver wrappedResolver,
BacklogIndexInfoResolver indexInfoResolver,
BacklogHierarchyService backlogHierarchyService,
BacklogService backlogService)
|
Method Summary | |
---|---|
com.atlassian.jira.jql.operand.QueryLiteral |
getSingleValue(com.atlassian.crowd.embedded.api.User user,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause clause)
|
com.atlassian.jira.jql.operand.QueryLiteral |
getSingleValue(com.opensymphony.user.User user,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause clause)
|
java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> |
getValues(com.atlassian.jira.jql.query.QueryCreationContext queryCreationContext,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause terminalClause)
Here goes the magic. |
java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> |
getValues(com.atlassian.crowd.embedded.api.User searcher,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause terminalClause)
|
java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> |
getValues(com.opensymphony.user.User searcher,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause terminalClause)
|
boolean |
isEmptyOperand(com.atlassian.query.operand.Operand operand)
|
boolean |
isFunctionOperand(com.atlassian.query.operand.Operand operand)
|
boolean |
isListOperand(com.atlassian.query.operand.Operand operand)
|
boolean |
isValidOperand(com.atlassian.query.operand.Operand operand)
|
com.atlassian.query.operand.FunctionOperand |
sanitiseFunctionOperand(com.atlassian.crowd.embedded.api.User searcher,
com.atlassian.query.operand.FunctionOperand operand)
|
com.atlassian.query.operand.FunctionOperand |
sanitiseFunctionOperand(com.opensymphony.user.User searcher,
com.atlassian.query.operand.FunctionOperand operand)
|
com.atlassian.jira.util.MessageSet |
validate(com.atlassian.crowd.embedded.api.User user,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause terminalClause)
We don't really need to do something on validation, since we're generating the QueryLiterals ourselves, so we're pretty sure it's correct what we're doing. |
com.atlassian.jira.util.MessageSet |
validate(com.opensymphony.user.User user,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.TerminalClause terminalClause)
|
com.atlassian.jira.util.MessageSet |
validate(com.atlassian.crowd.embedded.api.User searcher,
com.atlassian.query.operand.Operand operand,
com.atlassian.query.clause.WasClauseImpl clause)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public BacklogJqlOperandResolverWrapper(com.atlassian.jira.jql.operand.JqlOperandResolver wrappedResolver, BacklogIndexInfoResolver indexInfoResolver, BacklogHierarchyService backlogHierarchyService, BacklogService backlogService)
Method Detail |
---|
public java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> getValues(com.atlassian.crowd.embedded.api.User searcher, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause terminalClause)
getValues
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> getValues(com.opensymphony.user.User searcher, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause terminalClause)
getValues
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public java.util.List<com.atlassian.jira.jql.operand.QueryLiteral> getValues(com.atlassian.jira.jql.query.QueryCreationContext queryCreationContext, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause terminalClause)
getValues
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.jira.util.MessageSet validate(com.atlassian.crowd.embedded.api.User user, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause terminalClause)
validate
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.jira.util.MessageSet validate(com.opensymphony.user.User user, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause terminalClause)
validate
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.query.operand.FunctionOperand sanitiseFunctionOperand(com.atlassian.crowd.embedded.api.User searcher, com.atlassian.query.operand.FunctionOperand operand)
sanitiseFunctionOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.query.operand.FunctionOperand sanitiseFunctionOperand(com.opensymphony.user.User searcher, com.atlassian.query.operand.FunctionOperand operand)
sanitiseFunctionOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.jira.jql.operand.QueryLiteral getSingleValue(com.atlassian.crowd.embedded.api.User user, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause clause)
getSingleValue
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.jira.jql.operand.QueryLiteral getSingleValue(com.opensymphony.user.User user, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.TerminalClause clause)
getSingleValue
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public boolean isEmptyOperand(com.atlassian.query.operand.Operand operand)
isEmptyOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public boolean isFunctionOperand(com.atlassian.query.operand.Operand operand)
isFunctionOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public boolean isListOperand(com.atlassian.query.operand.Operand operand)
isListOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public boolean isValidOperand(com.atlassian.query.operand.Operand operand)
isValidOperand
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
public com.atlassian.jira.util.MessageSet validate(com.atlassian.crowd.embedded.api.User searcher, com.atlassian.query.operand.Operand operand, com.atlassian.query.clause.WasClauseImpl clause)
validate
in interface com.atlassian.jira.jql.operand.JqlOperandResolver
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |