]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1722 add a filter on inheritance field
authorsimonbrandhof <simon.brandhof@gmail.com>
Wed, 22 Dec 2010 16:59:08 +0000 (16:59 +0000)
committersimonbrandhof <simon.brandhof@gmail.com>
Wed, 22 Dec 2010 16:59:08 +0000 (16:59 +0000)
sonar-server/src/main/java/org/sonar/server/startup/DeleteDeprecatedMeasures.java [new file with mode: 0644]
sonar-server/src/main/webapp/WEB-INF/app/controllers/api/rules_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/controllers/rules_configuration_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/models/active_rule.rb
sonar-server/src/main/webapp/WEB-INF/app/models/profile.rb
sonar-server/src/main/webapp/WEB-INF/app/models/rule.rb
sonar-server/src/main/webapp/WEB-INF/app/views/rules_configuration/index.html.erb

diff --git a/sonar-server/src/main/java/org/sonar/server/startup/DeleteDeprecatedMeasures.java b/sonar-server/src/main/java/org/sonar/server/startup/DeleteDeprecatedMeasures.java
new file mode 100644 (file)
index 0000000..97c6a3f
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2009 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.server.startup;
+
+import org.sonar.jpa.session.DatabaseSessionFactory;
+
+public class DeleteDeprecatedMeasures {
+  public DeleteDeprecatedMeasures(DatabaseSessionFactory sessionFactory) {
+
+  }
+}
index 1fc65c297a56dd60a8d14c15fc156852c070e4cd..e3d78fba99fb3b3ca3725d00384e6914719a250b 100644 (file)
@@ -33,6 +33,7 @@ class Api::RulesController < Api::RestController
     options[:status]=params[:status]\r
     options[:searchtext]=params[:searchtext]\r
     options[:include_parameters]=true\r
+    options[:inheritance]=params[:inheritance]\r
     \r
 \r
     if params[:profile]\r
index 2688bb4b1c89cc4c07d4de32c0c053edf51d2efa..0d58ca0ac9dabe6193daf135902d9d9a3d0bf88c 100644 (file)
@@ -40,13 +40,13 @@ class RulesConfigurationController < ApplicationController
         return\r
       end\r
       begin\r
-        @profile = RulesProfile.find(params[:id].to_i)\r
+        @profile = Profile.find(params[:id].to_i)\r
       rescue\r
         redirect_to :controller => 'profiles'\r
         return\r
       end\r
     else\r
-      @profile = RulesProfile.default_profile\r
+      @profile = Profile.default_profile\r
     end\r
     \r
     init_params()\r
@@ -54,9 +54,10 @@ class RulesConfigurationController < ApplicationController
     @select_plugins = ANY_SELECTION + java_facade.getRuleRepositoriesByLanguage(@profile.language).collect { |repo| [repo.getName(true), repo.getKey()]}.sort\r
     @select_priority = ANY_SELECTION + RULE_PRIORITIES\r
     @select_status = [['Any',''], ["Active", STATUS_ACTIVE], ["Inactive", STATUS_INACTIVE]]\r
+    @select_inheritance = [['Any',''], ["Not inherited", 'NOT'], ["Inherited", 'INHERITED'], ["Overrides", 'OVERRIDES']]\r
 \r
     @rules = Rule.search(java_facade, {\r
-        :profile => @profile, :status => @status, :priorities => @priorities,\r
+        :profile => @profile, :status => @status, :priorities => @priorities, :inheritance => @inheritance,\r
         :plugins =>  @plugins, :searchtext => @searchtext, :include_parameters => true, :language => @profile.language})\r
 \r
     unless @searchtext.blank?\r
@@ -96,7 +97,7 @@ class RulesConfigurationController < ApplicationController
   #\r
   #\r
   def activate_rule\r
-    profile = RulesProfile.find(params[:id].to_i)\r
+    profile = Profile.find(params[:id].to_i)\r
     if profile && !profile.provided?\r
       rule=Rule.find(:first, :conditions => {:id => params[:rule_id].to_i, :enabled => true})\r
       priority=params[:level]\r
@@ -119,7 +120,9 @@ class RulesConfigurationController < ApplicationController
         active_rule.save!\r
         java_facade.ruleActivatedOrChanged(profile.id, active_rule.id)\r
       end\r
-      active_rule.reload\r
+      if active_rule\r
+        active_rule.reload\r
+      end\r
 \r
       is_admin=true # security has already been checked by controller filters\r
       render :update do |page|\r
@@ -137,7 +140,7 @@ class RulesConfigurationController < ApplicationController
   #\r
   def new\r
     # form to duplicate a rule\r
-    @profile = RulesProfile.find(params[:id].to_i)\r
+    @profile = Profile.find(params[:id].to_i)\r
     @rule = Rule.find(params[:rule_id])\r
   end\r
 \r
@@ -185,7 +188,7 @@ class RulesConfigurationController < ApplicationController
   #\r
   def edit\r
     # form to edit a rule\r
-    @profile = RulesProfile.find(params[:id])\r
+    @profile = Profile.find(params[:id])\r
     @rule = Rule.find(params[:rule_id])\r
     if !@rule.editable?\r
       redirect_to :action => 'index', :id => params[:id]\r
@@ -275,7 +278,7 @@ class RulesConfigurationController < ApplicationController
 \r
   def update_param\r
     is_admin=true # security has already been checked by controller filters\r
