aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src/main/webapp/WEB-INF
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2012-03-16 11:46:48 +0100
committerSimon Brandhof <simon.brandhof@gmail.com>2012-03-16 11:50:43 +0100
commitf6a1da456075b5307537c9f736eecb656c5d3a2d (patch)
tree66d1d3bd84833af3ba30572629637ba69537791f /sonar-server/src/main/webapp/WEB-INF
parentab19fa283c7c86034ebde4823b3b8675797d9fbb (diff)
downloadsonarqube-f6a1da456075b5307537c9f736eecb656c5d3a2d.tar.gz
sonarqube-f6a1da456075b5307537c9f736eecb656c5d3a2d.zip
SONAR-1378 validate property types + update type of core properties
Diffstat (limited to 'sonar-server/src/main/webapp/WEB-INF')
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb10
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb52
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/property.rb15
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/project/settings.html.erb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb128
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb85
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_settings.html.erb69
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_sidebar.html.erb0
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_SINGLE_SELECT_LIST.html.erb2
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/index.html.erb2
10 files changed, 203 insertions, 162 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
index c486dfd7d27..88ebe73790d 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/project_controller.rb
@@ -126,13 +126,13 @@ class ProjectController < ApplicationController
end
@category=params[:category] ||= 'general'
- @properties_per_category={}
+ @definitions_per_category={}
definitions = java_facade.getPropertyDefinitions()
- properties = definitions.getProperties().select { |property| (@project.module? && property.module()) || (@project.project? && property.project()) }
+ properties = definitions.getAll().select { |property| (@project.module? && property.isOnModule()) || (@project.project? && property.isOnProject()) }
properties.each do |property|
- category = definitions.getCategory(property.key())
- @properties_per_category[category]||=[]
- @properties_per_category[category]<<property
+ category = definitions.getCategory(property.getKey())
+ @definitions_per_category[category]||=[]
+ @definitions_per_category[category]<<property
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
index 653c42d81ab..18c7e8f0797 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
@@ -20,7 +20,7 @@
class SettingsController < ApplicationController
SECTION=Navigation::SECTION_CONFIGURATION
-
+
SPECIAL_CATEGORIES=['email', 'encryption', 'server_id']
verify :method => :post, :only => ['update'], :redirect_to => {:action => :index}
@@ -32,39 +32,39 @@ class SettingsController < ApplicationController
end
def update
- project=nil
+ @project=nil
if params[:resource_id]
- project=Project.by_key(params[:resource_id])
- access_denied unless (project && is_admin?(project))
+ @project=Project.by_key(params[:resource_id])
+ access_denied unless (@project && is_admin?(@project))
else
access_denied unless is_admin?
end
- load_properties(project)
+ load_properties(@project)
+
+ @persisted_properties_per_key={}
+ if @category && @definitions_per_category[@category]
+ @definitions_per_category[@category].each do |property|
+ value=params[property.getKey()]
- if @category && @properties_per_category[@category]
- @properties_per_category[@category].each do |property|
- value=params[property.key()]
- persisted_property = Property.find(:first, :conditions => {:prop_key=> property.key(), :resource_id => (project ? project.id : nil), :user_id => nil})
+ persisted_property = Property.find(:first, :conditions => {:prop_key=> property.key(), :resource_id => (@project ? @project.id : nil), :user_id => nil})
if persisted_property
if value.empty?
- Property.delete_all('prop_key' => property.key(), 'resource_id' => (project ? project.id : nil), 'user_id' => nil)
+ Property.delete_all('prop_key' => property.key(), 'resource_id' => (@project ? @project.id : nil), 'user_id' => nil)
elsif persisted_property.text_value != value.to_s
persisted_property.text_value = value.to_s
- persisted_property.save!
+ persisted_property.save
+ @persisted_properties_per_key[persisted_property.key]=persisted_property
end
elsif !value.blank?
- Property.create(:prop_key => property.key(), :text_value => value.to_s, :resource_id => (project ? project.id : nil))
+ persisted_property=Property.create(:prop_key => property.key(), :text_value => value.to_s, :resource_id => (@project ? @project.id : nil))
+ @persisted_properties_per_key[persisted_property.key]=persisted_property
end
end
java_facade.reloadConfiguration()
- flash[:notice] = 'Parameters updated'
- end
- if project
- redirect_to :controller => 'project', :action => 'settings', :id => project.id, :category => @category
- else
- redirect_to :controller => 'settings', :action => 'index', :category => @category
+ params[:layout]='false'
+ render :partial => 'settings/properties'
end
end
@@ -72,18 +72,18 @@ class SettingsController < ApplicationController
def load_properties(project)
@category=params[:category]
- @properties_per_category={}
+ @definitions_per_category={}
definitions = java_facade.getPropertyDefinitions()
- definitions.getProperties().select {|property|
- (project.nil? && property.global) || (project && project.module? && property.module()) || (project && project.project? && property.project())
- }.each do |property|
- category = definitions.getCategory(property.key())
- @properties_per_category[category]||=[]
- @properties_per_category[category]<<property
+ definitions.getAll().select { |property_definition|
+ (project.nil? && property_definition.isGlobal()) || (project && project.module? && property_definition.isOnModule()) || (project && project.project? && property_definition.isOnProject())
+ }.each do |property_definition|
+ category = definitions.getCategory(property_definition.getKey())
+ @definitions_per_category[category]||=[]
+ @definitions_per_category[category]<<property_definition
end
SPECIAL_CATEGORIES.each do |category|
- @properties_per_category[category]=[]
+ @definitions_per_category[category]=[]
end
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/property.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/property.rb
index ccef420c136..b388a5bec6b 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/models/property.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/models/property.rb
@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
#
class Property < ActiveRecord::Base
+ validates_presence_of :prop_key
def key
prop_key
@@ -87,8 +88,22 @@ class Property < ActiveRecord::Base
xml
end
+ def java_definition
+ @java_definition ||=
+ begin
+ Java::OrgSonarServerUi::JRubyFacade.getInstance().getPropertyDefinitions().get(key)
+ end
+ end
+
private
+ def validate
+ if java_definition
+ validation_result=java_definition.validate(text_value)
+ errors.add_to_base(validation_result.getErrorKey()) unless validation_result.isValid()
+ end
+ end
+
def self.reload_java_configuration
Java::OrgSonarServerUi::JRubyFacade.getInstance().reloadConfiguration()
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings.html.erb
index cb5e508f23b..8e2f68f1870 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/project/settings.html.erb
@@ -3,7 +3,7 @@
<h1 class="marginbottom10">Settings</h1>
<div class="yui-g widget" id="widget_plugins">
- <%= render :partial => 'settings/plugins', :locals => {:project=>@project} %>
+ <%= render :partial => 'settings/settings', :locals => {:project=>@project} %>
</div>
</div> \ No newline at end of file
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb
deleted file mode 100644
index 87a5a99b803..00000000000
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_plugins.html.erb
+++ /dev/null
@@ -1,128 +0,0 @@
-<style type="text/css">
- #plugins .plugin {
- padding: 5px;
- border: 1px solid #ddd;
- background-color: #fff;
- }
-
- #plugins .plugin h2 {
- margin-left: 10px;
- font-size: 122%;
- color: #333;
- }
-
- #plugins .plugin h3 {
- margin-left: 5px;
- }
-
- #plugins .plugin p {
- padding: 5px 5px;
- }
-
- #plugins .plugin img {
- padding: 5px 0 0 5px;
- }
-</style>
-<script type="text/javascript">
- function enlargeTextInput(propertyKey) {
- var eltId = 'input_' + propertyKey;
- var textValue = $F(eltId);
- var textArea = '<textarea class="width100" id="' + propertyKey + '" name="' + propertyKey + '" rows="10" id="input_' + propertyKey + '">' + textValue + '</textarea>';
- $(eltId).parentNode.replace(textArea);
- }
-</script>
-<div id="plugins">
- <table width="100%">
- <tr>
- <td width="1%" nowrap class="column first">
- <table class="data selector">
- <thead>
- <tr>
- <th>
- <span>Category</span>
- </th>
- </tr>
- </thead>
- <tbody>
- <%
- @properties_per_category.keys.sort_by { |category| message("property.category.#{category}", :default => category).upcase }.each do |category|
- if !@properties_per_category[category].empty? || SettingsController::SPECIAL_CATEGORIES.include?(category)
- %>
- <tr class="select <%= cycle('even', 'odd', :name => 'category') -%> <%= 'selected' if @category==category -%>" id="select_<%= category -%>">
- <td><%= link_to message("property.category.#{category}", :default => category), :overwrite_params => {:category => category} -%></td>
- </tr>
- <% end
- end
- %>
- </tbody>
- </table>
- <br/>
- </td>
-
- <td class="column">
- <% if @category && @properties_per_category[@category]
- category_name = message("property.category.#{@category}", :default => @category)
- if SettingsController::SPECIAL_CATEGORIES.include?(@category)
- %>
- <%= render :partial => 'special', :locals => {:url => url_for(:controller => "#{@category}_configuration")} -%>
- <%
- elsif !@properties_per_category[@category].empty?
- %>
- <% form_tag :controller => :settings, :action => :update do %>
- <%= hidden_field_tag('category', @category) -%>
- <% if @project %>
- <input type="hidden" name="resource_id" value="<%= @project.id -%>"/>
- <% end %>
- <table class="data marginbottom10">
- <thead>
- <tr>
- <th>
- <span><%= h(category_name) -%></span>
- </th>
- </tr>
- </thead>
- <tbody>
- <%
- if @properties_per_category[@category]
- @properties_per_category[@category].each do |property|
- value = Property.value(property.key(), (@project ? @project.id : nil), '')
-
- # for backward-compatibility with properties that do not define the type TEXT
- property_type = value.include?("\n") ? 'TEXT' : property.type
- %>
- <tr class="<%= cycle('even', 'odd', :name => 'properties') -%>">
- <td style="padding: 10px">
- <h3>
- <%= message("property.#{property.key()}.name", :default => property.name()) -%>
- <br/><span class="note"><%= property.key() -%></span>
- </h3>
- <%
- desc=message("property.#{property.key()}.description", :default => property.description())
- if desc.present? %>
- <p class="marginbottom10"><%= desc -%></p>
- <% end %>
- <div><%= render :partial => "settings/type_#{property_type}", :locals => {:property => property, :value => value} -%></div>
- <p>
- <%
- default_prop_value = (@project ? Property.value(property.key(), nil, property.defaultValue()) : property.defaultValue())
- unless default_prop_value.blank? %>
- <span class="note">Default : <%= h default_prop_value -%></span>
- <% end %>
- </p>
- </td>
- </tr>
- <% end
- end
- %>
- </tbody>
- </table>
- <% save_message=message('settings.save_category', :params => [category_name]) %>
- <%= submit_tag(save_message, :disable_with => save_message, :id => 'save') -%>
- <% end %>
- <% end
- end
- %>
- </td>
- </tr>
- </table>
-</div>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb
new file mode 100644
index 00000000000..fc2fbd2ae09
--- /dev/null
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb
@@ -0,0 +1,85 @@
+<% if @category && @definitions_per_category[@category]
+ category_name = message("property.category.#{@category}", :default => @category)
+ if SettingsController::SPECIAL_CATEGORIES.include?(@category)
+%>
+ <%= render :partial => 'special', :locals => {:url => url_for(:controller => "#{@category}_configuration")} -%>
+ <%
+ elsif !@definitions_per_category[@category].empty?
+ %>
+ <% form_remote_tag :url => {:controller => 'settings', :action => 'update', :category => @category, :resource_id => @project ? @project.id : nil},
+ :method => :post,
+ :before => "$('submit_settings').hide();$('loading_settings').show()",
+ :update => 'properties' do -%>
+
+ <table class="data marginbottom10">
+ <thead>
+ <tr>
+ <th>
+ <span><%= h(category_name) -%></span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ if @definitions_per_category[@category]
+ @definitions_per_category[@category].each do |property|
+ value = nil
+
+ # set when form has been submitted but some errors have been raised
+ if @persisted_properties_per_key
+ p = @persisted_properties_per_key[property.key]
+ if p
+ value = p.text_value
+ end
+ end
+
+
+ # if fresh form or no error, get the current value
+ value = Property.value(property.getKey(), (@project ? @project.id : nil), '') unless value
+
+ # for backward-compatibility with properties that do not define the type TEXT
+ property_type = value.include?("\n") ? 'TEXT' : property.getType()
+ %>
+ <tr class="<%= cycle('even', 'odd', :name => 'properties') -%>">
+ <td style="padding: 10px" id="foo_<%= property.getKey() -%>">
+ <h3>
+ <%= message("property.#{property.key()}.name", :default => property.name()) -%>
+ <br/><span class="note"><%= property.getKey() -%></span>
+ </h3>
+ <%
+ desc=message("property.#{property.key()}.description", :default => property.description())
+ if desc.present? %>
+ <p class="marginbottom10"><%= desc -%></p>
+ <% end %>
+ <div><%= render :partial => "settings/type_#{property_type}", :locals => {:property => property, :value => value} -%></div>
+ <%
+ if p
+ p.errors.each_full do |error|
+ %>
+ <div class="error"><%= message("property.error.#{error}") -%></div>
+ <%
+ end
+ end
+ %>
+ <p>
+ <%
+ default_prop_value = (@project ? Property.value(property.key(), nil, property.defaultValue()) : property.defaultValue())
+ unless default_prop_value.blank? %>
+ <span class="note">Default : <%= h default_prop_value -%></span>
+ <% end %>
+ </p>
+ </td>
+ </tr>
+ <% end
+ end
+ %>
+ </tbody>
+ </table>
+ <div>
+ <%= submit_tag(message('settings.save_category', :params => [category_name]), :id => 'submit_settings') -%>
+ <img src="<%= ApplicationController.root_context -%>/images/loading.gif" id="loading_settings" style="display:none">
+ </div>
+ <% end %>
+ <% end
+ end
+ %>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_settings.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_settings.html.erb
new file mode 100644
index 00000000000..cbd85572a12
--- /dev/null
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_settings.html.erb
@@ -0,0 +1,69 @@
+<style type="text/css">
+ #plugins .plugin {
+ padding: 5px;
+ border: 1px solid #ddd;
+ background-color: #fff;
+ }
+
+ #plugins .plugin h2 {
+ margin-left: 10px;
+ font-size: 122%;
+ color: #333;
+ }
+
+ #plugins .plugin h3 {
+ margin-left: 5px;
+ }
+
+ #plugins .plugin p {
+ padding: 5px 5px;
+ }
+
+ #plugins .plugin img {
+ padding: 5px 0 0 5px;
+ }
+</style>
+<script type="text/javascript">
+ function enlargeTextInput(propertyKey) {
+ var eltId = 'input_' + propertyKey;
+ var textValue = $F(eltId);
+ var textArea = '<textarea class="width100" id="' + propertyKey + '" name="' + propertyKey + '" rows="10" id="input_' + propertyKey + '">' + textValue + '</textarea>';
+ $(eltId).parentNode.replace(textArea);
+ }
+</script>
+<div id="plugins">
+ <table width="100%">
+ <tr>
+ <td width="1%" nowrap class="column first">
+ <table class="data selector">
+ <thead>
+ <tr>
+ <th>
+ <span>Category</span>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <%
+ @definitions_per_category.keys.sort_by { |category| message("property.category.#{category}", :default => category).upcase }.each do |category|
+ if !@definitions_per_category[category].empty? || SettingsController::SPECIAL_CATEGORIES.include?(category)
+ %>
+ <tr class="select <%= cycle('even', 'odd', :name => 'category') -%> <%= 'selected' if @category==category -%>" id="select_<%= category -%>">
+ <td><%= link_to message("property.category.#{category}", :default => category), :overwrite_params => {:category => category} -%></td>
+ </tr>
+ <% end
+ end
+ %>
+ </tbody>
+ </table>
+ <br/>
+ </td>
+
+ <td class="column">
+ <div id="properties">
+ <%= render :partial => 'settings/properties' -%>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_sidebar.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_sidebar.html.erb
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_sidebar.html.erb
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_SINGLE_SELECT_LIST.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_SINGLE_SELECT_LIST.html.erb
index a6f905a3038..a317e48ef38 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_SINGLE_SELECT_LIST.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_SINGLE_SELECT_LIST.html.erb
@@ -1,6 +1,6 @@
<select name="<%= h property.key -%>" id="input_<%= h property.key-%>">
<option value=""><%= message('default') -%></option>
<% property.options.each do |option| %>
- <option value="<%= h option -%>"><%= h option -%></option>
+ <option value="<%= h option -%>" <%= 'selected' if value && value==option -%>><%= h option -%></option>
<% end %>
</select> \ No newline at end of file
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/index.html.erb
index d0fc6625477..81fa7362a09 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/index.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/index.html.erb
@@ -1 +1 @@
-<%= render :partial => 'plugins', :locals => {:project=>nil} %> \ No newline at end of file
+<%= render :partial => 'settings', :locals => {:project=>nil} %> \ No newline at end of file