Package ru.mail.jira.plugins.lf

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

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

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.search.SearchException;
import com.atlassian.jira.issue.search.SearchResults;
import com.atlassian.jira.util.JiraWebUtils;
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.query.Query;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.InvalidInputException;
import com.opensymphony.workflow.Validator;
import com.opensymphony.workflow.WorkflowException;

/**
* Validate linked issues statuses.
*
* @author Andrey Markelov
*/
public class SingleLinkedFieldValidator
    implements Validator
{
    /**
     * Constructor.
     */
    public SingleLinkedFieldValidator() {}

    @Override
    public void validate(
        Map transientVars,
        Map args,
        PropertySet ps)
    throws InvalidInputException, WorkflowException
    {
        Issue issue = (Issue) transientVars.get("issue");
        String jql = (String) args.get("jql");
        String invalid_statuses = (String) args.get("invalid_statuses");

        if (jql != null && jql.length() > 0)
        {
            if (jql.contains(Consts.ISSUE_RLINK))
            {
                if (issue.getKey() == null)
                {
                    return;
                }
                jql = jql.replace(Consts.ISSUE_RLINK, issue.getKey());
            }

            User user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
            SearchService.ParseResult parseResult = ComponentManager.getInstance().getSearchService().parseQuery(user, jql);
            if (parseResult.isValid())
            {
                Set<String> params = new TreeSet<String>();
                if (invalid_statuses != null)
                {
                    StringTokenizer st = new StringTokenizer(invalid_statuses, "&");
                    while (st.hasMoreTokens())
                    {
                        String token = st.nextToken();
                        if (token.length() > 0)
                        {
                            params.add(token.trim());
                        }
                    }
                }

                Query query = parseResult.getQuery();
                try
                {
                    SearchResults results = ComponentManager.getInstance().getSearchService().search(user, query, PagerFilter.getUnlimitedFilter());
                    List<Issue> issues = results.getIssues();
                    for (Issue i : issues)
                    {
                        if (params.contains(i.getStatusObject().getId()))
                        {
                            String issueUrl = Utils.getBaseUrl(JiraWebUtils.getHttpRequest()) + "/browse/" + i.getKey();
                            throw new InvalidInputException(
                                ComponentAccessor.getJiraAuthenticationContext().getI18nHelper().getText("queryfields.linkedvalidator.error", issueUrl, i.getStatusObject().getName()));
                        }
                    }
                }
                catch (SearchException e)
                {
                    //--> nothing to do
                }
            }
        }
    }
}
TOP

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

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.