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
