From 1ae4dfad5756624d9a430974a5b9449ef1d16c8e Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Fri, 9 May 2014 16:04:09 +0200 Subject: [PATCH] SONAR-5221 Remove the Language column from measure filters --- .../sonar/core/measure/MeasureFilterSort.java | 5 +-- .../core/persistence/DatabaseVersion.java | 2 +- .../org/sonar/core/persistence/rows-h2.sql | 1 + .../resources/org/sonar/l10n/core.properties | 2 - .../measure/MeasureFilterExecutorTest.java | 2 +- ...e_when_filter_by_component_name_or_key.xml | 2 +- .../ignore_person_measures.xml | 4 +- .../ignore_quality_model_measures.xml | 4 +- .../MeasureFilterExecutorTest/shared.xml | 8 ++-- .../sort_by_alert.xml | 8 ++-- .../WEB-INF/app/models/measure_filter.rb | 3 +- .../app/views/measures/_display_list.html.erb | 1 - .../534_update_measure_filters_on_language.rb | 44 +++++++++++++++++++ 13 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/534_update_measure_filters_on_language.rb diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSort.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSort.java index e0857143979..b8c09b1de16 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSort.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSort.java @@ -24,7 +24,7 @@ import org.sonar.api.measures.Metric; class MeasureFilterSort { public static enum Field { - KEY, NAME, VERSION, LANGUAGE, METRIC, SHORT_NAME, DESCRIPTION, + KEY, NAME, VERSION, METRIC, SHORT_NAME, DESCRIPTION, // Sort by last analysis date DATE, // Sort by project creation date @@ -111,9 +111,6 @@ class MeasureFilterSort { case VERSION: column = "s.version"; break; - case LANGUAGE: - column = "p.language"; - break; case DATE: column = "s.created_at"; break; diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index f29fabf4839..ec1c58b94a0 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -33,7 +33,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 533; + public static final int LAST_VERSION = 534; public static enum Status { UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index 4b4c50a33ae..775af009c74 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -229,6 +229,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('530'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('531'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('532'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('533'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('534'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index c8ff38228ea..155dc476775 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -567,7 +567,6 @@ measure_filter.filter_list=Measures Filters measure_filter.col.date=Last Analysis measure_filter.col.description=Description measure_filter.col.key=Key -measure_filter.col.language=Language measure_filter.col.links=Links measure_filter.col.name=Name measure_filter.col.short_name=Short Name @@ -576,7 +575,6 @@ measure_filter.col.project_creation_date=First Analysis measure_filter.abbr.date=Last Analysis measure_filter.abbr.description=Description measure_filter.abbr.key=Key -measure_filter.abbr.language=Lang. measure_filter.abbr.links=Links measure_filter.abbr.name=Name measure_filter.abbr.short_name=Name diff --git a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java index b2847c18ba7..97783f52f4d 100644 --- a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java +++ b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java @@ -119,7 +119,7 @@ public class MeasureFilterExecutorTest { @Test public void projects_without_measure_conditions() throws SQLException { db.prepareDbUnit(getClass(), "shared.xml"); - MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")).setSortOn(MeasureFilterSort.Field.LANGUAGE); + MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")).setSortOn(MeasureFilterSort.Field.DATE); List rows = executor.execute(filter, new MeasureFilterContext()); assertThat(rows).hasSize(2); diff --git a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/escape_percent_and_underscore_when_filter_by_component_name_or_key.xml b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/escape_percent_and_underscore_when_filter_by_component_name_or_key.xml index 9b8d393278e..2419fb9ef8b 100644 --- a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/escape_percent_and_underscore_when_filter_by_component_name_or_key.xml +++ b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/escape_percent_and_underscore_when_filter_by_component_name_or_key.xml @@ -3,7 +3,7 @@ + description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"/> - \ No newline at end of file + diff --git a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/ignore_quality_model_measures.xml b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/ignore_quality_model_measures.xml index 1ccceb41d82..6289fa9539e 100644 --- a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/ignore_quality_model_measures.xml +++ b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/ignore_quality_model_measures.xml @@ -6,7 +6,7 @@ + description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"/> - \ No newline at end of file + diff --git a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/shared.xml b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/shared.xml index bcfe738a901..173b39e17d6 100644 --- a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/shared.xml +++ b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/shared.xml @@ -25,12 +25,12 @@ @@ -178,4 +178,4 @@ - \ No newline at end of file + diff --git a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/sort_by_alert.xml b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/sort_by_alert.xml index 292037eac7a..a8376646b7f 100644 --- a/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/sort_by_alert.xml +++ b/sonar-core/src/test/resources/org/sonar/core/measure/MeasureFilterExecutorTest/sort_by_alert.xml @@ -8,7 +8,7 @@ @@ -56,7 +56,7 @@ @@ -78,4 +78,4 @@ alert_status="[null]" description="[null]" characteristic_id="[null]"/> - \ No newline at end of file + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/measure_filter.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/measure_filter.rb index d716fbb4914..a0a1a25fc0b 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/measure_filter.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/measure_filter.rb @@ -158,7 +158,8 @@ class MeasureFilter < ActiveRecord::Base @criteria = self.data.split(CRITERIA_SEPARATOR).inject(HashWithIndifferentAccess.new) do |h, s| k, v=s.split('=') if k && v - v=v.split(CRITERIA_KEY_VALUE_SEPARATOR) if v.include?(CRITERIA_KEY_VALUE_SEPARATOR) + # Empty values are removed + v=v.split(CRITERIA_KEY_VALUE_SEPARATOR).select{|v| !v.empty?} if v.include?(CRITERIA_KEY_VALUE_SEPARATOR) h[k]=v end h diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb index 06b9971f879..3dae12f9a0e 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb @@ -136,7 +136,6 @@ [message('measure_filter.col.name'), 'name'], [message('measure_filter.col.short_name'), 'short_name'], [message('measure_filter.col.description'), 'description'], - [message('measure_filter.col.language'), 'language'], [message('measure_filter.col.version'), 'version'], [message('measure_filter.col.date'), 'date'], [message('measure_filter.col.project_creation_date'), 'project_creation_date'], diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/534_update_measure_filters_on_language.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/534_update_measure_filters_on_language.rb new file mode 100644 index 00000000000..31e67c57bf8 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/534_update_measure_filters_on_language.rb @@ -0,0 +1,44 @@ +# +# SonarQube, open source software quality management tool. +# Copyright (C) 2008-2014 SonarSource +# mailto:contact AT sonarsource DOT com +# +# SonarQube 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. +# +# SonarQube 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 this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +# +# SonarQube 4.4 +# SONAR-5221 +# +class UpdateMeasureFiltersOnLanguage < ActiveRecord::Migration + + class MeasureFilter < ActiveRecord::Base + end + + def self.up + MeasureFilter.all(:conditions => "data LIKE '%language%'").each do |filter| + # Remove sort on language + filter.data = filter.data.sub('sort=language', '') + + filter.data.scan(/cols=((.+?)(\||\z))?/) do |find| + cols_data = find[0] + # Remove display of language column + filter.data = filter.data.sub(cols_data, cols_data.gsub(/language/, '')) + end + filter.save! + end + end + +end -- 2.39.5