-    profile = RulesProfile.find(params[:profile_id].to_i)\r
+    profile = Profile.find(params[:profile_id].to_i)\r
     rule_param = RulesParameter.find(params[:param_id].to_i)\r
     active_rule = ActiveRule.find(params[:active_rule_id].to_i)\r
     active_param = ActiveRuleParameter.find(params[:id].to_i) if params[:id].to_i > 0\r
@@ -331,6 +334,7 @@ class RulesConfigurationController < ApplicationController
     @priorities = filter_any(params[:priorities]) || ['']\r
     @plugins=filter_any(params[:plugins]) || ['']\r
     @status=params[:rule_status] || STATUS_ACTIVE\r
+    @inheritance=params[:inheritance] || ''\r
     @searchtext=params[:searchtext]\r
   end\r
 \r
index 83bce7e376b1f88865195e84b4696c9ca0eb3cbb..f06282f2569f9575ee40c8edc2aad1cd6fd04a4b 100644 (file)
@@ -18,7 +18,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02\r
 #\r
 class ActiveRule < ActiveRecord::Base\r
-  belongs_to :rules_profile, :class_name => 'RulesProfile', :foreign_key => 'profile_id'\r
+  belongs_to :rules_profile, :class_name => 'Profile', :foreign_key => 'profile_id'\r
   belongs_to :rule\r
   has_many :active_rule_parameters, :dependent => :destroy\r
 \r
index 36207a6dd3486b7af2e02efd016e9aa692b705a0..956e93a7f3d95a305e5afb03742e9a91272b6fb8 100644 (file)
@@ -44,7 +44,7 @@ class Profile < ActiveRecord::Base
   end
   
   def validate_copy(name)
-    new_rule_profile = RulesProfile.new(:name => name, :provided => false, :default_profile => false, :language => language)
+    new_rule_profile = Profile.new(:name => name, :provided => false, :default_profile => false, :language => language)
     new_rule_profile.valid?
     new_rule_profile.errors
   end
@@ -81,7 +81,7 @@ class Profile < ActiveRecord::Base
 
   def self.options_for_select
     array=[]
-    RulesProfile.find(:all, :order => 'name').each do |profile|
+    Profile.find(:all, :order => 'name').each do |profile|
       label = profile.name
       label = label + ' (active)' if profile.default_profile?
       array<<[label, profile.id]
index 8dbd0c37af5538a40f28b7f96fb8bf6dc010c730..05b12fcda0aa9d5ba79b6249393cbc72cfb24ff0 100644 (file)
@@ -198,19 +198,33 @@ class Rule < ActiveRecord::Base
   def self.filter(rules, options)
     priorities = remove_blank(options[:priorities])
     profile = options[:profile]
+    inheritance = options[:inheritance]
+
     if profile
       inactive = (options[:status]=='INACTIVE')
       active = (options[:status]=='ACTIVE')
 
       rules = rules.reject do |rule|
         active_rule = profile.active_by_rule_id(rule.id)
-        ((inactive and active_rule) or (active and active_rule.nil?))
+        ((inactive && active_rule) || (active && active_rule.nil?))
       end
 
       if priorities
         rules = rules.select do |rule|
           active_rule = profile.active_by_rule_id(rule.id)
-          (active_rule and priorities.include?(active_rule.priority_text)) or (active_rule.nil? and priorities.include?(rule.priority_text))
+          (active_rule && priorities.include?(active_rule.priority_text)) || (active_rule.nil? && priorities.include?(rule.priority_text))
+        end
+      end
+
+      if inheritance=='NOT'
+        rules = rules.select do |rule|
+          active_rule = profile.active_by_rule_id(rule.id)
+          (active_rule.nil? || active_rule.inheritance.blank?)
+        end
+      elsif inheritance.present?
+        rules = rules.select do |rule|
+          active_rule = profile.active_by_rule_id(rule.id)
+          (active_rule && active_rule.inheritance==inheritance)
         end
       end
 
index 64e9e11abc99290b49b5e96e71c4ef4d4391ff66..4f8e7d42099663df422e51e9990e9db802a2d629 100644 (file)
          <span class="note">Status</span><br/>
          <%= select_tag "rule_status", options_for_select(@select_status, @status), :id => 'search_status', :size => 6 %>
        </td>
+       <% if @profile.inherited? %>
+       <td class="left" valign="top" width="1%" nowrap>
+         <span class="note">Inheritance</span><br/>
+         <%= select_tag "inheritance", options_for_select(@select_inheritance, @inheritance), :id => 'search_inheritance', :size => 6 %>
+       </td>
+       <% end %>
        <td class="left" valign="top" >
          <br/>
          <%= submit_tag "Search", :id => 'submit_search' %>
@@ -71,7 +77,7 @@
   <ul style="float: right" class="horizontal">
     <li class="marginleft10">
       <div class="csv">
-      <a href="<%= url_for(:controller => 'api/rules', :action => 'index', :language => @profile.language, :profile => @profile.name, :plugins => @plugins.join(','), :status => @status, :searchtext => @searchtext, :priorities => @priorities.join(','), :format => 'csv') -%>" onClick="return downloadCsv()" id="download-link" class="">Download</a>
+      <a href="<%= url_for(:controller => 'api/rules', :action => 'index', :language => @profile.language, :profile => @profile.name, :plugins => @plugins.join(','), :status => @status, :inheritance => @inheritance, :searchtext => @searchtext, :priorities => @priorities.join(','), :format => 'csv') -%>" onClick="return downloadCsv()" id="download-link" class="">Download</a>
       </div>
     </li>
     <% if enable_modification %>