---
server/lib/converters/nokogiri_converter.rb | 141 ++++++++++++++++++++
server/lib/deltacloud/helpers/conversion_helper.rb | 10 +-
server/lib/deltacloud/helpers/driver_helper.rb | 6 +-
3 files changed, 151 insertions(+), 6 deletions(-)
create mode 100644 server/lib/converters/nokogiri_converter.rb
diff --git a/server/lib/converters/nokogiri_converter.rb
b/server/lib/converters/nokogiri_converter.rb
new file mode 100644
index 0000000..3ab165b
--- /dev/null
+++ b/server/lib/converters/nokogiri_converter.rb
@@ -0,0 +1,141 @@
+require 'nokogiri'
+
+module Converters
+ class NokogiriConverter
+
+ attr_accessor :data_type, :link_builder, :builder
+
+ def initialize(link_builder, data_type)
+ @link_builder, @data_type = link_builder, data_type
+ end
+
+ def convert(data)
+ if data.class.eql?(Array)
+ convert_array(data).to_xml
+ else
+ convert_single(data).to_xml
+ end
+ end
+
+ def convert_flavor(xml, data)
+ lambda {
+ xml.flavor(:href => link_builder.send( :flavor_url, data.id )) {
+ xml.id_ data.id
+ xml.architecture data.architecture
+ xml.memory data.memory
+ xml.storage data.storage
+ }
+ }
+ end
+
+ def convert_image(xml, data)
+ lambda {
+ xml.image(:href => link_builder.send( :image_url, data.id )) {
+ xml.id_ data.id
+ xml.name data.name
+ xml.architecture data.architecture
+ xml.owner_id data.owner_id
+ xml.description data.description
+ }
+ }
+ end
+
+ def convert_realm(xml, data)
+ lambda {
+ xml.realm(:href => link_builder.send( :realm_url, data.id )) {
+ xml.id_ data.id
+ xml.name data.name
+ xml.state data.state
+ xml.limit data.limit.eql?(:unlimited) ? nil : data.limit
+ }
+ }
+ end
+
+ def convert_instance(xml, data)
+ lambda {
+ xml.instance(:href => link_builder.send( :instance_url, data.id )) {
+ xml.id_ data.id
+ xml.name data.name
+ xml.owner_id data.owner_id
+ xml.state data.state
+ xml.image(:href => link_builder.send( :image_url, data.image_id))
+ xml.flavor(:href => link_builder.send( :flavor_url, data.flavor_id))
if data.flavor_id
+ xml.realm(:href => link_builder.send( :realm_url, data.realm_id)) if
data.realm_id
+ xml.actions {
+ data.actions.each do |action|
+ xml.link(:red => action, :href =>
link_builder.send("#{action}_instance_url", data.id))
+ end if data.actions and not data.actions.empty?
+ }
+ xml.send('public-addresses') {
+ data.public_addresses.each do |address|
+ xml.address address
+ end
+ }
+ xml.send('private-addresses') {
+ data.private_addresses.each do |address|
+ xml.address address
+ end
+ }
+ }
+ }
+ end
+
+ def convert_storage_volume(xml, data)
+ lambda {
+ xml.send('storage-volume', :href =>
link_builder.send(:storage_volume_url, data.id)) {
+ xml.id_ data.id
+ xml.created data.created
+ xml.state data.state
+ xml.capacity data.capacity
+ xml.device data.device
+ if data.instance_id
+ xml.instance(:href => link_builder.send(:instance_url,
data.instance_id))
+ else
+ xml.instance
+ end
+ }
+ }
+ end
+
+ def convert_storage_snapshot(xml, data)
+ lambda {
+ xml.send('storage-snapshot', :href =>
link_builder.send(:storage_snapshot_url, data.id)) {
+ xml.id_ data.id
+ xml.created data.created
+ xml.state data.state
+ if data.storage_volume_id
+ xml.send('storage-volume', :href =>
link_builder.send(:storage_snapshot_url, data.storage_volume_id))
+ else
+ xml.send('storage-volume')
+ end
+ }
+ }
+ end
+
+ private
+
+ def convert_array(data)
+ Nokogiri::XML::Builder.new do |xml|
+ xml.send(:"#{data_type.to_s.pluralize.tr('_', '-')}") {
+ data.each do |item|
+ self.send(:"convert_#{data_type}", xml, item).call
+ end
+ }
+ end
+ end
+
+ def convert_single(data)
+ Nokogiri::XML::Builder.new do |xml|
+ self.send(:"convert_#{data_type}", xml, data).call
+ end
+ end
+
+ end
+
+ class String
+ def pluralize
+ "#{self}s"
+ end
+ end
+end
+
diff --git a/server/lib/deltacloud/helpers/conversion_helper.rb
b/server/lib/deltacloud/helpers/conversion_helper.rb
index 6ba85d5..b4cef49 100644
--- a/server/lib/deltacloud/helpers/conversion_helper.rb
+++ b/server/lib/deltacloud/helpers/conversion_helper.rb
@@ -16,13 +16,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
-load 'converters/xml_converter.rb'
+#load 'converters/xml_converter.rb'
+load 'converters/nokogiri_converter.rb'
module ConversionHelper
def convert_to_xml(type, obj)
- if ( [ :flavor, :account, :image, :realm, :instance, :storage_volume,
:storage_snapshot ].include?( type ) )
- Converters::XMLConverter.new( self, type ).convert(obj)
+ #if ( [ :account, :image, :realm, :instance, :storage_volume,
:storage_snapshot ].include?( type ) )
+ # Converters::XMLConverter.new( self, type ).convert(obj)
+ #end
+ if [ :flavor, :execute].include?(type)
+ Converters::NokogiriConverter.new(self, type).convert(obj)
end
end
diff --git a/server/lib/deltacloud/helpers/driver_helper.rb
b/server/lib/deltacloud/helpers/driver_helper.rb
index 352253f..296d650 100644
--- a/server/lib/deltacloud/helpers/driver_helper.rb
+++ b/server/lib/deltacloud/helpers/driver_helper.rb
@@ -17,13 +17,13 @@
require 'deltacloud/base_driver'
-require 'converters/xml_converter'
+require 'converters/nokogiri_converter'
module DriverHelper
def convert_to_xml(type, obj)
- if ( [ :flavor, :account, :image, :realm, :instance, :storage_volume,
:storage_snapshot ].include?( type ) )
- Converters::XMLConverter.new( self, type ).convert(obj)
+ if [ :flavor, :realm, :image, :instance, :storage_snapshot,
:storage_volume, :account ].include?(type)
+ Converters::NokogiriConverter.new( self, type ).convert(obj)
end
end
end
--
1.6.6.2
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel