def groups
doc = REXML::Document.new(xml)
groups = []
doc.elements.each("info/groups/group") do |group_xml|
group = Group.new(group_xml.elements["app_root"].text,
group_xml.elements["name"].text,
group_xml.elements["environment"].text)
group_xml.elements.each("processes/process") do |process_xml|
process = Process.new(group)
process_xml.elements.each do |element|
if element.name == "server_sockets"
element.elements.each("server_socket") do |server_socket|
name = server_socket.elements["name"].text.to_sym
address = server_socket.elements["address"].text
address_type = server_socket.elements["type"].text
process.server_sockets[name] = OpenStruct.new(
:address => address,
:address_type => address_type
)
end
else
if process.respond_to?("#{element.name}=")
if Process::INT_PROPERTIES.include?(element.name.to_sym)
value = element.text.to_i
elsif Process::BOOL_PROPERTIES.include?(element.name.to_sym)
value = element.text == "true"
else
value = element.text
end
process.send("#{element.name}=", value)
end
end
end
group.processes << process
end
groups << group
end
return groups
end