PageRenderTime 51ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/src/main/java/com/atlassian/jconnect/jira/customfields/LocationSearchClauseValidator.java

https://bitbucket.org/atlassian/jiraconnect-jiraplugin/
Java | 64 lines | 48 code | 11 blank | 5 comment | 9 complexity | 9394b3f44fc134f6c9c5b13500a77647 MD5 | raw file
  1. package com.atlassian.jconnect.jira.customfields;
  2. import com.atlassian.jira.jql.operand.JqlOperandResolver;
  3. import com.atlassian.jira.jql.operand.QueryLiteral;
  4. import com.atlassian.jira.jql.validator.ClauseValidator;
  5. import com.atlassian.jira.util.I18nHelper;
  6. import com.atlassian.jira.util.MessageSet;
  7. import com.atlassian.jira.util.MessageSetImpl;
  8. import com.atlassian.jira.util.NotNull;
  9. import com.atlassian.jira.web.bean.I18nBean;
  10. import com.atlassian.query.clause.TerminalClause;
  11. import com.atlassian.query.operator.Operator;
  12. import com.opensymphony.user.User;
  13. import java.util.List;
  14. import java.util.Set;
  15. import static com.google.common.base.Preconditions.checkNotNull;
  16. /**
  17. * Clause validator for location queries.
  18. *
  19. */
  20. public class LocationSearchClauseValidator implements ClauseValidator {
  21. // TODO should use SupportedOperatorsValidator
  22. private final JqlOperandResolver operandResolver;
  23. private final Set<Operator> supported;
  24. public LocationSearchClauseValidator(Set<Operator> supportedOperators, JqlOperandResolver operandResolver) {
  25. this.operandResolver = operandResolver;
  26. this.supported = checkNotNull(supportedOperators);
  27. }
  28. public MessageSet validate(User searcher, @NotNull TerminalClause terminalClause) {
  29. final MessageSet errors = new MessageSetImpl();
  30. final I18nHelper i18n = new I18nBean(searcher);
  31. if (!supported.contains(terminalClause.getOperator())) {
  32. errors.addErrorMessage(i18n.getText("customfields.locationsearcher.error.unsupportedoperator",
  33. terminalClause.getOperator().getDisplayString()));
  34. } else {
  35. validateOperand(errors, i18n, searcher, terminalClause);
  36. }
  37. return errors;
  38. }
  39. private void validateOperand(MessageSet errors, I18nHelper i18n, User searcher, TerminalClause terminalClause) {
  40. final List<QueryLiteral> literals = operandResolver.getValues(searcher, terminalClause.getOperand(), terminalClause);
  41. if (terminalClause.getOperator() == Operator.LIKE) {
  42. if (literals != null) {
  43. if (literals.size() != 1) {
  44. errors.addErrorMessage(i18n.getText("customfields.locationsearcher.error.toomanyliterals", terminalClause));
  45. return;
  46. }
  47. for (QueryLiteral queryLiteral : literals) {
  48. LocationParser.validateAndParseLocationQuery(queryLiteral.getStringValue(), i18n, errors);
  49. }
  50. }
  51. }
  52. }
  53. }