From: Jan Provaznik <[email protected]>

https://bugzilla.redhat.com/show_bug.cgi?id=644282

This patch disables deleting template if there is an instance.
---
 src/app/controllers/templates_controller.rb |   15 ++++++++++++++-
 src/app/models/template.rb                  |   16 ++++++++++++----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/src/app/controllers/templates_controller.rb 
b/src/app/controllers/templates_controller.rb
index 3373c05..8261eab 100644
--- a/src/app/controllers/templates_controller.rb
+++ b/src/app/controllers/templates_controller.rb
@@ -233,7 +233,20 @@ add account on <a href=\"#{url_for :controller => 
'provider', \
     if ids.empty?
       flash[:notice] = "No Template Selected"
     else
-      Template.destroy(ids)
+      errs = {}
+      Template.find(ids).each do |t|
+        t.destroy
+        unless t.destroyed?
+          errs[t.name] = t.errors.full_messages.join(". ")
+        end
+      end
+      if errs.empty?
+        flash[:notice] = 'Template deleted'
+      else
+        flash[:error] ||= {}
+        flash[:error][:summary] = 'Error while deleting template'
+        (flash[:error][:failures] ||= {}).merge!(errs)
+      end
     end
     redirect_to :action => 'index'
   end
diff --git a/src/app/models/template.rb b/src/app/models/template.rb
index 9264e76..d1c17c4 100644
--- a/src/app/models/template.rb
+++ b/src/app/models/template.rb
@@ -2,22 +2,30 @@ require 'util/image_descriptor_xml'
 require 'typhoeus'
 
 class Template < ActiveRecord::Base
-  has_many :images,  :dependent => :destroy
+  has_many :images, :dependent => :destroy
+  has_many :instances
   before_validation :update_attrs
+  before_destroy :no_instances?
 
   WAREHOUSE_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/image_warehouse.yml")
 
   validates_presence_of :uuid
   validates_uniqueness_of :uuid
-  # uncomment this after reworking view (currently is used wizard,
-  # so there can be situation when save is called and name and platform can be
-  # unset)
   validates_presence_of :name
   validates_uniqueness_of :name
   validates_presence_of :platform
   validates_presence_of :platform_version
   validates_presence_of :architecture
 
+  def no_instances?
+    unless instances.empty?
+      errors.add_to_base "There are instances for this template."
+      return false
+    end
+
+    true
+  end
+
   def update_xml_attributes(opts = {})
     xml.name = opts[:name] if opts[:name]
     xml.description = opts[:summary] if opts[:summary]
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to