diff options
author | David Gageot <david@gageot.net> | 2012-05-23 16:55:48 +0200 |
---|---|---|
committer | David Gageot <david@gageot.net> | 2012-05-23 17:04:45 +0200 |
commit | b0658bec796159b374c6fc8273b2a23832cd9523 (patch) | |
tree | c2da1e9b347e72fbe5531968286e35c51751b337 /sonar-server | |
parent | f6ea70e6856631981203982673eafea61045bf95 (diff) | |
download | sonarqube-b0658bec796159b374c6fc8273b2a23832cd9523.tar.gz sonarqube-b0658bec796159b374c6fc8273b2a23832cd9523.zip |
SONAR-3016 Filter now have a logical key
this makes it easier to reference a shared filter in a dashboard
extension point. I had to migrate filter widget properties from the
filter id to the filter key.
Diffstat (limited to 'sonar-server')
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java | 1 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb | 7 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb | 12 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb | 5 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb | 2 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb | 11 | ||||
-rw-r--r-- | sonar-server/src/main/webapp/WEB-INF/db/migrate/304_add_key_to_filters.rb (renamed from sonar-server/src/main/webapp/WEB-INF/db/migrate/304_mark_default_filters_as_loaded.rb) | 37 | ||||
-rw-r--r-- | sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java | 1 |
8 files changed, 59 insertions, 17 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java index 58f540fd078..4c768a99186 100644 --- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java +++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterNewFilters.java @@ -97,6 +97,7 @@ public final class RegisterNewFilters { protected FilterDto createDtoFromExtension(String name, Filter filter) { FilterDto filterDto = new FilterDto() .setName(name) + .setKey(name) .setPageSize(0 == filter.getPageSize() ? null : (long) filter.getPageSize()) .setShared(true) .setFavourites(filter.isFavouritesOnly()) diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb index bdfd14524a6..01fd75f763b 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb @@ -50,10 +50,11 @@ class FiltersController < ApplicationController def create @filter=::Filter.new() - @filter.user_id=current_user.id load_filter_from_params(@filter, params) + @filter.user_id=current_user.id + @filter.kee=[@filter.name, current_user.id.to_s].join('.') - @filter.columns.build(:family => 'name', :order_index => 1, :sort_direction => 'ASC') + @filter.columns.build(:family => 'name', :order_index => 1, :sort_direction => 'ASC') @filter.columns.build(:family => 'metric', :kee => 'ncloc', :order_index => 2, :variation => @filter.period?) @filter.columns.build(:family => 'metric', :kee => 'violations_density', :order_index => 3, :variation => @filter.period?) @filter.columns.build(:family => 'date', :order_index => 4) @@ -112,7 +113,7 @@ class FiltersController < ApplicationController access_denied unless @filter.authorized_to_edit?(self) if @filter - if WidgetProperty.find(:first, :conditions => { :kee => 'filter', :text_value => @filter.id.to_s}) + if WidgetProperty.find(:first, :conditions => { :kee => 'filter', :text_value => @filter.kee}) flash[:error]='The filter is used in at least one dashboard. It cannot be deleted' else @filter.destroy diff --git a/sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb b/sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb index eaab381f040..f3fd3475ce7 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb @@ -37,8 +37,8 @@ module WidgetPropertiesHelper text_field_tag definition.key(), val, :size => 10 elsif definition.type.name()==WidgetProperty::TYPE_FILTER - user_filters = options(value, ::Filter.find(:all, :conditions => ['user_id=?', current_user.id]).sort_by(&:id)) - shared_filters = options(value, ::Filter.find(:all, :conditions => ['(user_id<>? or user_id is null) and shared=?', current_user.id, true]).sort_by(&:id)) + user_filters = options_key(value, ::Filter.find(:all, :conditions => ['user_id=?', current_user.id]).sort_by(&:id)) + shared_filters = options_key(value, ::Filter.find(:all, :conditions => ['(user_id<>? or user_id is null) and shared=?', current_user.id, true]).sort_by(&:id)) select_tag definition.key(), option_group('My Filters', user_filters) + option_group('Shared Filters', shared_filters) @@ -48,13 +48,17 @@ module WidgetPropertiesHelper end def resource_value_field(value) - select_tag 'resource_id', options(value, Project.all(:conditions => {:scope => 'PRJ', :qualifier => 'TRK', :enabled => true})) + select_tag 'resource_id', options_id(value, Project.all(:conditions => {:scope => 'PRJ', :qualifier => 'TRK', :enabled => true})) end - def options(value, values) + def options_id(value, values) values.collect { |f| "<option value='#{f.id}'" + (value.to_s == f.id.to_s ? " selected='selected'" : "") + ">#{f.name}</option>" }.to_s end + def options_key(value, values) + values.collect { |f| "<option value='#{f.key}'" + (value.to_s == f.key ? " selected='selected'" : "") + ">#{f.name}</option>" }.to_s + end + def option_group(name, options) options.empty? ? '' : "<optgroup label=\"#{name}\">" + options + "</optgroup>" end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb index 659656446ba..65e0e8b5a3d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb @@ -33,6 +33,7 @@ class Filter < ActiveRecord::Base validates_length_of :name, :within => 1..100 validates_uniqueness_of :name, :scope => :user_id, :if => Proc.new { |filter| filter.user_id } validates_inclusion_of :default_view, :in => ['list', 'treemap'], :allow_nil => true + validates_uniqueness_of :kee def criterion(family, key=nil) criteria.each do |criterion| @@ -43,6 +44,10 @@ class Filter < ActiveRecord::Base nil end + def key + kee + end + def measure_criteria @measure_criteria ||= begin diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb index a26e8e5dfcb..fe4d4ba01e0 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb @@ -82,8 +82,6 @@ class WidgetProperty < ActiveRecord::Base text=='true' when TYPE_METRIC Metric.by_key(text) - when TYPE_FILTER - text.to_i else text end diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb index 71921380506..0be79c9ef20 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb @@ -1,11 +1,8 @@ -<% if widget.properties_as_hash['filter'] %> - <% filter = ::Filter.find_by_id(widget.properties_as_hash['filter']) %> +<% if widget.properties_as_hash['filter'] and @filter %> <div class="widget-title" id="widget_title_<%= widget.id -%>"> - <% if filter %> - <%= filter.name -%> - <% if filter.period_index %> - (<%= period_names[filter.period_index-1] -%>) - <% end %> + <%= @filter.name -%> + <% if @filter.period_index %> + (<%= period_names[@filter.period_index-1] -%>) <% end %> </div> <% elsif @dashboard.global and @resource and !widget.java_definition.global %> diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/304_mark_default_filters_as_loaded.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/304_add_key_to_filters.rb index 0f6ee4a39ad..9dcbb4adb07 100644 --- a/sonar-server/src/main/webapp/WEB-INF/db/migrate/304_mark_default_filters_as_loaded.rb +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/304_add_key_to_filters.rb @@ -21,11 +21,23 @@ # # Sonar 3.1 # -class MarkDefaultFiltersAsLoaded < ActiveRecord::Migration +class AddKeyToFilters < ActiveRecord::Migration + class Filter < ActiveRecord::Base + end + + class WidgetProperty < ActiveRecord::Base + end + class LoadedTemplate < ActiveRecord::Base end def self.up + mark_default_filters_as_loaded() + keys = add_key_column_to_filters() + use_key_in_widget_properties(keys) + end + + def self.mark_default_filters_as_loaded mark_filter_as_loaded('Projects') mark_filter_as_loaded('Treemap') mark_filter_as_loaded('My favourites') @@ -38,4 +50,27 @@ class MarkDefaultFiltersAsLoaded < ActiveRecord::Migration end end end + + def self.add_key_column_to_filters + keys = {} + + add_column 'filters', 'kee', :string, :null => true, :limit => 100 + + Filter.reset_column_information + Filter.find(:all).each do |filter| + keys[filter.id]=filter.user_id ? filter.id : filter.name + filter.kee=keys[filter.id] + filter.save + end + + keys + end + + def self.use_key_in_widget_properties(keys) + WidgetProperty.find(:all, :conditions => {:kee => 'filter'}).each do |property| + property.text_value=keys[property.text_value.to_i] + property.save + end + end + end diff --git a/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java b/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java index 25b2bdd6714..d5ce0d4a179 100644 --- a/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java +++ b/sonar-server/src/test/java/org/sonar/server/startup/RegisterNewFiltersTest.java @@ -124,6 +124,7 @@ public class RegisterNewFiltersTest { assertThat(dto.getUserId()).isNull(); assertThat(dto.getName()).isEqualTo("Fake"); + assertThat(dto.getKey()).isEqualTo("Fake"); assertThat(dto.isShared()).isTrue(); assertThat(dto.isFavourites()).isFalse(); assertThat(dto.getDefaultView()).isEqualTo("list"); |