]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3529 Better property sets
authorDavid Gageot <david@gageot.net>
Mon, 8 Oct 2012 16:29:05 +0000 (18:29 +0200)
committerDavid Gageot <david@gageot.net>
Tue, 9 Oct 2012 06:58:58 +0000 (08:58 +0200)
sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_set_instance.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/settings/_type_PROPERTY_SET_DEFINITION.html.erb

index 814c40f539d37e5042cfec5d9b4e9157080031a9..ca3384ae025cde9c521d3226f79dc383518cd0c5 100644 (file)
@@ -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
index 167143441eceba5a146c52c0d1200728543e149f..e1297cc8c88f50c0c06caf20472509881341b87c 100644 (file)
@@ -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 -%>
 
 <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();
index 8650ff409a587b152f0b3b961f1a8a6a3a6792cf..b11447eae4f8d574d08dbde174b958844573906e 100644 (file)
@@ -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 -%>
     <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?) -%>
index ab21f5fc32225699c60b74dc6391b2fccf8685b0..62b01211f999cc79d63b93d02894a7d70a1c02d3 100644 (file)
@@ -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>
   </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>