aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorDavid Gageot <david@gageot.net>2012-10-08 18:29:05 +0200
committerDavid Gageot <david@gageot.net>2012-10-09 08:58:58 +0200
commit24113c81f88cbc7460a9a23fb3c6139b01c2ade9 (patch)
tree954d4269e1145d83af5094d9964f19f44df8dd58 /sonar-server
parent01db7e46f5b3d10030918f052c8aade3c3863e0a (diff)
downloadsonarqube-24113c81f88cbc7460a9a23fb3c6139b01c2ade9.tar.gz
sonarqube-24113c81f88cbc7460a9a23fb3c6139b01c2ade9.zip
SONAR-3529 Better property sets
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb28
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb9
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb8
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb10
4 files changed, 36 insertions, 19 deletions
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 814c40f539d..ca3384ae025 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
@@ -56,26 +56,32 @@ class SettingsController < ApplicationController
def update_property_sets(resource_id)
(params[:property_sets] || []).each do |key, set_keys|
- if params[key][:auto_generate]
- set_keys = Array.new(set_keys.size - 1) { |i| i.to_s }
- end
-
- update_property_set(key, set_keys, params[key], resource_id)
+ update_property_set(key, set_keys, params[key], resource_id, params[:auto_generate][key])
end
end
- def update_property_set(key, set_keys, fields_hash, resource_id)
+ def update_property_set(key, set_keys, fields_hash, resource_id, auto_generate)
+ set_keys = Array.new(set_keys.size) { |i| i.to_s } if auto_generate
+
+ set_key_values = {}
+ fields_hash.each do |field_key, field_values|
+ field_values.zip(set_keys).each do |field_value, set_key|
+ set_key_values[set_key] ||= {}
+ set_key_values[set_key][field_key] = field_value
+ end
+ end
+
+ set_keys.reject! { |set_key| set_key.blank? || (auto_generate && set_key_values[set_key].values.all?(&:blank?)) }
+
Property.transaction do
Property.with_key_prefix(key + '.').with_resource(resource_id).delete_all
update_property(key, set_keys, resource_id)
set_keys.each do |set_key|
- update_property("#{key}.#{set_key}.key", set_key, resource_id)
- end
+ update_property("#{key}.#{set_key}.key", set_key, resource_id) unless auto_generate
- fields_hash.each do |field_key, field_values|
- field_values.zip(set_keys).each do |field_value, set_key|
- update_property("#{key}.#{set_key}.#{field_key}", field_value, resource_id) if set_key
+ set_key_values[set_key].each do |field, value|
+ update_property("#{key}.#{set_key}.#{field}", value, resource_id)
end
end
end
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
index 167143441ec..e1297cc8c88 100644
--- 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
@@ -29,7 +29,7 @@
<% value = property_value(property) -%>
<% if property.multi_values -%>
<% value.each_with_index do |sub_value, index| -%>
- <%= render "settings/multi_value", :property => property, :value => sub_value, :hide_delete => ((index == 0) || (value == 1)) -%>
+ <%= render "settings/multi_value", :property => property, :value => sub_value, :hide_delete => index == 0 -%>
<% end -%>
<div class="template" style="display:none;">
<%= render "settings/multi_value", :property => property, :value => nil, :hide_delete => false -%>
@@ -67,12 +67,17 @@
<script>
$j('.delete').live('click', function () {
+ var value_count = $j(this).parents('.property').find('.delete').size() - 2;
+ //if (0 == value_count) {
+ // var template = $j(this).parents('.property').find('.template').last();
+ // template.clone().insertBefore(template).show();
+ //}
$j(this).parents('.multi_value').remove();
return false;
});
$j('.add_value').live('click', function () {
- $j('.delete').show();
+ //$j(this).parents('.property').find('.delete').show();
var template = $j(this).parents('.property').find('.template').last();
template.clone().insertBefore(template).show();
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb
index 8650ff409a5..b11447eae4f 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb
@@ -1,7 +1,7 @@
<% errors = [] -%>
<% key_field = key_field(property) -%>
-<tr class="top multi_value <%= 'template' unless set_key -%>" style="<%= 'display:none' unless set_key -%>">
+<tr class="top multi_value <%= 'template' unless set_key -%> odd" style="<%= 'display:none' unless set_key -%>">
<% if key_field -%>
<td><%= render "settings/type_#{key_field.type}", :property => key_field, :field => key_field, :value => set_key, :name => "property_sets[#{property.key}][]", :id => "input_#{h key_field.key}", :size => key_field.indicativeSize -%></td>
<% else -%>
@@ -18,7 +18,11 @@
<td><%= render "settings/type_#{field.type}", :property => field, :field => field, :value => value, :name => "#{property.key}[#{field.key}][]", :id => "input_#{h field.key}", :size => field.indicativeSize -%></td>
<% end -%>
- <td><a href="#" class="delete link-action"><%= message('delete') -%></a></td>
+ <td style="width: 60px;">
+ <% unless hide_delete -%>
+ <a href="#" class="delete link-action"><%= message('delete') -%></a>
+ <% end -%>
+ </td>
</tr>
<% unless errors.all?(&:blank?) -%>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb
index ab21f5fc322..62b01211f99 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb
@@ -6,7 +6,7 @@
<% if key_field(property) -%>
<th><%= message('key') -%></th>
<% else %>
- <%= hidden_field_tag "#{property.key}[auto_generate]", true -%>
+ <%= hidden_field_tag "auto_generate[#{property.key}]", true -%>
<% end -%>
<% property.fields.reject { |field| field.key == 'key' }.each do |field| -%>
<th>
@@ -22,10 +22,12 @@
</thead>
<tbody>
- <% Property.values(property.key, resource_id).reject(&:blank?).each do |set_key| -%>
- <%= render 'settings/set_instance', :property => property, :set_key => set_key, :resource_id => resource_id %>
+ <% set_keys = Property.values(property.key, resource_id) -%>
+ <% set_keys = [''] if set_keys.all?(&:blank?) -%>
+ <% set_keys.each_with_index do |set_key, index| -%>
+ <%= render 'settings/set_instance', :property => property, :set_key => set_key, :resource_id => resource_id, :hide_delete => (index == 0) %>
<% end -%>
- <%= render 'settings/set_instance', :property => property, :set_key => nil, :resource_id => resource_id %>
+ <%= render 'settings/set_instance', :property => property, :set_key => nil, :resource_id => resource_id, :hide_delete => false %>
</tbody>
<tfoot>