]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3754 Fix property change notification
authorDavid Gageot <david@gageot.net>
Fri, 21 Sep 2012 09:31:49 +0000 (11:31 +0200)
committerDavid Gageot <david@gageot.net>
Fri, 21 Sep 2012 10:17:57 +0000 (12:17 +0200)
sonar-server/src/main/webapp/WEB-INF/app/controllers/settings_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/models/property.rb

index 69206f8d16ac252b881e4f85d7e1b0c99e6a6aa2..d0d1791bf3fb1ed227f38aa669270071db061c7c 100644 (file)
@@ -42,6 +42,9 @@ class SettingsController < ApplicationController
     @updated_properties = {}
     @definitions.map(&:key).each do |key|
       value = params[key]
+      if value.kind_of? Array
+        value = value.reverse.drop_while(&:blank?).reverse
+      end
 
       if value.blank?
         Property.clear(key, resource_id)
index 483a3f6628e4615e0f2e96df7ef31248355c97ae..71481f44ba0afd18a17babe22df151931b9b519f 100644 (file)
@@ -39,8 +39,11 @@ class Property < ActiveRecord::Base
   end
 
   def self.clear(key, resource_id=nil, user_id=nil)
-    all(key, resource_id, user_id).delete_all
-    Java::OrgSonarServerUi::JRubyFacade.getInstance().setGlobalProperty(key, nil) unless resource_id
+    prop = by_key(key, resource_id, user_id)
+    if prop
+      all(key, resource_id, user_id).delete_all
+      Java::OrgSonarServerUi::JRubyFacade.getInstance().setGlobalProperty(key, nil) unless resource_id
+    end
   end
 
   def self.by_key(key, resource_id=nil, user_id=nil)
@@ -68,25 +71,29 @@ class Property < ActiveRecord::Base
     definition = Java::OrgSonarServerUi::JRubyFacade.getInstance().propertyDefinitions.get(key)
     if definition && definition.multi_values
       if value.kind_of? Array
-        values = value.map { |v| v.gsub(',', '%2C') }
-        values = values.reverse.drop_while(&:blank?).reverse
-        value = values.join(',')
-      end
-    else
-      if value.kind_of? Array
-        value = value.first
+        value = value.map { |v| v.gsub(',', '%2C') }.join(',')
       end
+    elsif value.kind_of? Array
+      value = value.first
     end
 
-    text_value = (value.nil? ? nil : value.to_s)
-    prop = Property.new(:prop_key => key, :text_value => text_value, :resource_id => resource_id, :user_id => user_id)
-    if prop.valid?
-      Property.transaction do
-        Property.delete_all(:prop_key => key, :resource_id => resource_id, :user_id => user_id)
-        prop.save
+    text_value = (value.blank? ? nil : value.to_s)
+
+    prop = by_key(key, resource_id, user_id)
+    if prop
+      if prop.text_value != text_value
+        prop.text_value = text_value
+        if prop.save
+          Java::OrgSonarServerUi::JRubyFacade.getInstance().setGlobalProperty(key, text_value) unless resource_id
+        end
+      end
+    else
+      prop = Property.new(:prop_key => key, :text_value => text_value, :resource_id => resource_id, :user_id => user_id)
+      if prop.save
+        Java::OrgSonarServerUi::JRubyFacade.getInstance().setGlobalProperty(key, text_value) unless resource_id
       end
-      Java::OrgSonarServerUi::JRubyFacade.getInstance().setGlobalProperty(key, text_value) unless resource_id
     end
+
     prop
   end