]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/node.rb
Fixed dumb copy-and-paste mistake.
[rails.git] / app / models / node.rb
index 679048b4e3aa18dc453cde9776410b3b7ba0cb2b..e7356085f605c958d68f9503e1f6a2104f409ad0 100644 (file)
@@ -70,7 +70,7 @@ class Node < ActiveRecord::Base
       doc.find('//osm/node').each do |pt|
         return Node.from_xml_node(pt, create)
       end
-    rescue LibXML::XML::Error => ex
+    rescue LibXML::XML::Error, ArgumentError => ex
       raise OSM::APIBadXMLError.new("node", xml, ex.message)
     end
   end
@@ -131,19 +131,21 @@ class Node < ActiveRecord::Base
     # shouldn't be possible to get race conditions.
     Node.transaction do
       check_consistency(self, new_node, user)
-      if WayNode.find(:first, :joins => "INNER JOIN current_ways ON current_ways.id = current_way_nodes.id", :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ])
-        raise OSM::APIPreconditionFailedError.new
-      elsif RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = ? AND member_type='node' and member_id=? ", true, self.id])
-        raise OSM::APIPreconditionFailedError.new
-      else
-        self.changeset_id = new_node.changeset_id
-        self.visible = false
-        
-        # update the changeset with the deleted position
-        changeset.update_bbox!(bbox)
-        
-        save_with_history!
-      end
+      way = WayNode.find(:first, :joins => "INNER JOIN current_ways ON current_ways.id = current_way_nodes.id", 
+                         :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ])
+      raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by way #{way.id}.") unless way.nil?
+      
+      rel = RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", 
+                                :conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id])
+      raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relation #{rel.id}.") unless rel.nil?
+
+      self.changeset_id = new_node.changeset_id
+      self.visible = false
+      
+      # update the changeset with the deleted position
+      changeset.update_bbox!(bbox)
+      
+      save_with_history!
     end
   end
 
@@ -171,7 +173,6 @@ class Node < ActiveRecord::Base
   
   def create_with_history(user)
     check_create_consistency(self, user)
-    self.id = nil
     self.version = 0
     self.visible = true