Package ru.mail.jira.plugins.lf

Source Code of ru.mail.jira.plugins.lf.LirkerFieldSearchInputTransformer

/*
* Created by Andrey Markelov 29-08-2012.
* Copyright Mail.Ru Group 2012. All rights reserved.
*/
package ru.mail.jira.plugins.lf;

import java.util.ArrayList;
import java.util.List;
import com.atlassian.jira.bc.issue.search.QueryContextConverter;
import com.atlassian.jira.issue.customfields.searchers.transformer.CustomFieldInputHelper;
import com.atlassian.jira.issue.customfields.searchers.transformer.MultiSelectCustomFieldSearchInputTransformer;
import com.atlassian.jira.issue.customfields.view.CustomFieldParams;
import com.atlassian.jira.issue.customfields.view.CustomFieldParamsImpl;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.search.ClauseNames;
import com.atlassian.jira.issue.search.SearchContext;
import com.atlassian.jira.issue.search.searchers.transformer.SimpleNavigatorCollectorVisitor;
import com.atlassian.jira.jql.operand.JqlOperandResolver;
import com.atlassian.jira.jql.operand.QueryLiteral;
import com.atlassian.jira.jql.util.JqlSelectOptionsUtil;
import com.atlassian.query.Query;
import com.atlassian.query.clause.Clause;
import com.atlassian.query.clause.TerminalClause;
import com.atlassian.query.operand.FunctionOperand;
import com.atlassian.query.operand.MultiValueOperand;
import com.atlassian.query.operand.Operand;
import com.atlassian.query.operand.SingleValueOperand;
import com.atlassian.query.operator.Operator;
import com.atlassian.crowd.embedded.api.User;

/**
* Search input transformer.
*
* @author Andrey Markelov
*/
public class LirkerFieldSearchInputTransformer
    extends MultiSelectCustomFieldSearchInputTransformer
{
    private JqlOperandResolver jqlOperandResolver;

    /**
     * Constructor.
     */
    public LirkerFieldSearchInputTransformer(
        String urlParameterName,
        ClauseNames clauseNames,
        CustomField field,
        JqlOperandResolver jqlOperandResolver,
        JqlSelectOptionsUtil jqlSelectOptionsUtil,
        QueryContextConverter queryContextConverter,
        CustomFieldInputHelper customFieldInputHelper)
    {
        super(urlParameterName, clauseNames, field, jqlOperandResolver, jqlSelectOptionsUtil, queryContextConverter, customFieldInputHelper);
        this.jqlOperandResolver = jqlOperandResolver;
    }

    public boolean doRelevantClausesFitFilterForm(
        User searcher,
        Query query,
        SearchContext searchContext)
    {
        if(query != null && query.getWhereClause() != null)
        {
            boolean result = true;
            Clause whereClause = query.getWhereClause();
            SimpleNavigatorCollectorVisitor collector = new SimpleNavigatorCollectorVisitor(getCustomField().getClauseNames().getJqlFieldNames());
            whereClause.accept(collector);

            List<TerminalClause> clauseList = collector.getClauses();
            for(TerminalClause clause : clauseList)
            {
                if(!hasValidSimpleOperators(clause.getOperator()) || !hasValidSimpleOperand(clause.getOperand()))
                {
                    result = false;
                }
            }

            return result;
        }

        return false;
    }

    protected CustomFieldParams getParamsFromSearchRequest(
        User searcher,
        Query query,
        SearchContext searchContext)
    {
        List<String> params = new ArrayList<String>();
        if(query != null && query.getWhereClause() != null)
        {
            Clause whereClause = query.getWhereClause();
            SimpleNavigatorCollectorVisitor collector = new SimpleNavigatorCollectorVisitor(getCustomField().getClauseNames().getJqlFieldNames());
            whereClause.accept(collector);

            List<TerminalClause> clauseList = collector.getClauses();
            for(TerminalClause clause : clauseList)
            {
                Operand operand = clause.getOperand();
                if(jqlOperandResolver.isValidOperand(operand))
                {
                    if(jqlOperandResolver.isFunctionOperand(operand))
                    {
                        jqlOperandResolver.sanitiseFunctionOperand(searcher, (FunctionOperand)operand);
                    }

                    List<QueryLiteral> operandValues = jqlOperandResolver.getValues(searcher, operand, clause);
                    for(QueryLiteral value : operandValues)
                    {
                        params.add(value.getStringValue());
                    }
                }
            }
        }

        return new CustomFieldParamsImpl(getCustomField(), params);
    }

    protected boolean hasValidSimpleOperand(Operand operand)
    {
        if(operand instanceof SingleValueOperand || operand instanceof MultiValueOperand)
        {
            return true;
        }

        return false;
    }

    protected boolean hasValidSimpleOperators(Operator operator)
    {
        if(operator == Operator.EQUALS || operator == Operator.IN)
        {
            return true;
        }

        return false;
    }
}
TOP

Related Classes of ru.mail.jira.plugins.lf.LirkerFieldSearchInputTransformer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.