From: Jozef Zigmund <[email protected]>

---
 src/app/controllers/admin/providers_controller.rb  |  113 ++++++++++++++++++++
 src/app/views/admin/providers/_form.haml           |   14 +++
 src/app/views/admin/providers/_list.haml           |   19 ++++
 src/app/views/admin/providers/_properties.haml     |    4 +
 src/app/views/admin/providers/edit.haml            |    7 ++
 src/app/views/admin/providers/index.haml           |    3 +-
 src/app/views/admin/providers/new.haml             |    3 +
 src/app/views/admin/providers/show.haml            |    5 +
 src/config/routes.rb                               |    3 +-
 9 files changed, 169 insertions(+), 2 deletions(-)
 create mode 100644 src/app/views/admin/providers/_form.haml
 create mode 100644 src/app/views/admin/providers/_history.haml
 create mode 100644 src/app/views/admin/providers/_hw_profiles.haml
 create mode 100644 src/app/views/admin/providers/_list.haml
 create mode 100644 src/app/views/admin/providers/_permissions.haml
 create mode 100644 src/app/views/admin/providers/_properties.haml
 create mode 100644 src/app/views/admin/providers/_provider_accounts.haml
 create mode 100644 src/app/views/admin/providers/_realms.haml
 create mode 100644 src/app/views/admin/providers/_services.haml
 create mode 100644 src/app/views/admin/providers/edit.haml
 create mode 100644 src/app/views/admin/providers/new.haml
 create mode 100644 src/app/views/admin/providers/show.haml

diff --git a/src/app/controllers/admin/providers_controller.rb 
b/src/app/controllers/admin/providers_controller.rb
index 80a7f28..1836061 100644
--- a/src/app/controllers/admin/providers_controller.rb
+++ b/src/app/controllers/admin/providers_controller.rb
@@ -1,6 +1,119 @@
 class Admin::ProvidersController < ApplicationController
   before_filter :require_user
+  before_filter :load_providers, :only => [:index, :show]
+
+require 'ruby-debug'
 
   def index
   end
