diff options
Diffstat (limited to 'sonar-server')
3 files changed, 22 insertions, 2 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java index e0ea1b1004f..df520e59ad2 100644 --- a/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java +++ b/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java @@ -32,6 +32,7 @@ import org.sonar.api.rules.RulePriority; import org.sonar.api.rules.RuleRepository; import org.sonar.api.utils.ValidationMessages; import org.sonar.api.web.*; +import org.sonar.core.i18n.RuleI18nManager; import org.sonar.jpa.dialect.Dialect; import org.sonar.jpa.session.DatabaseConnector; import org.sonar.markdown.Markdown; @@ -330,6 +331,13 @@ public final class JRubyFacade { return i18n.getRuleParamDescription(rubyLocale, repositoryKey, key, paramKey); } + public List<RuleI18nManager.RuleKey> searchRuleName(String rubyLocale, String searchText) { + if (i18n == null) { + i18n = getContainer().getComponent(JRubyI18n.class); + } + return i18n.searchRuleName(rubyLocale, searchText); + } + public ReviewsNotificationManager getReviewsNotificationManager() { return getContainer().getComponent(ReviewsNotificationManager.class); } diff --git a/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java b/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java index e7d9804e3f3..077556d67b3 100644 --- a/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java +++ b/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java @@ -25,6 +25,7 @@ import org.sonar.api.ServerComponent; import org.sonar.api.i18n.I18n; import org.sonar.core.i18n.RuleI18nManager; +import java.util.List; import java.util.Locale; import java.util.Map; @@ -81,4 +82,8 @@ public final class JRubyI18n implements ServerComponent { public String getRuleParamDescription(String rubyLocale, String repositoryKey, String ruleKey, String paramKey) { return ruleI18nManager.getParamDescription(repositoryKey, ruleKey, paramKey, toLocale(rubyLocale)); } + + public List<RuleI18nManager.RuleKey> searchRuleName(String rubyLocale, String searchText) { + return ruleI18nManager.searchNames(searchText, toLocale(rubyLocale)); + } } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb index 6724dcbeac8..b21f4a4480e 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb @@ -207,15 +207,22 @@ class Rule < ActiveRecord::Base end unless options[:searchtext].blank? - conditions << "(UPPER(rules.name) LIKE :searchtext OR plugin_rule_key = :key)" searchtext = options[:searchtext].to_s.strip + search_text_conditions='(UPPER(rules.name) LIKE :searchtext OR plugin_rule_key = :key' + + additional_keys=java_facade.searchRuleName(I18n.locale, searchtext) + additional_keys.each do |java_rule_key| + search_text_conditions<<" OR (plugin_name='#{java_rule_key.getRepositoryKey()}' AND plugin_rule_key='#{java_rule_key.getKey()}')" + end + + search_text_conditions<<')' + conditions << search_text_conditions values[:searchtext] = "%" << searchtext.clone.upcase << "%" values[:key] = searchtext end includes=(options[:include_parameters] ? :rules_parameters : nil) rules = Rule.find(:all, :include => includes, :conditions => [conditions.join(" AND "), values]).sort_by { |rule| rule.name } - filter(rules, options) end |