# File lib/openshift-origin-common/models/profile.rb, line 91
    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"] || []
      
      #fixup user data. provides, start_order, start_order, configure_order bust be arrays
      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|
          # each group override is a list
          group_overrides << go.dup
        end
      end
      self
    end