+
+  def new
+    require_privilege(Privilege::PROVIDER_MODIFY)
+    @provider = Provider.new
+    kick_condor
+  end
+
+  def edit
+    @provider = Provider.find_by_id(params[:id])
+    require_privilege(Privilege::PROVIDER_MODIFY, @provider)
+  end
+
+  def show
+    @provider = Provider.find(params[:id])
+    @url_params = params.clone
+    @tab_captions = ['Properties', 'HW Profiles', 'Realms', 'Provider 
Accounts', 'Services','History','Permissions']
+    @details_tab = params[:details_tab].blank? ? 'properties' : 
params[:details_tab]
+    respond_to do |format|
+      format.js do
+        if @url_params.delete :details_pane
+          render :partial => 'layouts/details_pane' and return
+        end
+        render :partial => @details_tab and return
+      end
+      format.html { render :action => 'show'}
+    end
+  end
+
+  def create
+    require_privilege(Privilege::PROVIDER_MODIFY)
+    @provider = Provider.new(params[:provider])
+    if params[:test_connection]
+      test_connection(@provider)
+      render :action => 'new'
+    else
+      @provider.set_cloud_type!
+      if @provider.save && @provider.populate_hardware_profiles
+        flash[:notice] = "Provider added."
+        redirect_to admin_providers_path
+      else
+        flash[:notice] = "Cannot add the provider."
+        render :action => "new"
+      end
+      kick_condor
+    end
+  end
+
+  def update
+   require_privilege(Privilege::PROVIDER_MODIFY)
+   @provider = Provider.find_by_id(params[:id])
+   previous_cloud_type = @provider.cloud_type
+   @provider.update_attributes(params[:provider])
+   if params[:test_connection]
+     test_connection(@provider)
+     render :action => 'edit'
+   else
+    @provider.set_cloud_type!
+     if previous_cloud_type != @provider.cloud_type
+      @provider.errors.add :url, "points to a different provider"
+    end
+
+     if @provider.errors.empty? and @provider.save
+       flash[:notice] = "Provider updated."
+       redirect_to admin_providers_path
+     else
+       flash[:notice] = "Cannot update the provider."
+       render :action => 'edit'
+     end
+     kick_condor
+   end
+  end
+
+  def multi_destroy
+    #debugger
+    Provider.destroy(params[:provider_selected])
+    redirect_to admin_providers_url
+  end
+
+  def test_connection(provider)
+    #...@provider = Provider.find_by_id(params[:id])
+    #if @provider.nil?
+    #  @provider = Provider.new(params[:provider])
+    #else
+    #  @provider.attributes = params[:provider]
+    #end
+    @provider.errors.clear
+    if @provider.connect
+      flash[:notice] = "Successfuly Connected to Provider"
+    else
+      flash[:notice] = "Failed to Connect to Provider"
+      @provider.errors.add :url
+    end
+
+    #if ['new', 'edit'].include? params[:a]
+    #  action = params[:a]
+    #end
+
+    #render :action => (action || 'new')
+  end
+
+
+  protected
+
+    def load_providers
+      @header = [{ :name => "Provider name", :sort_attr => :name },
+                 { :name => "Provider URL", :sort_attr => :name }
+      ]
+      @providers = Provider.list_for_user(@current_user, 
Privilege::PROVIDER_VIEW)
+      @url_params = params.clone
+    end
 end
diff --git a/src/app/views/admin/providers/_form.haml 
b/src/app/views/admin/providers/_form.haml
new file mode 100644
index 0000000..fe8c9ca
--- /dev/null
+++ b/src/app/views/admin/providers/_form.haml
@@ -0,0 +1,14 @@
+= form.error_message_on :name, 'Name'
+= form.error_message_on :url, 'URL'
+%fieldset.clear
+  = form.label :name,'Provider name :'
+  = form.text_field :name, :title => 'provider_name', :value => 
@provider.name, :class => "clear grid_4 alpha"
+%fieldset.clear
+  = form.label :url, 'Provider URL :'
+  = form.text_field :url, :title => 'provider_url', :value => @provider.url, 
:class => "grid_5"
+  (
+  %button.linkbutton.nospace{ :type => 'submit', :value => 
t('.test_connection'), :name => 'test_connection', :id => 'test_connection' }
+    Test connection
+  )
+  %fieldset.clear
+    = form.submit "Save",  :class => "submit formbutton"
diff --git a/src/app/views/admin/providers/_history.haml 
b/src/app/views/admin/providers/_history.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/_hw_profiles.haml 
b/src/app/views/admin/providers/_hw_profiles.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/_list.haml 
b/src/app/views/admin/providers/_list.haml
new file mode 100644
index 0000000..0735340
--- /dev/null
+++ b/src/app/views/admin/providers/_list.haml
@@ -0,0 +1,19 @@
+- form_tag do
+  = link_to "Create", new_admin_provider_url, :class => "button"
+  = restful_submit_tag "Delete", 'destroy', 
multi_destroy_admin_providers_path, 'DELETE', :id => 'delete_button'
+
+  %p
+    Select:&nbsp;
+    = link_to "All", @url_params.merge(:select => 'all')
+    %span> ,&nbsp;
+    = link_to "None", @url_params.merge(:select => 'none')
+
+  %table#providers_table
+    = sortable_table_header @header
+    [email protected] do |provider|
+      %tr
+        %td
+          - selected = @url_params[:select] == 'all'
+          %input{:name => "provider_selected[]", :type => "checkbox", :value 
=> provider.id, :id => "provider_checkbox_#{provider.id}" }
+          = link_to provider.name, admin_provider_path(provider)
+        %td= provider.url
diff --git a/src/app/views/admin/providers/_permissions.haml 
b/src/app/views/admin/providers/_permissions.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/_properties.haml 
b/src/app/views/admin/providers/_properties.haml
new file mode 100644
index 0000000..163401e
--- /dev/null
+++ b/src/app/views/admin/providers/_properties.haml
@@ -0,0 +1,4 @@
+%h3
+  Properties for
+  = @provider.name
+= link_to "Edit", edit_admin_provider_path(@provider), {:class => 'button'}
diff --git a/src/app/views/admin/providers/_provider_accounts.haml 
b/src/app/views/admin/providers/_provider_accounts.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/_realms.haml 
b/src/app/views/admin/providers/_realms.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/_services.haml 
b/src/app/views/admin/providers/_services.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/admin/providers/edit.haml 
b/src/app/views/admin/providers/edit.haml
new file mode 100644
index 0000000..66864e9
--- /dev/null
+++ b/src/app/views/admin/providers/edit.haml
@@ -0,0 +1,7 @@
+%h3
+  Editing
+  = @provider.name
+  Provider
+
+-form_for @provider, :url => admin_provider_path(@provider), :html => { 
:method => :put } do |f|
+  = render :partial => 'form', :locals => { :form => f, :cancel_path => 
admin_providers_path }
diff --git a/src/app/views/admin/providers/index.haml 
b/src/app/views/admin/providers/index.haml
index 589bac8..62ccbc6 100644
--- a/src/app/views/admin/providers/index.haml
+++ b/src/app/views/admin/providers/index.haml
@@ -1 +1,2 @@
-admin/providers/index.haml
+- content_for :list do
+  = render :partial => 'list'
diff --git a/src/app/views/admin/providers/new.haml 
b/src/app/views/admin/providers/new.haml
new file mode 100644
index 0000000..516fdb3
--- /dev/null
+++ b/src/app/views/admin/providers/new.haml
@@ -0,0 +1,3 @@
+%h2 Create a new Provider
+- form_for @provider, :url => admin_providers_path do |f|
+  = render :partial => "form", :locals => { :form => f, :cancel_path => 
admin_providers_path }
diff --git a/src/app/views/admin/providers/show.haml 
b/src/app/views/admin/providers/show.haml
new file mode 100644
index 0000000..0c36221
--- /dev/null
+++ b/src/app/views/admin/providers/show.haml
@@ -0,0 +1,5 @@
+- content_for 'list' do
+  = render :partial => 'list'
+
+- content_for 'details' do
+  = render :partial => 'layouts/details_pane'
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 99af504..2a50133 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -44,7 +44,8 @@ ActionController::Routing::Routes.draw do |map|
   map.connect '/set_layout', :controller => 'application', :action => 
'set_layout'
 
   map.namespace 'admin' do |r|
-    r.resources :hardware_profiles, :pool_families, :providers, 
:provider_accounts, :realms, :roles, :settings
+    r.resources :hardware_profiles, :pool_families, :provider_accounts, 
:realms, :roles, :settings
+    r.resources :providers, :collection => { :multi_destroy => :delete }
     r.resources :users, :collection => { :multi_destroy => :delete }
   end
 
-- 
1.7.2.3

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

Reply via email to