From bd5bd39acfbb71c6a731064a535a9e89d8a1715a Mon Sep 17 00:00:00 2001 From: simonbrandhof Date: Tue, 19 Jul 2011 23:02:36 +0200 Subject: [PATCH] SONAR-2628 Add a page to manage manual measures --- .../testCopyManualMeasures.xml | 4 +- .../resources/org/sonar/i18n/core.properties | 1 + .../org/sonar/jpa/entity/ManualMeasure.java | 7 ++++ .../org/sonar/jpa/entity/SchemaMigration.java | 2 +- .../api/manual_measures_controller.rb | 4 +- .../controllers/manual_measures_controller.rb | 10 ++++- .../WEB-INF/app/models/manual_measure.rb | 16 +++++--- .../app/views/layouts/_layout.html.erb | 3 +- .../views/manual_measures/_edit_form.html.erb | 4 +- .../app/views/manual_measures/_row.html.erb | 12 ++++-- .../app/views/manual_measures/index.html.erb | 39 +++++++++++-------- .../app/views/manual_measures/new.html.erb | 35 +++++++++++++++++ .../db/migrate/211_create_manual_measures.rb | 2 +- .../214_add_index_on_manual_measures.rb | 30 ++++++++++++++ .../src/main/webapp/stylesheets/style.css | 7 ++++ 15 files changed, 141 insertions(+), 35 deletions(-) create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/new.html.erb create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/214_add_index_on_manual_measures.rb diff --git a/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/sensors/ManualMeasureDecoratorTest/testCopyManualMeasures.xml b/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/sensors/ManualMeasureDecoratorTest/testCopyManualMeasures.xml index 78f114c5c0a..9b672c60a23 100644 --- a/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/sensors/ManualMeasureDecoratorTest/testCopyManualMeasures.xml +++ b/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/sensors/ManualMeasureDecoratorTest/testCopyManualMeasures.xml @@ -5,7 +5,7 @@ enabled="true" worst_value="[null]" optimized_best_value="[null]" best_value="[null]" direction="0" hidden="false"/> - - + + \ No newline at end of file diff --git a/plugins/sonar-i18n-en-plugin/src/main/resources/org/sonar/i18n/core.properties b/plugins/sonar-i18n-en-plugin/src/main/resources/org/sonar/i18n/core.properties index 35df5c65bdb..fa937b85879 100644 --- a/plugins/sonar-i18n-en-plugin/src/main/resources/org/sonar/i18n/core.properties +++ b/plugins/sonar-i18n-en-plugin/src/main/resources/org/sonar/i18n/core.properties @@ -225,6 +225,7 @@ filters.size=Size filters.color=Color global_roles.page=Global roles manual_metrics.page=Manual metrics +manual_measures.page=Manual measures my_profile.page=My profile project_roles.page=Project roles project_settings.page=Settings diff --git a/sonar-core/src/main/java/org/sonar/jpa/entity/ManualMeasure.java b/sonar-core/src/main/java/org/sonar/jpa/entity/ManualMeasure.java index 3e3544df582..ea1bb22921d 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/entity/ManualMeasure.java +++ b/sonar-core/src/main/java/org/sonar/jpa/entity/ManualMeasure.java @@ -56,6 +56,9 @@ public final class ManualMeasure { @Column(name = "updated_at", updatable = true, nullable = true) private Date updatedAt; + @Column(name = "user_login", updatable = true, nullable = true, length = 40) + private String userLogin; + public Long getId() { return id; } @@ -91,4 +94,8 @@ public final class ManualMeasure { public Date getUpdatedAt() { return updatedAt; } + + public String getUserLogin() { + return userLogin; + } } diff --git a/sonar-core/src/main/java/org/sonar/jpa/entity/SchemaMigration.java b/sonar-core/src/main/java/org/sonar/jpa/entity/SchemaMigration.java index 0a9a08813a0..a77283fd703 100644 --- a/sonar-core/src/main/java/org/sonar/jpa/entity/SchemaMigration.java +++ b/sonar-core/src/main/java/org/sonar/jpa/entity/SchemaMigration.java @@ -40,7 +40,7 @@ public class SchemaMigration { - complete the Derby DDL file used for unit tests : sonar-testing-harness/src/main/resources/org/sonar/test/persistence/sonar-test.ddl */ - public static final int LAST_VERSION = 213; + public static final int LAST_VERSION = 214; public final static String TABLE_NAME = "schema_migrations"; diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/manual_measures_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/manual_measures_controller.rb index e131f23c309..3bd9e29ef9c 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/manual_measures_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/manual_measures_controller.rb @@ -60,7 +60,7 @@ class Api::ManualMeasuresController < Api::ApiController measure=ManualMeasure.find(:first, :conditions => ['resource_id=? and metric_id=?', resource.id, metric.id]) if measure.nil? - measure=ManualMeasure.new(:resource => resource, :user => current_user, :metric_id => metric.id) + measure=ManualMeasure.new(:resource => resource, :user_login => current_user.login, :metric_id => metric.id) end measure.value = value @@ -109,7 +109,7 @@ class Api::ManualMeasuresController < Api::ApiController hash[:created_at]=format_datetime(manual_measure.created_at) hash[:updated_at]=format_datetime(manual_measure.updated_at) if manual_measure.updated_at if manual_measure.user - hash[:login]=manual_measure.user.login + hash[:login]=manual_measure.user_login hash[:username]=manual_measure.user.name end hash diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/manual_measures_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/manual_measures_controller.rb index 12dcf579e52..53c4f15f165 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/manual_measures_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/manual_measures_controller.rb @@ -27,6 +27,10 @@ class ManualMeasuresController < ApplicationController load_measures() end + def new + load_measures() + end + def edit load_measures() @metric=Metric.by_key(params[:metric]) @@ -34,11 +38,15 @@ class ManualMeasuresController < ApplicationController render :action => 'index' end + def create + + end + def save metric=Metric.by_key(params[:metric]) measure=ManualMeasure.find(:first, :conditions => ['resource_id=? and metric_id=?', @resource.id, metric.id]) if measure.nil? - measure=ManualMeasure.new(:resource => @resource, :user => current_user, :metric_id => metric.id) + measure=ManualMeasure.new(:resource => @resource, :user_login => current_user.login, :metric_id => metric.id) end # TODO use measure.text_value if string metric measure.value = params[:val] diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/manual_measure.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/manual_measure.rb index e5500e0d5f9..264708a452d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/manual_measure.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/manual_measure.rb @@ -19,18 +19,24 @@ # class ManualMeasure < ActiveRecord::Base belongs_to :resource, :class_name => 'Project' - belongs_to :user validates_uniqueness_of :metric_id, :scope => :resource_id validates_length_of :text_value, :maximum => 4000, :allow_nil => true, :allow_blank => true validates_length_of :url, :maximum => 4000, :allow_nil => true, :allow_blank => true validates_length_of :description, :maximum => 4000, :allow_nil => true, :allow_blank => true validate :validate_metric - + def metric @metric ||= - begin - Metric.by_id(metric_id) - end + begin + Metric.by_id(metric_id) + end + end + + def user + @user ||= + begin + user_login ? User.find(:first, :conditions => ['login=?', user_login]) : nil + end end def metric=(m) diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index a8585dfb75c..8a6e7b55b5c 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -48,8 +48,9 @@ <% controller.java_facade.getPages(Navigation::SECTION_RESOURCE, @project.scope, @project.qualifier, @project.language).each do |page| %>
  • "><%= message(page.getId() + '.page', :default => page.getTitle()) %>
  • <% end %> - <% if has_role?(:admin, @project) && @project.set? %> + <% if has_role?(:admin, @project) %>
  • <%= message('sidebar.project_system') -%>
  • +
  • <%= message('manual_measures.page') -%>
  • <% if (@project.project? || @project.module?) %>
  • <%= message('project_settings.page') -%>
  • <% end %> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_edit_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_edit_form.html.erb index 80209c1934c..24eb195c0f2 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_edit_form.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_edit_form.html.erb @@ -4,8 +4,8 @@ - - + + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_row.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_row.html.erb index 399bcebd65e..d9092e83c72 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_row.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/_row.html.erb @@ -3,12 +3,16 @@ <%= measure.metric.short_name -%> <%= measure.value -%> <%= measure.description -%> - <% unless @edited_measure %> - <%= measure.user.name if measure.user -%> - (<%= l(measure.updated_at) -%>) + <% unless @edited_measure %> + <%= measure.user.name if measure.user -%> + <% end %> + + + <% unless @edited_measure %> + <%= l(measure.updated_at) -%> + <% end %> - <% end %> <% unless @edited_measure %> Edit diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/index.html.erb index c9de9337e31..c638aed67b5 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/index.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/index.html.erb @@ -1,35 +1,42 @@ -

    Manual Measures

    -
    +
    + +
    + + + <% if @metric %> <% end %> - - - + + + - <% unless @edited_measure %> - - <% end %> - + + + + <% if @measures.empty? %> + + <% end %> <% @measures.each do |measure| %> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/new.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/new.html.erb new file mode 100644 index 00000000000..a4e14175eb5 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/manual_measures/new.html.erb @@ -0,0 +1,35 @@ +
    + +
    + + + +
    DomainMetricValueDomainMetricValue DescriptionAuthorOperations<% unless @edited_measure %>Author<% end %><% unless @edited_measure %>Date<% end %>Operations
    No measures
    + + + + + + + + + + + + + + +
    MetricValueDescription
    + + + + + +
    +
    diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/211_create_manual_measures.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/211_create_manual_measures.rb index cc3dee143af..f0631c680c1 100644 --- a/sonar-server/src/main/webapp/WEB-INF/db/migrate/211_create_manual_measures.rb +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/211_create_manual_measures.rb @@ -29,7 +29,7 @@ class CreateManualMeasures < ActiveRecord::Migration t.column 'resource_id', :integer, :null => true t.column 'value', :decimal, :null => true, :precision => 30, :scale => 20 t.column 'text_value', :string, :null => true, :limit => 4000 - t.column 'user_id', :integer, :null => true + t.column 'user_login', :string, :null => true, :limit => 40 t.column 'description', :string, :null => true, :limit => 4000 t.column 'url', :string, :null => true, :limit => 4000 t.timestamps diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/214_add_index_on_manual_measures.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/214_add_index_on_manual_measures.rb new file mode 100644 index 00000000000..3c9babea7b2 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/214_add_index_on_manual_measures.rb @@ -0,0 +1,30 @@ +# +# Sonar, entreprise quality control tool. +# Copyright (C) 2008-2011 SonarSource +# 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 +# + +# +# Sonar 2.10 +# +class AddIndexOnManualMeasures < ActiveRecord::Migration + + def self.up + add_index('manual_measures', 'resource_id', :name => 'manual_measures_resource_id') + end + +end diff --git a/sonar-server/src/main/webapp/stylesheets/style.css b/sonar-server/src/main/webapp/stylesheets/style.css index 32347f77aff..70738451f96 100644 --- a/sonar-server/src/main/webapp/stylesheets/style.css +++ b/sonar-server/src/main/webapp/stylesheets/style.css @@ -670,6 +670,7 @@ div.operations { } ul.operations { float: right; + height: 20px; list-style-type: none; margin: 0; background-color: #ECECEC; @@ -1872,6 +1873,12 @@ div.break30 { .width100 { width: 100%; } +textarea.width100 { + width: 100%; + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* Opera/IE 8+ */ +} ul.horizontal { list-style-type: none; } -- 2.39.5