Use changeset and user caches in Changeset#download
This commit is contained in:
parent
e6a1003509
commit
b92a2de9ec
4 changed files with 81 additions and 27 deletions
|
@ -161,6 +161,10 @@ class ChangesetController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# create changeset and user caches
|
||||
changeset_cache = {}
|
||||
user_display_name_cache = {}
|
||||
|
||||
# create an osmChange document for the output
|
||||
result = OSM::API.new.get_xml_doc
|
||||
result.root.name = "osmChange"
|
||||
|
@ -173,16 +177,16 @@ class ChangesetController < ApplicationController
|
|||
if (elt.version == 1)
|
||||
# first version, so it must be newly-created.
|
||||
created = XML::Node.new "create"
|
||||
created << elt.to_xml_node
|
||||
created << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
else
|
||||
unless elt.visible
|
||||
# if the element isn't visible then it must have been deleted
|
||||
deleted = XML::Node.new "delete"
|
||||
deleted << elt.to_xml_node
|
||||
deleted << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
else
|
||||
# must be a modify
|
||||
modified = XML::Node.new "modify"
|
||||
modified << elt.to_xml_node
|
||||
modified << elt.to_xml_node(changeset_cache, user_display_name_cache)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -42,9 +42,37 @@ class OldNode < ActiveRecord::Base
|
|||
return doc
|
||||
end
|
||||
|
||||
def to_xml_node
|
||||
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||
el1 = XML::Node.new 'node'
|
||||
el1['id'] = self.node_id.to_s
|
||||
el1['version'] = self.version.to_s
|
||||
el1['changeset'] = self.changeset_id.to_s
|
||||
|
||||
if self.visible?
|
||||
el1['lat'] = self.lat.to_s
|
||||
el1['lon'] = self.lon.to_s
|
||||
end
|
||||
|
||||
if changeset_cache.key?(self.changeset_id)
|
||||
# use the cache if available
|
||||
else
|
||||
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||
end
|
||||
|
||||
user_id = changeset_cache[self.changeset_id]
|
||||
|
||||
if user_display_name_cache.key?(user_id)
|
||||
# use the cache if available
|
||||
elsif self.changeset.user.data_public?
|
||||
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||
else
|
||||
user_display_name_cache[user_id] = nil
|
||||
end
|
||||
|
||||
if not user_display_name_cache[user_id].nil?
|
||||
el1['user'] = user_display_name_cache[user_id]
|
||||
el1['uid'] = user_id.to_s
|
||||
end
|
||||
|
||||
self.tags.each do |k,v|
|
||||
el2 = XML::Node.new('tag')
|
||||
|
@ -53,20 +81,8 @@ class OldNode < ActiveRecord::Base
|
|||
el1 << el2
|
||||
end
|
||||
|
||||
if self.visible?
|
||||
el1['lat'] = self.lat.to_s
|
||||
el1['lon'] = self.lon.to_s
|
||||
end
|
||||
|
||||
el1['changeset'] = self.changeset.id.to_s
|
||||
if self.changeset.user.data_public?
|
||||
el1['user'] = self.changeset.user.display_name
|
||||
el1['uid'] = self.changeset.user.id.to_s
|
||||
end
|
||||
|
||||
el1['visible'] = self.visible.to_s
|
||||
el1['timestamp'] = self.timestamp.xmlschema
|
||||
el1['version'] = self.version.to_s
|
||||
|
||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||
|
||||
|
|
|
@ -93,17 +93,34 @@ class OldRelation < ActiveRecord::Base
|
|||
return doc
|
||||
end
|
||||
|
||||
def to_xml_node
|
||||
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||
el1 = XML::Node.new 'relation'
|
||||
el1['id'] = self.relation_id.to_s
|
||||
el1['visible'] = self.visible.to_s
|
||||
el1['timestamp'] = self.timestamp.xmlschema
|
||||
if self.changeset.user.data_public?
|
||||
el1['user'] = self.changeset.user.display_name
|
||||
el1['uid'] = self.changeset.user.id.to_s
|
||||
end
|
||||
el1['version'] = self.version.to_s
|
||||
el1['changeset'] = self.changeset_id.to_s
|
||||
|
||||
if changeset_cache.key?(self.changeset_id)
|
||||
# use the cache if available
|
||||
else
|
||||
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||
end
|
||||
|
||||
user_id = changeset_cache[self.changeset_id]
|
||||
|
||||
if user_display_name_cache.key?(user_id)
|
||||
# use the cache if available
|
||||
elsif self.changeset.user.data_public?
|
||||
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||
else
|
||||
user_display_name_cache[user_id] = nil
|
||||
end
|
||||
|
||||
if not user_display_name_cache[user_id].nil?
|
||||
el1['user'] = user_display_name_cache[user_id]
|
||||
el1['uid'] = user_id.to_s
|
||||
end
|
||||
|
||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||
|
||||
|
|
|
@ -92,17 +92,34 @@ class OldWay < ActiveRecord::Base
|
|||
@tags = t
|
||||
end
|
||||
|
||||
def to_xml_node
|
||||
def to_xml_node(changeset_cache = {}, user_display_name_cache = {})
|
||||
el1 = XML::Node.new 'way'
|
||||
el1['id'] = self.way_id.to_s
|
||||
el1['visible'] = self.visible.to_s
|
||||
el1['timestamp'] = self.timestamp.xmlschema
|
||||
if self.changeset.user.data_public?
|
||||
el1['user'] = self.changeset.user.display_name
|
||||
el1['uid'] = self.changeset.user.id.to_s
|
||||
end
|
||||
el1['version'] = self.version.to_s
|
||||
el1['changeset'] = self.changeset.id.to_s
|
||||
el1['changeset'] = self.changeset_id.to_s
|
||||
|
||||
if changeset_cache.key?(self.changeset_id)
|
||||
# use the cache if available
|
||||
else
|
||||
changeset_cache[self.changeset_id] = self.changeset.user_id
|
||||
end
|
||||
|
||||
user_id = changeset_cache[self.changeset_id]
|
||||
|
||||
if user_display_name_cache.key?(user_id)
|
||||
# use the cache if available
|
||||
elsif self.changeset.user.data_public?
|
||||
user_display_name_cache[user_id] = self.changeset.user.display_name
|
||||
else
|
||||
user_display_name_cache[user_id] = nil
|
||||
end
|
||||
|
||||
if not user_display_name_cache[user_id].nil?
|
||||
el1['user'] = user_display_name_cache[user_id]
|
||||
el1['uid'] = user_id.to_s
|
||||
end
|
||||
|
||||
el1['redacted'] = self.redaction.id.to_s if self.redacted?
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue