def from_descriptor(spec_hash = {})
self.name = spec_hash["Name"] || "default"
self.provides = spec_hash["Provides"] || []
self.start_order = spec_hash["Start-Order"] || []
self.stop_order = spec_hash["Stop-Order"] || []
self.configure_order = spec_hash["Configure-Order"] || []
self.provides = [self.provides] if self.provides.class == String
self.start_order = [self.start_order] if self.start_order.class == String
self.stop_order = [self.stop_order] if self.stop_order.class == String
self.configure_order = [self.configure_order] if self.configure_order.class == String
if spec_hash.has_key?("Components")
spec_hash["Components"].each do |cname, c|
comp = Component.new.from_descriptor(c)
comp.name = cname
add_component(comp)
end
else
comp_spec_hash = spec_hash.dup.delete_if{|k,v| !["Publishes", "Subscribes"].include?(k) }
c = Component.new.from_descriptor(comp_spec_hash)
c.generated = true
add_component(c)
end
if spec_hash.has_key?("Groups")
spec_hash["Groups"].each do |gname, g|
group = Group.new.from_descriptor(g)
group.name = gname
add_group(group)
end
else
group = Group.new
self.components.each do |c|
group.add_component_ref(ComponentRef.new(c.name).from_descriptor(c.name))
end
if spec_hash.has_key?("Scaling")
group.scaling = Scaling.new.from_descriptor(spec_hash["Scaling"])
end
group.generated = true
add_group(group)
end
if spec_hash.has_key?("Connections")
spec_hash["Connections"].each do |n,c|
conn = Connection.new(n).from_descriptor(c)
add_connection(conn)
end
end
self.group_overrides = [] if self.group_overrides.nil?
if spec_hash.has_key?("GroupOverrides")
spec_hash["GroupOverrides"].each do |go|
group_overrides << go.dup
end
end
self
end