aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java8
-rw-r--r--sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java5
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb11
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