ignore this one, please, sent updated version

On 09/30/2010 04:35 PM, [email protected] wrote:
> From: Jan Provaznik<[email protected]>
>
> - packages/groups are selected on separate page by checkboxes
> - when whole group is checked, only non-optional packages are selected
> - packages which are already selected are checked and disabled in selection 
> list
> ---
>   src/app/controllers/templates_controller.rb        |   46 ++++++++-------
>   src/app/util/image_descriptor_xml.rb               |    4 +-
>   src/app/util/repository_manager.rb                 |   20 ++++++
>   .../util/repository_manager/comps_repository.rb    |    2 +-
>   src/app/util/repository_manager/pulp_repository.rb |    6 +-
>   src/app/views/templates/_content_selection.haml    |   63 
> ++++++++++++--------
>   src/app/views/templates/_managed_content.haml      |    1 +
>   src/app/views/templates/add_software_form.haml     |    1 +
>   src/app/views/templates/new.haml                   |    3 -
>   src/features/template.feature                      |   15 ++---
>   10 files changed, 97 insertions(+), 64 deletions(-)
>   create mode 100644 src/app/views/templates/add_software_form.haml
>
> diff --git a/src/app/controllers/templates_controller.rb 
> b/src/app/controllers/templates_controller.rb
> index 9361eff..37bf727 100644
> --- a/src/app/controllers/templates_controller.rb
> +++ b/src/app/controllers/templates_controller.rb
> @@ -57,10 +57,20 @@ class TemplatesController<  ApplicationController
>       # synchronize it at first to xml
>       @tpl.update_xml_attributes!(params[:tpl])
>
> -    # if add/remove pkg/group, we only update xml and render 'new' template
> +    # if remove pkg, we only update xml and render 'new' template
>       # again
> -    if update_selection
> -      render :action =>  'new'
> +    params.keys.each do |param|
> +      if param =~ /^remove_package_(.*)$/
> +        update_group_or_package(:remove_package, $1, nil)
> +        render :action =>  'new'
> +        return
> +      end
> +    end
> +
> +    if params[:add_software]
> +      @repository_manager = RepositoryManager.new
> +      @groups = 
> @repository_manager.all_groups_with_tagged_selected_packages(@tpl.xml.packages,
>  params[:repository])
> +      render :action =>  'add_software_form'
>         return
>       end
>
> @@ -75,6 +85,18 @@ class TemplatesController<  ApplicationController
>       end
>     end
>
> +  def add_software
> +    @tpl = params[:template_id] ? Template.find(params[:template_id]) : 
> Template.new(params[:template_id])
> +    @repository_manager = RepositoryManager.new
> +    @groups = @repository_manager.all_groups(params[:repository])
> +    if params[:add_selected]
> +      params[:groups].to_a.each { |group| @tpl.xml.add_group(group) }
> +      params[:packages].to_a.each { |pkg| @tpl.xml.add_package(pkg, nil) }
> +      @tpl.save_xml!
> +    end
> +    render :action =>  'new'
> +  end
> +
>     def build_form
>       raise "select template to build" unless params[:image] and 
> params[:image][:template_id]
>       @image = Image.new(params[:image])
> @@ -133,24 +155,6 @@ class TemplatesController<  ApplicationController
>
>     private
>
> -  def update_selection
> -    # TODO: don't know better way how to select package and also save other 
> form data than
> -    # passing pkg/group as part of submit button name
> -    params.keys.each do |param|
> -      if param =~ /^select_package_(.*)$/
> -        update_group_or_package(:add_package, $1, nil)
> -        return true
> -      elsif param =~ /^remove_package_(.*)$/
> -        update_group_or_package(:remove_package, $1, nil)
> -        return true
> -      elsif param =~ /^select_group_(.*)$/
> -        update_group_or_package(:add_group, $1)
> -        return true
> -      end
> -    end
> -    return false
> -  end
> -
>     def update_group_or_package(method, *args)
>       @repository_manager = RepositoryManager.new
>       @groups = @repository_manager.all_groups(params[:repository])
> diff --git a/src/app/util/image_descriptor_xml.rb 
> b/src/app/util/image_descriptor_xml.rb
> index 28effb5..f437574 100644
> --- a/src/app/util/image_descriptor_xml.rb
> +++ b/src/app/util/image_descriptor_xml.rb
> @@ -199,8 +199,8 @@ class ImageDescriptorXML
>         groups_node = get_or_create_node('groups')
>         add_group_node(groups_node, gname)
>       end
> -    group[:packages].each do |p, type|
> -      next if type == 'optional'
> +    group[:packages].each do |p, info|
> +      next if info[:type] == 'optional'
>         add_package(p, group[:name])
>       end
>     end
> diff --git a/src/app/util/repository_manager.rb 
> b/src/app/util/repository_manager.rb
> index 11b6c5e..7ecaf35 100644
> --- a/src/app/util/repository_manager.rb
> +++ b/src/app/util/repository_manager.rb
> @@ -58,6 +58,26 @@ class RepositoryManager
>       return @all_packages
>     end
>
> +  def all_groups_with_tagged_selected_packages(pkgs, repository = nil)
> +    groups = all_groups(repository)
> +    groups.each_value do |group|
> +      pkgs.each do |pkg|
> +        next unless p = group[:packages][pkg[:name]]
> +        p[:selected] = true
> +      end
> +      # if all non-optional packages are selected, mark all
> +      # group as selected
> +      group[:selected] = true
> +      group[:packages].each_value do |pkg|
> +        if pkg[:type] != 'optional' and !pkg[:selected]
> +          group[:selected] = false
> +          break
> +        end
> +      end
> +    end
> +    return groups
> +  end
> +
>     private
>
>     def load_config
> diff --git a/src/app/util/repository_manager/comps_repository.rb 
> b/src/app/util/repository_manager/comps_repository.rb
> index d7e192a..9afe68b 100644
> --- a/src/app/util/repository_manager/comps_repository.rb
> +++ b/src/app/util/repository_manager/comps_repository.rb
> @@ -74,7 +74,7 @@ class CompsRepository<  AbstractRepository
>     def get_group_packages(group_node)
>       pkgs = {}
>       group_node.xpath('packagelist/packagereq').each do |p|
> -      pkgs[p.text] = p.attr('type')
> +      (pkgs[p.text] ||= {})[:type] = p.attr('type')
>       end
>       return pkgs
>     end
> diff --git a/src/app/util/repository_manager/pulp_repository.rb 
> b/src/app/util/repository_manager/pulp_repository.rb
> index 5641f0c..be6e72e 100644
> --- a/src/app/util/repository_manager/pulp_repository.rb
> +++ b/src/app/util/repository_manager/pulp_repository.rb
> @@ -49,9 +49,9 @@ class PulpRepository<  AbstractRepository
>       groups = {}
>       WrappedRestClient.get(@groups_url, HTTP_OPTS).each do |id, info|
>         pkgs = {}
> -      info['default_package_names'].each {|p| pkgs[p] = 'default'}
> -      info['optional_package_names'].each {|p| pkgs[p] = 'optional'}
> -      info['mandatory_package_names'].each {|p| pkgs[p] = 'mandatory'}
> +      info['default_package_names'].each {|p| pkgs[p] = {:type =>  
> 'default'}}
> +      info['optional_package_names'].each {|p| pkgs[p] = {:type =>  
> 'optional'}}
> +      info['mandatory_package_names'].each {|p| pkgs[p] = {:type =>  
> 'mandatory'}}
>         next if pkgs.empty?
>         name = info['name']
>         groups[name] = {
> diff --git a/src/app/views/templates/_content_selection.haml 
> b/src/app/views/templates/_content_selection.haml
> index 2ca99fe..f080f4a 100644
> --- a/src/app/views/templates/_content_selection.haml
> +++ b/src/app/views/templates/_content_selection.haml
> @@ -1,31 +1,42 @@
>   %h3 Managed Content Selection
>   %h5 Search for Content
>
> -= text_field_tag 'search', 'Search Text', :disabled =>  true
> -%a Advanced Search
> +- form_tag :action =>  "add_software" do
> +  = text_field_tag 'search', 'Search Text', :disabled =>  true
> +  = hidden_field_tag :template_id, @tpl.id
> +  %a Advanced Search
>
> -%p
> -  Repositories to Search:
> -  %a (Check all)
> -%fieldset
> -  - @repository_manager.repositories.each do |repo|
> -    = check_box_tag 'repositories[]', repo.id, true
> -    = label_tag 'repositories[]', repo.name
> -%fieldset
> -  .grid_3.alpha
> -    = radio_button_tag :show_mode, 'group', true
> -    = label_tag :show_mode, 'Show by Group'
> -  .grid_2.omega
> -    = radio_button_tag :show_mode, 'type', false, :disabled =>  true
> -    = label_tag :show_mode, 'Show by Type'
> +  %p
> +    Repositories to Search:
> +    %a (Check all)
> +  %fieldset
> +    - @repository_manager.repositories.each do |repo|
> +      = check_box_tag 'repositories[]', repo.id, true
> +      = label_tag 'repositories[]', repo.name
> +  %fieldset
> +    .grid_3.alpha
> +      = radio_button_tag :show_mode, 'group', true
> +      = label_tag :show_mode, 'Show by Group'
> +    .grid_2.omega
> +      = radio_button_tag :show_mode, 'type', false, :disabled =>  true
> +      = label_tag :show_mode, 'Show by Type'
>
> -%ul.sidebarcontainer
> -  - @groups.keys.sort.each do |group|
> -    %li
> -      %h5.grid_4.alpha= group
> -      = submit_tag "Add", :name =>  "select_group_#{group}", :id =>  
> "select_group_#{group}", :class =>  "grid_1 omega"
> -      %ul
> -        - @groups[group][:packages].each do |pkg, type|
> -          %li
> -            %span.grid_4.alpha= pkg
> -            = submit_tag "Add", :name =>  "select_package_#{pkg}", :id =>  
> "select_package_#{pkg}", :class =>  "grid_1 omega"
> +  = submit_tag "Add Selected", :name =>  "add_selected", :class =>  
> "dialogbutton"
> +  = submit_tag "Cancel", :name =>  "cancel", :class =>  "dialogbutton"
> +  %ul.sidebarcontainer
> +    - @groups.keys.sort.each do |group|
> +      - group_sel = @groups[group][:selected]
> +      - group_id = group.gsub(/\s/, '_')
> +      %li
> +        = check_box_tag 'groups[]', group, group_sel, :disabled =>  
> group_sel, :id =>  "group_#{group_id}"
> +        = label_tag "group_#{group_id}", group
> +        %ul
> +          - @groups[group][:packages].each do |pkg, info|
> +            - pkg_sel = info[:selected] ? true : false
> +            - pkg_id = pkg.gsub(/\s/, '_')
> +            %li
> +              = check_box_tag 'packages[]', pkg, pkg_sel, :disabled =>  
> pkg_sel, :id =>  "package_#{pkg_id}"
> +              = label_tag "package_#{pkg_id}", pkg
> +
> +  = submit_tag "Add Selected", :name =>  "add_selected", :class =>  
> "dialogbutton"
> +  = submit_tag "Cancel", :name =>  "cancel", :class =>  "dialogbutton"
> diff --git a/src/app/views/templates/_managed_content.haml 
> b/src/app/views/templates/_managed_content.haml
> index 2ce8131..a769dbf 100644
> --- a/src/app/views/templates/_managed_content.haml
> +++ b/src/app/views/templates/_managed_content.haml
> @@ -12,3 +12,4 @@
>           %button{:type =>  'button', :disabled =>  'disabled'} Config
>           %button{:type =>  'button', :disabled =>  'disabled'} Metadata
>           = submit_tag "Remove", :name =>  "remove_package_#{pkg[:name]}", 
> :id =>  "remove_package_#{pkg[:name]}"
> +  = submit_tag "Add Software", :name =>  "add_software"
> diff --git a/src/app/views/templates/add_software_form.haml 
> b/src/app/views/templates/add_software_form.haml
> new file mode 100644
> index 0000000..d32729a
> --- /dev/null
> +++ b/src/app/views/templates/add_software_form.haml
> @@ -0,0 +1 @@
> += render :partial =>  'content_selection'
> diff --git a/src/app/views/templates/new.haml 
> b/src/app/views/templates/new.haml
> index fa82ce4..173549e 100644
> --- a/src/app/views/templates/new.haml
> +++ b/src/app/views/templates/new.haml
> @@ -45,6 +45,3 @@
>
>       = submit_tag "Save", :name =>  "save", :class =>  "dialogbutton"
>       = submit_tag "Cancel", :name =>  "cancel", :class =>  "dialogbutton"
> -
> -  .grid_5
> -    = render :partial =>  'content_selection'
> diff --git a/src/features/template.feature b/src/features/template.feature
> index e9b4ed9..29d963e 100644
> --- a/src/features/template.feature
> +++ b/src/features/template.feature
> @@ -22,23 +22,22 @@ Feature: Manage Templates
>       And I should see "Template saved"
>       And I should see "mocktemplate"
>
> -  Scenario: Add/Remove a package and a group to/from the template
> +  Scenario: Add group and remove package to/from the template
>       Given I am on the templates page
>       When I press "Template"
>       Then I should be on the new template page
>       When I fill in the following:
>         | tpl_name         | mocktemplate  |
> -    And I press "select_package_jboss-as5"
> -    Then I should be on the create template page
> +    And I press "Add Software"
> +    Then I should see "Managed Content Selection"
> +    When I check "group_JBoss_Core_Packages"
> +    And I press "Add Selected"
> +    Then I should see "Managed Content to Bundle"
>       And the "tpl[name]" field by name should contain "mocktemplate"
>       And the page should contain "#selected_package_jboss-as5" selector
>       When I press "remove_package_jboss-as5"
> -    Then I should be on the create template page
> +    Then I should see "Managed Content to Bundle"
>       And the page should not contain "#selected_package_jboss-as5" selector
> -    When I press "select_group_JBoss Core Packages"
> -    Then I should be on the create template page
> -    And the "tpl[name]" field by name should contain "mocktemplate"
> -    And the page should contain "#selected_package_jboss-jgroups" selector
>       When I press "Save"
>       Then I should be on the templates page
>       And I should see "Template saved"

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to