[PATCH conductor 09/15] Add PriorityGroup controller and views

ifarkas at redhat.com ifarkas at redhat.com
Sun Jul 22 10:16:29 UTC 2012


From: Imre Farkas <ifarkas at redhat.com>

---
 .../provider_priority_groups_controller.rb         |   97 ++++++++++++++++++++
 .../views/provider_priority_groups/_form.html.haml |   55 +++++++++++
 .../views/provider_priority_groups/edit.html.haml  |   15 +++
 .../views/provider_priority_groups/index.html.haml |   40 ++++++++
 .../views/provider_priority_groups/new.html.haml   |   15 +++
 5 files changed, 222 insertions(+)
 create mode 100644 src/app/controllers/provider_priority_groups_controller.rb
 create mode 100644 src/app/views/provider_priority_groups/_form.html.haml
 create mode 100644 src/app/views/provider_priority_groups/edit.html.haml
 create mode 100644 src/app/views/provider_priority_groups/index.html.haml
 create mode 100644 src/app/views/provider_priority_groups/new.html.haml

diff --git a/src/app/controllers/provider_priority_groups_controller.rb b/src/app/controllers/provider_priority_groups_controller.rb
new file mode 100644
index 0000000..b4fe019
--- /dev/null
+++ b/src/app/controllers/provider_priority_groups_controller.rb
@@ -0,0 +1,97 @@
+#
+#   Copyright 2012 Red Hat, Inc.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+class ProviderPriorityGroupsController < ApplicationController
+
+  before_filter :require_user
+  before_filter :load_pool
+  before_filter :load_providers, :only => [:new, :create, :edit, :update]
+
+  def index
+    @strategy = ProviderSelection::Base.find_strategy_by_name(params[:name])
+    @priority_groups = @pool.provider_priority_groups
+  end
+
+  def new
+    @priority_group = ProviderPriorityGroup.new
+  end
+
+  def create
+    @priority_group = ProviderPriorityGroup.new(params[:provider_priority_group])
+    @priority_group.pool = @pool
+
+    unless @priority_group.save
+      render :new
+      return
+    end
+
+    if params[:provider_ids].present?
+      selected_providers = Provider.find(params[:provider_ids])
+      @priority_group.providers = selected_providers
+    end
+
+    if params[:provider_account_ids].present?
+      selected_provider_accounts = ProviderAccount.find(params[:provider_account_ids])
+      @priority_group.add_provider_accounts(selected_provider_accounts)
+    end
+
+    redirect_to pool_provider_selection_provider_priority_groups_path(@priority_group.pool),
+                :notice => t('provider_priority_groups.flash.created')
+  end
+
+  def edit
+    @priority_group = ProviderPriorityGroup.find(params[:id])
+  end
+
+  def update
+    @priority_group = ProviderPriorityGroup.find(params[:id])
+
+    unless @priority_group.update_attributes!(params[:provider_priority_group])
+      render :edit
+      return
+    end
+
+    if params[:provider_ids].present?
+      selected_providers = Provider.find(params[:provider_ids])
+      @priority_group.providers = selected_providers
+    end
+
+    @priority_group.provider_accounts.clear
+    if params[:provider_account_ids].present?
+      selected_provider_accounts = ProviderAccount.find(params[:provider_account_ids])
+      @priority_group.add_provider_accounts(selected_provider_accounts)
+    end
+
+    redirect_to pool_provider_selection_provider_priority_groups_path(@priority_group.pool),
+                :notice => t('provider_priority_groups.flash.updated')
+  end
+
+  def destroy
+    @pool.provider_priority_groups.find(params[:id]).destroy
+    redirect_to :back, :notice => t('provider_priority_groups.flash.deleted')
+  end
+
+  private
+
+  def load_pool
+    @pool = Pool.find(params[:pool_id])
+  end
+
+  def load_providers
+    @providers = Provider.list_for_user(current_session, current_user, Privilege::USE)
+  end
+
+end
diff --git a/src/app/views/provider_priority_groups/_form.html.haml b/src/app/views/provider_priority_groups/_form.html.haml
new file mode 100644
index 0000000..c72918a
--- /dev/null
+++ b/src/app/views/provider_priority_groups/_form.html.haml
@@ -0,0 +1,55 @@
+.priority-group
+  - if @priority_group.errors.any?
+    = render 'layouts/error_messages', :object => @priority_group
+
+  %fieldset
+    .field
+      = form.label :name
+      .input
+        = form.text_field :name
+    .field
+      = form.label :score
+      .input
+        = form.text_field :score
+
+  - @providers.each do |provider|
+    .provider
+
+      %header
+        %h3.name
+          = check_box_tag("provider_ids[]", provider.id, @priority_group.include?(provider), :class => 'provider-checkbox')
+          = provider.name
+
+      .provider-accounts-table
+        = filter_table(provider_accounts_header(:with_checkbox_placeholder => true, :without_alert => true), provider.provider_accounts, {:without_form => true}) do |account|
+          %tr{:class => cycle('nostripe','stripe')}
+            %td{:class => 'checkbox'}
+              = check_box_tag("provider_account_ids[]", account.id, @priority_group.include?(account), :class => 'provider-account-checkbox')
+            %td= link_to(account.name, provider_provider_account_path(account.provider, account))
+            %td= account.credentials_hash['username']
+            %td= account.provider.name
+            %td= account.provider.provider_type.name
+            %td= account.priority
+            %td{:class => 'center'}= number_to_percentage account.quota.percentage_used, :precision => 0
+            %td{:class => 'center'}= account.quota.maximum_running_instances || t('provider_accounts.properties.unlimited')
+
+:javascript
+  $(document).ready(function() {
+    $(".priority-group .provider h3.name").live("click", function(event) {
+      var $providerCheckbox = $(this).find('input.provider-checkbox');
+      var providerAccountCheckboxes = $(this).parents('.provider').find('input.provider-account-checkbox')
+
+      $.each(providerAccountCheckboxes, function(index, providerAccountCheckbox) {
+        $(providerAccountCheckbox).prop('checked', $providerCheckbox.prop('checked'));
+      });
+    });
+
+    $(".priority-group .provider .provider-account-checkbox").live("click", function(event) {
+      var $providerAccountCheckbox = $(this);
+
+      if ($providerAccountCheckbox.prop('checked') == false) {
+        var $providerCheckbox = $(this).parents('.provider').find('input.provider-checkbox')
+        $providerCheckbox.prop('checked', false);
+      }
+    });
+  });
diff --git a/src/app/views/provider_priority_groups/edit.html.haml b/src/app/views/provider_priority_groups/edit.html.haml
new file mode 100644
index 0000000..092a45e
--- /dev/null
+++ b/src/app/views/provider_priority_groups/edit.html.haml
@@ -0,0 +1,15 @@
+= render :partial => 'layouts/admin_nav'
+
+%header.page-header
+  .obj_actions
+    .return_to
+      = t(:return_to)
+      = link_to t('provider_priority_groups.edit.back', :pool => @pool.name), pool_provider_selection_provider_priority_groups_path(@pool)
+  %h1.no-icon= t('provider_priority_groups.edit.title')
+
+%section.content-section
+  .content
+    = form_for @priority_group, :url => pool_provider_selection_provider_priority_group_path(@pool) do |form|
+      = render :partial => 'form', :locals => { :form => form }
+      %fieldset.options
+        = form.submit(t('provider_priority_groups.edit.save'), :class => "submit button pill")
\ No newline at end of file
diff --git a/src/app/views/provider_priority_groups/index.html.haml b/src/app/views/provider_priority_groups/index.html.haml
new file mode 100644
index 0000000..8a4eab2
--- /dev/null
+++ b/src/app/views/provider_priority_groups/index.html.haml
@@ -0,0 +1,40 @@
+= render :partial => 'layouts/admin_nav'
+
+%header.page-header
+  .obj_actions
+    .return_to
+      = t(:return_to)
+      = link_to t('provider_selection.edit_stategy.strategies', :pool => @pool.name), pool_provider_selection_path(@pool)
+  %h1.no-icon= t('provider_selection.show.provider_selection')
+
+%section.content-section
+  %header
+    .section-controls
+      = link_to(t('provider_priority_groups.index.add_new'), new_pool_provider_selection_provider_priority_group_path(@pool), :class => 'button pill')
+    %h2= t('provider_selection.show.edit_strategy', :name => 'Stict Order')
+  .content
+    .priority-group
+
+      - @priority_groups.each do |priority_group|
+        .provider
+          %header
+            %h3.name
+              %p= priority_group.name
+
+            .score
+              != "(#{ProviderPriorityGroup.human_attribute_name(:score)}: #{priority_group.score})"
+
+            .button-group
+              = link_to(t('edit'), edit_pool_provider_selection_provider_priority_group_path(priority_group.pool, priority_group), :class => "button pill")
+              = link_to(t('delete'), pool_provider_selection_provider_priority_group_path(priority_group.pool, priority_group), :method => :delete, :confirm => t('provider_priority_groups.index.confirm_delete'), :class => "button pill danger")
+
+          .provider-accounts-table
+            = filter_table(provider_accounts_header(:without_checkbox => true, :without_alert => true), priority_group.all_provider_accounts, {:without_form => true}) do |account|
+              %tr{:class => cycle('nostripe','stripe')}
+                %td= link_to account.name, provider_provider_account_path(account.provider, account)
+                %td= account.credentials_hash['username']
+                %td= account.provider.name
+                %td= account.provider.provider_type.name
+                %td= account.priority
+                %td{:class => 'center'}= number_to_percentage account.quota.percentage_used, :precision => 0
+                %td{:class => 'center'}= account.quota.maximum_running_instances or t('provider_accounts.properties.unlimited')
diff --git a/src/app/views/provider_priority_groups/new.html.haml b/src/app/views/provider_priority_groups/new.html.haml
new file mode 100644
index 0000000..0acdd97
--- /dev/null
+++ b/src/app/views/provider_priority_groups/new.html.haml
@@ -0,0 +1,15 @@
+= render :partial => 'layouts/admin_nav'
+
+%header.page-header
+  .obj_actions
+    .return_to
+      = t(:return_to)
+      = link_to t('provider_priority_groups.new.back', :pool => @pool.name), pool_provider_selection_provider_priority_groups_path(@pool)
+  %h1.no-icon= t('provider_priority_groups.new.title')
+
+%section.content-section
+  .content
+    = form_for @priority_group, :url => pool_provider_selection_provider_priority_groups_path(@pool) do |form|
+      = render :partial => 'form', :locals => { :form => form }
+      %fieldset.options
+        = form.submit(t('provider_priority_groups.new.create'), :class => 'submit button pill')
\ No newline at end of file
-- 
1.7.10.4




More information about the aeolus-devel mailing list