aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorDavid Gageot <david@gageot.net>2012-05-23 16:55:48 +0200
committerDavid Gageot <david@gageot.net>2012-05-23 17:04:45 +0200
commitb0658bec796159b374c6fc8273b2a23832cd9523 (patch)
treec2da1e9b347e72fbe5531968286e35c51751b337 /sonar-server
parentf6ea70e6856631981203982673eafea61045bf95 (diff)
downloadsonarqube-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.java1
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/filters_controller.rb7
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/helpers/widget_properties_helper.rb12
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/filter.rb5
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/widget_property.rb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/dashboard/_widget_title.html.erb11
-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.java1
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");