# File lib/openshift-origin-controller/app/models/rest_cartridge11.rb, line 6
  def initialize(type, name, app, url, status_messages, nolinks=false)
    self.name = name
    self.type = type
    self.scales_from = 0
    self.scales_to = nil 
    self.supported_scales_from = 0
    self.supported_scales_to = nil 
    self.scales_with = nil
    self.gear_profile = nil
    self.current_scale = 0
    self.collocated_with = []
    self.status_messages = status_messages
    prop_values = nil
    cart = CartridgeCache.find_cartridge(name)
    if app
      if CartridgeCache.cartridge_names('standalone').include? name
        app.comp_instance_map.each { |cname, cinst|
          next if cinst.parent_cart_name!=name
          prop_values = cinst.cart_properties
          break
        }
      else
        prop_values = app.embedded[name] 
      end
      group_component_map = {}
      app.comp_instance_map.each { |ci_name, ci|
        if ci.parent_cart_name==name
          group_component_map[ci.group_instance_name] = ci 
        end
      }
      group_component_map.each { |group_name, component|
        gi = app.group_instance_map[group_name]
        set_scaling_info(component, gi, cart)
      }
    else
      set_scaling_info(nil, nil, cart)
    end
    self.version = cart.version
    self.display_name = cart.display_name
    self.description = cart.description
    self.license = cart.license
    self.license_url = cart.license_url
    self.tags = cart.categories
    self.website = cart.website
    # self.suggests = cart.suggests_feature
    # self.requires = cart.requires_feature
    # self.depends = cart.profiles.map { |p| p.components.map { |c| c.depends_service }.flatten }.flatten.uniq
    # self.conflicts = cart.conflicts_feature
    self.help_topics = cart.help_topics
    
    self.properties = []
    cart.cart_data_def.each do |data_def|
      property = {}
      property["name"] = data_def["Key"]
      property["type"] = data_def["Type"]
      property["description"] = data_def["Description"]
      property["value"] = prop_values[data_def["Key"]] unless prop_values.nil? or prop_values[data_def["Key"]].nil?
      self.properties << property
    end
    
    if app and !nolinks
      domain_id = app.domain.namespace
      app_id = app.name
      if not app_id.nil? and not domain_id.nil?
        self.links = {
          "GET" => Link.new("Get cartridge", "GET", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}")),
          "UPDATE" => Link.new("Update cartridge configuration", "PUT", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"), nil, [
            OptionalParam.new("additional_storage", "integer", "Additional filesystem storage in gigabytes on each gear having cartridge #{name}"),
            OptionalParam.new("scales_from", "integer", "Minimum number of gears having cartridge #{name}"),
            OptionalParam.new("scales_to", "integer", "Maximum number of gears having cartridge #{name}")
          ])
        }
        self.links.merge!({
          "START" => Link.new("Start embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
            Param.new("event", "string", "event", "start")
          ]),
          "STOP" => Link.new("Stop embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
            Param.new("event", "string", "event", "stop")
          ]),
          "RESTART" => Link.new("Restart embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
            Param.new("event", "string", "event", "restart")
          ]),
          "RELOAD" => Link.new("Reload embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
            Param.new("event", "string", "event", "reload")
          ]),
          "DELETE" => Link.new("Delete embedded cartridge", "DELETE", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"))
        }) if type == "embedded"
      end
    end
  end