From: Jan Provaznik <[email protected]>

---
 src/app/controllers/image_descriptor_controller.rb |  117 --------------------
 src/app/controllers/templates_controller.rb        |  116 +++++++++++++++++++
 src/app/helpers/image_descriptor_helper.rb         |    2 -
 src/app/views/dashboard/summary.haml               |    2 +-
 src/app/views/image_descriptor/_basics.haml        |   16 ---
 src/app/views/image_descriptor/_nav.haml           |   15 ---
 src/app/views/image_descriptor/_targets.haml       |   18 ---
 src/app/views/image_descriptor/new.haml            |   22 ----
 .../image_descriptor/repository_packages.haml      |    4 -
 .../repository_packages_by_group.haml              |    5 -
 src/app/views/image_descriptor/services.haml       |   37 ------
 src/app/views/image_descriptor/software.haml       |   78 -------------
 src/app/views/image_descriptor/summary.haml        |   64 -----------
 src/app/views/image_descriptor/targets.haml        |    1 -
 src/app/views/templates/_basics.haml               |   16 +++
 src/app/views/templates/_nav.haml                  |   15 +++
 src/app/views/templates/_targets.haml              |   18 +++
 src/app/views/templates/new.haml                   |   22 ++++
 src/app/views/templates/repository_packages.haml   |    4 +
 .../templates/repository_packages_by_group.haml    |    5 +
 src/app/views/templates/services.haml              |   37 ++++++
 src/app/views/templates/software.haml              |   78 +++++++++++++
 src/app/views/templates/summary.haml               |   64 +++++++++++
 src/app/views/templates/targets.haml               |    1 +
 24 files changed, 377 insertions(+), 380 deletions(-)
 delete mode 100644 src/app/helpers/image_descriptor_helper.rb
 delete mode 100644 src/app/views/image_descriptor/_basics.haml
 delete mode 100644 src/app/views/image_descriptor/_nav.haml
 delete mode 100644 src/app/views/image_descriptor/_targets.haml
 delete mode 100644 src/app/views/image_descriptor/new.haml
 delete mode 100644 src/app/views/image_descriptor/repository_packages.haml
 delete mode 100644 
src/app/views/image_descriptor/repository_packages_by_group.haml
 delete mode 100644 src/app/views/image_descriptor/services.haml
 delete mode 100644 src/app/views/image_descriptor/software.haml
 delete mode 100644 src/app/views/image_descriptor/summary.haml
 delete mode 100644 src/app/views/image_descriptor/targets.haml
 create mode 100644 src/app/views/templates/_basics.haml
 create mode 100644 src/app/views/templates/_nav.haml
 create mode 100644 src/app/views/templates/_targets.haml
 create mode 100644 src/app/views/templates/new.haml
 create mode 100644 src/app/views/templates/repository_packages.haml
 create mode 100644 src/app/views/templates/repository_packages_by_group.haml
 create mode 100644 src/app/views/templates/services.haml
 create mode 100644 src/app/views/templates/software.haml
 create mode 100644 src/app/views/templates/summary.haml
 create mode 100644 src/app/views/templates/targets.haml

diff --git a/src/app/controllers/image_descriptor_controller.rb 
b/src/app/controllers/image_descriptor_controller.rb
index d2e37d8..c555547 100644
--- a/src/app/controllers/image_descriptor_controller.rb
+++ b/src/app/controllers/image_descriptor_controller.rb
@@ -1,119 +1,2 @@
 class ImageDescriptorController < ApplicationController
-  layout :layout
-  before_filter :require_user, :require_admin
-
-  def layout
-    return "aggregator" unless ajax?
-  end
-
-  def ajax?
-    return params[:ajax] == "true"
-  end
-
-  def new
-    if params[:cancel]
-      redirect_to :controller => "dashboard", :action => 'index'
-    else
-      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
-      @image_descriptor.update_xml_attributes!(params[:xml] || {})
-    end
-  end
-
-  def services
-    if params[:cancel]
-      redirect_to :controller => "dashboard", :action => 'index'
-    else
-      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
-      @image_descriptor.update_xml_attributes!(params[:xml] || {})
-    end
-  end
-
-  def software
-    if params[:cancel]
-      redirect_to :controller => "dashboard", :action => 'index'
-    else
-      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
-      @image_descriptor.update_xml_attributes!(params[:xml] || {})
-      @repositories = RepositoryManager.new.repositories
-      if params[:back]
-        redirect_to :action => 'new', :id => params[:id]
-        return
-      end
-    end
-  end
-
-  def summary
-    if params[:cancel]
-      redirect_to :controller => "dashboard", :action => 'index'
-    else
-      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
-      @image_descriptor.update_xml_attributes!(params[:xml] || {})
-      @image_descriptor.complete = true
-      @image_descriptor.save!
-      @all_targets = ImageDescriptorTarget.available_targets
-      if params[:back]
-        redirect_to :action => 'services', :id => params[:id]
-        return
-      end
-    end
-  end
-
-  def build
-    if params[:cancel] or params[:done]
-      redirect_to :controller => "dashboard", :action => 'index'
-    elsif params[:back]
-      redirect_to :action => 'software', :id => params[:id]
-    else
-      @all_targets = ImageDescriptorTarget.available_targets
-      if params[:targets]
-        params[:targets].each do |target|
-          ImageDescriptorTarget.new_if_not_exists(:name => target, 
:image_descriptor_id => params[:id], :status => 
ImageDescriptorTarget::STATE_QUEUED)
-        end
-      end
-      redirect_to :action => 'summary', :id => params[:id]
-    end
-  end
-
-  def targets
-    @image_descriptor = ImageDescriptor.find(params[:id])
-    @all_targets = ImageDescriptorTarget.available_targets
-  end
-
-  def selected_packages
-    data = ImageDescriptor.find(params[:id]).xml.packages
-  end
-
-  def repository_packages
-    @packages = []
-    rmanager = RepositoryManager.new
-    rmanager.repositories.keys.each do |repid|
-      next if params[:repository] and params[:repository] != 'all' and repid 
!= params[:repository]
-      rep = rmanager.get_repository(repid)
-      @packages += rep.get_packages
-    end
-  end
-
-  def repository_packages_by_group
-    @packages = {}
-    rmanager = RepositoryManager.new
-    rmanager.repositories.keys.each do |repid|
-      next if params[:repository] and params[:repository] != 'all' and repid 
!= params[:repository]
-      rep = rmanager.get_repository(repid)
-      rep.get_packages_by_group.each do |group, pkgs|
-        @packages[group] ||= []
-        @packages[group] += pkgs
-      end
-    end
-  end
-
-  private
-
-  # FIXME - this is temporary solution, replace with
-  # concrete permission checks in actions
-  def require_admin
-    unless @current_user.permissions.collect { |p| p.role }.find { |r| r.name 
== "Administrator" }
-      raise PermissionError.new(
-               'You have insufficient privileges to perform action.')
-    end
-  end
 end
diff --git a/src/app/controllers/templates_controller.rb 
b/src/app/controllers/templates_controller.rb
index 9c53be5..8916d9e 100644
--- a/src/app/controllers/templates_controller.rb
+++ b/src/app/controllers/templates_controller.rb
@@ -20,5 +20,121 @@
 # Likewise, all the methods added will be available for all controllers.
 
 class TemplatesController < ApplicationController
+  layout :layout
+  before_filter :require_user, :require_admin
 
+  def layout
+    return "aggregator" unless ajax?
+  end
+
+  def ajax?
+    return params[:ajax] == "true"
+  end
+
+  def new
+    if params[:cancel]
+      redirect_to :controller => "dashboard", :action => 'index'
+    else
+      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
+      @image_descriptor.update_xml_attributes!(params[:xml] || {})
+    end
+  end
+
+  def services
+    if params[:cancel]
+      redirect_to :controller => "dashboard", :action => 'index'
+    else
+      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
+      @image_descriptor.update_xml_attributes!(params[:xml] || {})
+    end
+  end
+
+  def software
+    if params[:cancel]
+      redirect_to :controller => "dashboard", :action => 'index'
+    else
+      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
+      @image_descriptor.update_xml_attributes!(params[:xml] || {})
+      @repositories = RepositoryManager.new.repositories
+      if params[:back]
+        redirect_to :action => 'new', :id => params[:id]
+        return
+      end
+    end
+  end
+
+  def summary
+    if params[:cancel]
+      redirect_to :controller => "dashboard", :action => 'index'
+    else
+      @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) : 
ImageDescriptor.new
+      @image_descriptor.update_xml_attributes!(params[:xml] || {})
+      @image_descriptor.complete = true
+      @image_descriptor.save!
+      @all_targets = ImageDescriptorTarget.available_targets
+      if params[:back]
+        redirect_to :action => 'services', :id => params[:id]
+        return
+      end
+    end
+  end
+
+  def build
+    if params[:cancel] or params[:done]
+      redirect_to :controller => "dashboard", :action => 'index'
+    elsif params[:back]
+      redirect_to :action => 'software', :id => params[:id]
+    else
+      @all_targets = ImageDescriptorTarget.available_targets
+      if params[:targets]
+        params[:targets].each do |target|
+          ImageDescriptorTarget.new_if_not_exists(:name => target, 
:image_descriptor_id => params[:id], :status => 
ImageDescriptorTarget::STATE_QUEUED)
+        end
+      end
+      redirect_to :action => 'summary', :id => params[:id]
+    end
+  end
+
+  def targets
+    @image_descriptor = ImageDescriptor.find(params[:id])
+    @all_targets = ImageDescriptorTarget.available_targets
+  end
+
+  def selected_packages
+    data = ImageDescriptor.find(params[:id]).xml.packages
+  end
+
+  def repository_packages
+    @packages = []
+    rmanager = RepositoryManager.new
+    rmanager.repositories.keys.each do |repid|
+      next if params[:repository] and params[:repository] != 'all' and repid 
!= params[:repository]
+      rep = rmanager.get_repository(repid)
+      @packages += rep.get_packages
+    end
+  end
+
+  def repository_packages_by_group
+    @packages = {}
+    rmanager = RepositoryManager.new
+    rmanager.repositories.keys.each do |repid|
+      next if params[:repository] and params[:repository] != 'all' and repid 
!= params[:repository]
+      rep = rmanager.get_repository(repid)
+      rep.get_packages_by_group.each do |group, pkgs|
+        @packages[group] ||= []
+        @packages[group] += pkgs
+      end
+    end
+  end
+
+  private
+
+  # FIXME - this is temporary solution, replace with
+  # concrete permission checks in actions
+  def require_admin
+    unless @current_user.permissions.collect { |p| p.role }.find { |r| r.name 
== "Administrator" }
+      raise PermissionError.new(
+               'You have insufficient privileges to perform action.')
+    end
+  end
 end
diff --git a/src/app/helpers/image_descriptor_helper.rb 
b/src/app/helpers/image_descriptor_helper.rb
deleted file mode 100644
index fc89001..0000000
--- a/src/app/helpers/image_descriptor_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module ImageDescriptorHelper
-end
diff --git a/src/app/views/dashboard/summary.haml 
b/src/app/views/dashboard/summary.haml
index ccbe9aa..44bff64 100644
--- a/src/app/views/dashboard/summary.haml
+++ b/src/app/views/dashboard/summary.haml
@@ -35,7 +35,7 @@
         Add a Provider Account
       %a{:href => url_for(:controller => "provider", :action => "new")}
         Add a Provider
-      %a{:href => url_for(:controller => "image_descriptor", :action => "new")}
+      %a{:href => url_for(:controller => "templates", :action => "new")}
         Create a Template
       %a{:href => url_for(:controller => "users", :action => "new")}
         Create a User
diff --git a/src/app/views/image_descriptor/_basics.haml 
b/src/app/views/image_descriptor/_basics.haml
deleted file mode 100644
index b89970d..0000000
--- a/src/app/views/image_descriptor/_basics.haml
+++ /dev/null
@@ -1,16 +0,0 @@
-%ul
-  %li
-    %label Name
-    = text_field_tag 'xml[name]', @image_descriptor.xml.name
-    %span Provide a unique name for template master. Users will see this name 
when they choose this image to instantiate.
-  %li
-    %label Platform
-    = select_tag("xml[platform]", @image_descriptor.xml.platforms.map{|repid, 
rep| "<option value=\"#{repid}\" selected=\"#{repid == 
@image_descriptor.xml.platform ? 'selected' : ''}\">#{rep['name']}</option>"})
-    %span Choose the software operating system.
-  %li
-    %label Description
-    = text_area_tag("xml[description]", @image_descriptor.xml.description, 
:rows => 4)
-    %span Provide a description of your template master. Be descriptive to 
help users to identify the images created with this master.
-.submit
-  = submit_tag "Cancel"
-  = submit_tag "Next"
diff --git a/src/app/views/image_descriptor/_nav.haml 
b/src/app/views/image_descriptor/_nav.haml
deleted file mode 100644
index 35cfd02..0000000
--- a/src/app/views/image_descriptor/_nav.haml
+++ /dev/null
@@ -1,15 +0,0 @@
-#image_descriptor_nav
-  %h2 Create a New Template Master
-  %ul{:class => 'nav'}
-    %li{:class => controller.action_name == 'new' ? 'selected' : nil}
-      %h4 BASICS
-      %p Basic RHEL LAMP
-    %li{:class => controller.action_name == 'services' ? 'selected' : nil}
-      %h4 SERVICES
-      %p Add services
-    %li{:class => controller.action_name == 'software' ? 'selected' : nil}
-      %h4 SOFTWARE
-      %p Add software
-    %li{:class => controller.action_name == 'summary' ? 'selected' : nil}
-      %h4 SUMMARY
-      %p Create images
diff --git a/src/app/views/image_descriptor/_targets.haml 
b/src/app/views/image_descriptor/_targets.haml
deleted file mode 100644
index 77406f7..0000000
--- a/src/app/views/image_descriptor/_targets.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-#image_target_list{:class => 'target_list'}
-  - if @image_descriptor.image_descriptor_targets.empty?
-    .empty No images have been created yet.
-  -else
-    %ul
-      - @image_descriptor.image_descriptor_targets.each do |target|
-        %li
-          %span{:class => 'actions'}
-            &nbsp;
-            - if ImageDescriptorTarget::ACTIVE_STATES.include?(target.status)
-              = link_to 'Cancel', {:controller => 'image_descriptor_target', 
:action => 'cancel', :id => target.id, :descriptor_id => @image_descriptor.id}
-          %span{:class => 'status'}
-            = target.status
-          = @all_targets[target.name]['name']
-          %p
-            = target.created_at
-          //%span{:style => 'float:right'}
-          //  Cancel
diff --git a/src/app/views/image_descriptor/new.haml 
b/src/app/views/image_descriptor/new.haml
deleted file mode 100644
index 5a1adda..0000000
--- a/src/app/views/image_descriptor/new.haml
+++ /dev/null
@@ -1,22 +0,0 @@
-= render :partial => "nav"
-
-#image_descriptor_form{:class => 'dcloud_form'}
-  = error_messages_for 'image_descriptor'
-
-  - form_for @image_descriptor, :url => {:action => 'services', :id => 
@image_descriptor.id} do
-    %ul
-      %li
-        %label Name
-        = text_field_tag 'xml[name]', @image_descriptor.xml.name
-        %span Provide a unique name for template master. Users will see this 
name when they choose this image to instantiate.
-      %li
-        %label Platform
-        = select_tag("xml[platform]", 
@image_descriptor.xml.platforms.map{|repid, rep| "<option value=\"#{repid}\" 
selected=\"#{repid == @image_descriptor.xml.platform ? 'selected' : 
''}\">#{rep['name']}</option>"})
-        %span Choose the software operating system.
-      %li
-        %label Description
-        = text_area_tag("xml[description]", @image_descriptor.xml.description, 
:rows => 4)
-        %span Provide a description of your template master. Be descriptive to 
help users to identify the images created with this master.
-    .submit
-      = submit_tag "Cancel", :name => "cancel"
-      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/image_descriptor/repository_packages.haml 
b/src/app/views/image_descriptor/repository_packages.haml
deleted file mode 100644
index 9414b85..0000000
--- a/src/app/views/image_descriptor/repository_packages.haml
+++ /dev/null
@@ -1,4 +0,0 @@
-%ul
-  - @packages.each do |pkg|
-    %li
-      = "#{pkg[:name]}<span class='select' onclick=\"select_group({group: 
'#{pkg[:group]}', pkgs: ['#{pkg[:name]}']})\">Select</span>"
diff --git a/src/app/views/image_descriptor/repository_packages_by_group.haml 
b/src/app/views/image_descriptor/repository_packages_by_group.haml
deleted file mode 100644
index 2f2b704..0000000
--- a/src/app/views/image_descriptor/repository_packages_by_group.haml
+++ /dev/null
@@ -1,5 +0,0 @@
-%ul
-  - @packages.keys.map {|group| group.to_s}.sort.each do |group|
-    %li
-      - pkgs = @packages[group].map {|p| p[:name]}.join("','")
-      = "#{group}<span class='select' onclick=\"select_group({group: 
'#{group}', pkgs: ['#{pkgs}']})\">Select</span>"
diff --git a/src/app/views/image_descriptor/services.haml 
b/src/app/views/image_descriptor/services.haml
deleted file mode 100644
index ac169b7..0000000
--- a/src/app/views/image_descriptor/services.haml
+++ /dev/null
@@ -1,37 +0,0 @@
-= render :partial => "nav"
-
-#image_descriptor_form{:class => 'dcloud_form'}
-  = error_messages_for 'image_descriptor'
-
-  - form_for @image_descriptor, :url => {:action => 'software', :id => 
@image_descriptor.id} do
-    = hidden_field :image_descriptor, :id
-    %ul
-      %li
-        %label Storage
-        = check_box_tag 'xml[services][amazon3_storage]', '1', 
@image_descriptor.xml.services.include?('amazon3_storage')
-        = label_tag 'xml[services][amazon3_storage]', 'Enable Amazon S3 
storage', :class => "plain"
-        %span Provides cloud aware table storage for both user-data and 
guest-images and snapshots compatible with Amazon S3, for any (internal &amp; 
external)cloud deployment
-      %li
-        %label Inter-node Messaging
-        = check_box_tag 'xml[services][inter_node_messaging]', '1', 
@image_descriptor.xml.services.include?('inter_node_messaging')
-        = label_tag 'xml[services][inter_node_messaging]', 'Enable inter-node 
messaging', :class => "plain"
-        %span Provides cloud aware messaging to facilitate 
instance-to-instance and instance-to-external communication compatible with 
Amazon SQS, for any (internal &amp; external)cloud deployment
-      %li
-        %label Availbility
-        = check_box_tag 'xml[services][availbility]', '1', 
@image_descriptor.xml.services.include?('availbility')
-        = label_tag 'xml[services][availbility]', 'Enable high availbility 
services', :class => "plain"
-        %span Provides REST API's that allow applications and administrators 
to inspect instances and know the active state and configuration. Choose high 
availability to actively maintain and manage application availability when run 
in cloud
-      %li
-        %label JBoss
-        = check_box_tag 'xml[services][jboss]', '1', 
@image_descriptor.xml.services.include?('jboss')
-        = label_tag 'xml[services][jboss]', 'Enable JBoss infrastructure', 
:class => "plain"
-        %span Provides cloud ready JBoss infrastructure to be run in public 
and internal clouds
-      %li
-        %label Cooling Tower
-        = check_box_tag 'xml[services][cooling_tower]', '1', 
@image_descriptor.xml.services.include?('cooling_tower')
-        = label_tag 'xml[services][cooling_tower]', 'Enable Cooling Tower', 
:class => "plain"
-        %span Provides multi-tenant, lightweight container for managing many 
cloud ready PaaS services inside a single instance
-    .submit
-      = submit_tag "Cancel", :name => "cancel"
-      = submit_tag "Back", :name => "back"
-      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/image_descriptor/software.haml 
b/src/app/views/image_descriptor/software.haml
deleted file mode 100644
index 9821af3..0000000
--- a/src/app/views/image_descriptor/software.haml
+++ /dev/null
@@ -1,78 +0,0 @@
-- content_for :scripts do
-  :javascript
-    $(document).ready(function() {
-      $("#dashboard-tabs > ul > li > a").each(function(index) {
-        var link = $(this).attr("href") + "?ajax=true";
-        $(this).attr("href", link);
-      });
-      $("#dashboard-tabs").tabs({spinner: "Loading..."});
-
-      // when JS is enabled, hide the Dashboard content -- it'll be loaded
-      // by jquery UI tab using ajax
-      $("#dashboard-content").hide();
-      #...@image_descriptor.xml.packages.map {|group, pkgs| 
"select_group({group: '#{group}', pkgs: ['#{pkgs.map {|p| 
p[:name]}.join("','")}']});"}.join("\n")}
-    });
-    function remove_group(ev) {
-      $(ev.target).parent().remove();
-    };
-    function get_repository(ev) {
-      var rep = $(ev.target).val();
-      $("#dashboard-tabs > ul > li > a").each(function(index) {
-        var link = $(this).data('load.tabs');
-        if (link.search(/repository=[^$&]*/) == -1) {
-          link = link + "&repository=" + rep;
-        } else {
-          link = link.replace(/repository=[^$&]*/, "repository="+rep);
-        }
-        $("#dashboard-tabs").tabs('url', index, link);
-      });
-      $("#dashboard-tabs").tabs('load', $("#dashboard-tabs").tabs('option', 
'selected'));
-    };
-    function select_package(group, pkgname, parent) {
-      if (!parent) parent = $("#selected_packages");
-      if (parent.find(".pkgname").filter(function() {return $(this).text() == 
pkgname}).length == 0) {
-        var node = $("<li><input type=checkbox name='xml[packages][]' value='" 
+ group + '#' + pkgname + "' checked=true><span class='pkgname'>" + pkgname + 
"</span></li>").appendTo(parent);
-      }
-    };
-    function add_group(name) {
-      var group = $("<li><span class='group'>" + name + "</span><span 
class='select' 
onclick='remove_group(event)'>Remove</span><ul></ul></li>").appendTo("#selected_packages");
-      return group.find("ul");
-    };
-    function select_group(opts) {
-      var groups = $("#selected_packages li .group").filter(function() {return 
$(this).text() == opts.group});
-      //FIXME: if group exists, we abort adding group again, merging is not 
supported yet
-      if (groups.length > 0) return;
-      var group = add_group(opts.group);
-      for (var i = 0; i < opts.pkgs.length; i++) {
-        select_package(opts.group, opts.pkgs[i], group);
-      }
-    };
-
-- menu = [ { :text => "Groups", :action => "repository_packages_by_group" }, |
-  { :text => "Packages", :action => "repository_packages" }, ] |
-
-= render :partial => "nav"
-
-#image_descriptor_form{:class => 'dcloud_form'}
-  = error_messages_for 'image_descriptor'
-
-  - form_for @image_descriptor, :url => {:action => 'summary', :id => 
@image_descriptor.id} do
-    .pkglist_wrapper
-      .pkglist
-        #dashboard-tabs{ :class => "ui-tabs ui-widget ui-widget-content 
ui-corner-all" }
-          %ul{ :class => "ui-tabs ui-widget ui-widget-content ui-corner-all 
ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header" }
-            - menu.each do |item|
-              - selection_style = "ui-tabs-selected ui-state-active" if 
item[:action] == controller.action_name
-              %li{ :class => "#{selection_style} ui-state-default 
ui-corner-top", :style => 'clear: none' }
-                = "<a href=\"#{url_for :controller => "image_descriptor", 
:action => item[:action] }\"><span>#{item[:text]}</span></a>"
-            %li{ :class => "select_repository"}
-              = select_tag("repository", ["<option value='all' 
selected='selected'>All</option>"] + @repositories.map{|repid, rep| "<option 
value=\"#{repid}\">#{rep['name']}</option>"}, {:onchange => 
"get_repository(event)"})
-      .pkglist{:style => "margin-left: 30px", :class => "left-pkglist"}
-        %div{:class => "ui-tabs ui-widget ui-widget-content ui-corner-all 
ui-helper-reset ui-helper-clearfix ui-widget-header"}
-          Selected packages
-        %ul{:id => "selected_packages"}
-
-    .submit
-      = submit_tag "Cancel", :name => "cancel"
-      = submit_tag "Back", :name => "back"
-      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/image_descriptor/summary.haml 
b/src/app/views/image_descriptor/summary.haml
deleted file mode 100644
index dd8ff1f..0000000
--- a/src/app/views/image_descriptor/summary.haml
+++ /dev/null
@@ -1,64 +0,0 @@
-- content_for :scripts do
-  :javascript
-    $(document).ready(function() {
-      var refreshId = setInterval(function() {
-        $('#image_target_list').load('#{url_for :controller => 
'image_descriptor', :action => 'targets', :id => @image_descriptor.id, :ajax => 
true}');
-      }, 10000);
-    });
-    function toggle_build_form_visibility(ev) {
-      if ($("#image_build_form").css('display') == 'none') {
-        $("#image_build_form").css('display', 'block');
-        $(ev.target).val('Cancel');
-      } else {
-        $("#image_build_form").css('display', 'none');
-        $(ev.target).val('Build Images');
-      }
-    }
-
-= render :partial => "nav"
-
-#image_descriptor_form{:class => 'dcloud_form'}
-  = error_messages_for 'image_descriptor'
-
-  - form_for @image_descriptor, :url => {:action => 'build', :id => 
@image_descriptor.id} do
-    .summary_panel
-      %ul{:class => 'side_panel'}
-        %li
-          BASICS
-          %label
-            = @image_descriptor.xml.name
-          %label
-            = @image_descriptor.xml.platform
-          %label
-            = @image_descriptor.xml.description
-        %li
-          SERVICES
-          - @image_descriptor.xml.services.each do |service|
-            %label
-              = service
-        //FIXME: software could take realy long space
-        //%li
-        //  SOFTWARE
-
-      %ul{:class => 'main_panel'}
-        .image_build_panel
-          %h3
-            Images
-            %input{:type => 'button', :value => "Build Images", :style => 
'float:right', :onclick => 'toggle_build_form_visibility(event)'}
-          #image_build_form
-            %ul
-              %li
-                %label Image formats
-                %ul
-                  - @all_targets.each do |target_id, target|
-                    %li
-                    = check_box_tag 'targets[]', target_id, false
-                    %span
-                      = target['name']
-            = submit_tag "Build"
-        = render :partial => 'targets'
-
-    .submit
-      = submit_tag "Cancel", :name => "cancel"
-      = submit_tag "Back", :name => "back"
-      = submit_tag "Done", :name => "done"
diff --git a/src/app/views/image_descriptor/targets.haml 
b/src/app/views/image_descriptor/targets.haml
deleted file mode 100644
index b4351d5..0000000
--- a/src/app/views/image_descriptor/targets.haml
+++ /dev/null
@@ -1 +0,0 @@
-= render :partial => 'targets'
diff --git a/src/app/views/templates/_basics.haml 
b/src/app/views/templates/_basics.haml
new file mode 100644
index 0000000..b89970d
--- /dev/null
+++ b/src/app/views/templates/_basics.haml
@@ -0,0 +1,16 @@
+%ul
+  %li
+    %label Name
+    = text_field_tag 'xml[name]', @image_descriptor.xml.name
+    %span Provide a unique name for template master. Users will see this name 
when they choose this image to instantiate.
+  %li
+    %label Platform
+    = select_tag("xml[platform]", @image_descriptor.xml.platforms.map{|repid, 
rep| "<option value=\"#{repid}\" selected=\"#{repid == 
@image_descriptor.xml.platform ? 'selected' : ''}\">#{rep['name']}</option>"})
+    %span Choose the software operating system.
+  %li
+    %label Description
+    = text_area_tag("xml[description]", @image_descriptor.xml.description, 
:rows => 4)
+    %span Provide a description of your template master. Be descriptive to 
help users to identify the images created with this master.
+.submit
+  = submit_tag "Cancel"
+  = submit_tag "Next"
diff --git a/src/app/views/templates/_nav.haml 
b/src/app/views/templates/_nav.haml
new file mode 100644
index 0000000..35cfd02
--- /dev/null
+++ b/src/app/views/templates/_nav.haml
@@ -0,0 +1,15 @@
+#image_descriptor_nav
+  %h2 Create a New Template Master
+  %ul{:class => 'nav'}
+    %li{:class => controller.action_name == 'new' ? 'selected' : nil}
+      %h4 BASICS
+      %p Basic RHEL LAMP
+    %li{:class => controller.action_name == 'services' ? 'selected' : nil}
+      %h4 SERVICES
+      %p Add services
+    %li{:class => controller.action_name == 'software' ? 'selected' : nil}
+      %h4 SOFTWARE
+      %p Add software
+    %li{:class => controller.action_name == 'summary' ? 'selected' : nil}
+      %h4 SUMMARY
+      %p Create images
diff --git a/src/app/views/templates/_targets.haml 
b/src/app/views/templates/_targets.haml
new file mode 100644
index 0000000..77406f7
--- /dev/null
+++ b/src/app/views/templates/_targets.haml
@@ -0,0 +1,18 @@
+#image_target_list{:class => 'target_list'}
+  - if @image_descriptor.image_descriptor_targets.empty?
+    .empty No images have been created yet.
+  -else
+    %ul
+      - @image_descriptor.image_descriptor_targets.each do |target|
+        %li
+          %span{:class => 'actions'}
+            &nbsp;
+            - if ImageDescriptorTarget::ACTIVE_STATES.include?(target.status)
+              = link_to 'Cancel', {:controller => 'image_descriptor_target', 
:action => 'cancel', :id => target.id, :descriptor_id => @image_descriptor.id}
+          %span{:class => 'status'}
+            = target.status
+          = @all_targets[target.name]['name']
+          %p
+            = target.created_at
+          //%span{:style => 'float:right'}
+          //  Cancel
diff --git a/src/app/views/templates/new.haml b/src/app/views/templates/new.haml
new file mode 100644
index 0000000..5a1adda
--- /dev/null
+++ b/src/app/views/templates/new.haml
@@ -0,0 +1,22 @@
+= render :partial => "nav"
+
+#image_descriptor_form{:class => 'dcloud_form'}
+  = error_messages_for 'image_descriptor'
+
+  - form_for @image_descriptor, :url => {:action => 'services', :id => 
@image_descriptor.id} do
+    %ul
+      %li
+        %label Name
+        = text_field_tag 'xml[name]', @image_descriptor.xml.name
+        %span Provide a unique name for template master. Users will see this 
name when they choose this image to instantiate.
+      %li
+        %label Platform
+        = select_tag("xml[platform]", 
@image_descriptor.xml.platforms.map{|repid, rep| "<option value=\"#{repid}\" 
selected=\"#{repid == @image_descriptor.xml.platform ? 'selected' : 
''}\">#{rep['name']}</option>"})
+        %span Choose the software operating system.
+      %li
+        %label Description
+        = text_area_tag("xml[description]", @image_descriptor.xml.description, 
:rows => 4)
+        %span Provide a description of your template master. Be descriptive to 
help users to identify the images created with this master.
+    .submit
+      = submit_tag "Cancel", :name => "cancel"
+      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/templates/repository_packages.haml 
b/src/app/views/templates/repository_packages.haml
new file mode 100644
index 0000000..9414b85
--- /dev/null
+++ b/src/app/views/templates/repository_packages.haml
@@ -0,0 +1,4 @@
+%ul
+  - @packages.each do |pkg|
+    %li
+      = "#{pkg[:name]}<span class='select' onclick=\"select_group({group: 
'#{pkg[:group]}', pkgs: ['#{pkg[:name]}']})\">Select</span>"
diff --git a/src/app/views/templates/repository_packages_by_group.haml 
b/src/app/views/templates/repository_packages_by_group.haml
new file mode 100644
index 0000000..2f2b704
--- /dev/null
+++ b/src/app/views/templates/repository_packages_by_group.haml
@@ -0,0 +1,5 @@
+%ul
+  - @packages.keys.map {|group| group.to_s}.sort.each do |group|
+    %li
+      - pkgs = @packages[group].map {|p| p[:name]}.join("','")
+      = "#{group}<span class='select' onclick=\"select_group({group: 
'#{group}', pkgs: ['#{pkgs}']})\">Select</span>"
diff --git a/src/app/views/templates/services.haml 
b/src/app/views/templates/services.haml
new file mode 100644
index 0000000..ac169b7
--- /dev/null
+++ b/src/app/views/templates/services.haml
@@ -0,0 +1,37 @@
+= render :partial => "nav"
+
+#image_descriptor_form{:class => 'dcloud_form'}
+  = error_messages_for 'image_descriptor'
+
+  - form_for @image_descriptor, :url => {:action => 'software', :id => 
@image_descriptor.id} do
+    = hidden_field :image_descriptor, :id
+    %ul
+      %li
+        %label Storage
+        = check_box_tag 'xml[services][amazon3_storage]', '1', 
@image_descriptor.xml.services.include?('amazon3_storage')
+        = label_tag 'xml[services][amazon3_storage]', 'Enable Amazon S3 
storage', :class => "plain"
+        %span Provides cloud aware table storage for both user-data and 
guest-images and snapshots compatible with Amazon S3, for any (internal &amp; 
external)cloud deployment
+      %li
+        %label Inter-node Messaging
+        = check_box_tag 'xml[services][inter_node_messaging]', '1', 
@image_descriptor.xml.services.include?('inter_node_messaging')
+        = label_tag 'xml[services][inter_node_messaging]', 'Enable inter-node 
messaging', :class => "plain"
+        %span Provides cloud aware messaging to facilitate 
instance-to-instance and instance-to-external communication compatible with 
Amazon SQS, for any (internal &amp; external)cloud deployment
+      %li
+        %label Availbility
+        = check_box_tag 'xml[services][availbility]', '1', 
@image_descriptor.xml.services.include?('availbility')
+        = label_tag 'xml[services][availbility]', 'Enable high availbility 
services', :class => "plain"
+        %span Provides REST API's that allow applications and administrators 
to inspect instances and know the active state and configuration. Choose high 
availability to actively maintain and manage application availability when run 
in cloud
+      %li
+        %label JBoss
+        = check_box_tag 'xml[services][jboss]', '1', 
@image_descriptor.xml.services.include?('jboss')
+        = label_tag 'xml[services][jboss]', 'Enable JBoss infrastructure', 
:class => "plain"
+        %span Provides cloud ready JBoss infrastructure to be run in public 
and internal clouds
+      %li
+        %label Cooling Tower
+        = check_box_tag 'xml[services][cooling_tower]', '1', 
@image_descriptor.xml.services.include?('cooling_tower')
+        = label_tag 'xml[services][cooling_tower]', 'Enable Cooling Tower', 
:class => "plain"
+        %span Provides multi-tenant, lightweight container for managing many 
cloud ready PaaS services inside a single instance
+    .submit
+      = submit_tag "Cancel", :name => "cancel"
+      = submit_tag "Back", :name => "back"
+      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/templates/software.haml 
b/src/app/views/templates/software.haml
new file mode 100644
index 0000000..04e34a3
--- /dev/null
+++ b/src/app/views/templates/software.haml
@@ -0,0 +1,78 @@
+- content_for :scripts do
+  :javascript
+    $(document).ready(function() {
+      $("#dashboard-tabs > ul > li > a").each(function(index) {
+        var link = $(this).attr("href") + "?ajax=true";
+        $(this).attr("href", link);
+      });
+      $("#dashboard-tabs").tabs({spinner: "Loading..."});
+
+      // when JS is enabled, hide the Dashboard content -- it'll be loaded
+      // by jquery UI tab using ajax
+      $("#dashboard-content").hide();
+      #...@image_descriptor.xml.packages.map {|group, pkgs| 
"select_group({group: '#{group}', pkgs: ['#{pkgs.map {|p| 
p[:name]}.join("','")}']});"}.join("\n")}
+    });
+    function remove_group(ev) {
+      $(ev.target).parent().remove();
+    };
+    function get_repository(ev) {
+      var rep = $(ev.target).val();
+      $("#dashboard-tabs > ul > li > a").each(function(index) {
+        var link = $(this).data('load.tabs');
+        if (link.search(/repository=[^$&]*/) == -1) {
+          link = link + "&repository=" + rep;
+        } else {
+          link = link.replace(/repository=[^$&]*/, "repository="+rep);
+        }
+        $("#dashboard-tabs").tabs('url', index, link);
+      });
+      $("#dashboard-tabs").tabs('load', $("#dashboard-tabs").tabs('option', 
'selected'));
+    };
+    function select_package(group, pkgname, parent) {
+      if (!parent) parent = $("#selected_packages");
+      if (parent.find(".pkgname").filter(function() {return $(this).text() == 
pkgname}).length == 0) {
+        var node = $("<li><input type=checkbox name='xml[packages][]' value='" 
+ group + '#' + pkgname + "' checked=true><span class='pkgname'>" + pkgname + 
"</span></li>").appendTo(parent);
+      }
+    };
+    function add_group(name) {
+      var group = $("<li><span class='group'>" + name + "</span><span 
class='select' 
onclick='remove_group(event)'>Remove</span><ul></ul></li>").appendTo("#selected_packages");
+      return group.find("ul");
+    };
+    function select_group(opts) {
+      var groups = $("#selected_packages li .group").filter(function() {return 
$(this).text() == opts.group});
+      //FIXME: if group exists, we abort adding group again, merging is not 
supported yet
+      if (groups.length > 0) return;
+      var group = add_group(opts.group);
+      for (var i = 0; i < opts.pkgs.length; i++) {
+        select_package(opts.group, opts.pkgs[i], group);
+      }
+    };
+
+- menu = [ { :text => "Groups", :action => "repository_packages_by_group" }, |
+  { :text => "Packages", :action => "repository_packages" }, ] |
+
+= render :partial => "nav"
+
+#image_descriptor_form{:class => 'dcloud_form'}
+  = error_messages_for 'image_descriptor'
+
+  - form_for @image_descriptor, :url => {:action => 'summary', :id => 
@image_descriptor.id} do
+    .pkglist_wrapper
+      .pkglist
+        #dashboard-tabs{ :class => "ui-tabs ui-widget ui-widget-content 
ui-corner-all" }
+          %ul{ :class => "ui-tabs ui-widget ui-widget-content ui-corner-all 
ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header" }
+            - menu.each do |item|
+              - selection_style = "ui-tabs-selected ui-state-active" if 
item[:action] == controller.action_name
+              %li{ :class => "#{selection_style} ui-state-default 
ui-corner-top", :style => 'clear: none' }
+                = "<a href=\"#{url_for :controller => "templates", :action => 
item[:action] }\"><span>#{item[:text]}</span></a>"
+            %li{ :class => "select_repository"}
+              = select_tag("repository", ["<option value='all' 
selected='selected'>All</option>"] + @repositories.map{|repid, rep| "<option 
value=\"#{repid}\">#{rep['name']}</option>"}, {:onchange => 
"get_repository(event)"})
+      .pkglist{:style => "margin-left: 30px", :class => "left-pkglist"}
+        %div{:class => "ui-tabs ui-widget ui-widget-content ui-corner-all 
ui-helper-reset ui-helper-clearfix ui-widget-header"}
+          Selected packages
+        %ul{:id => "selected_packages"}
+
+    .submit
+      = submit_tag "Cancel", :name => "cancel"
+      = submit_tag "Back", :name => "back"
+      = submit_tag "Next", :name => "next"
diff --git a/src/app/views/templates/summary.haml 
b/src/app/views/templates/summary.haml
new file mode 100644
index 0000000..faff8e3
--- /dev/null
+++ b/src/app/views/templates/summary.haml
@@ -0,0 +1,64 @@
+- content_for :scripts do
+  :javascript
+    $(document).ready(function() {
+      var refreshId = setInterval(function() {
+        $('#image_target_list').load('#{url_for :controller => 'templates', 
:action => 'targets', :id => @image_descriptor.id, :ajax => true}');
+      }, 10000);
+    });
+    function toggle_build_form_visibility(ev) {
+      if ($("#image_build_form").css('display') == 'none') {
+        $("#image_build_form").css('display', 'block');
+        $(ev.target).val('Cancel');
+      } else {
+        $("#image_build_form").css('display', 'none');
+        $(ev.target).val('Build Images');
+      }
+    }
+
+= render :partial => "nav"
+
+#image_descriptor_form{:class => 'dcloud_form'}
+  = error_messages_for 'image_descriptor'
+
+  - form_for @image_descriptor, :url => {:action => 'build', :id => 
@image_descriptor.id} do
+    .summary_panel
+      %ul{:class => 'side_panel'}
+        %li
+          BASICS
+          %label
+            = @image_descriptor.xml.name
+          %label
+            = @image_descriptor.xml.platform
+          %label
+            = @image_descriptor.xml.description
+        %li
+          SERVICES
+          - @image_descriptor.xml.services.each do |service|
+            %label
+              = service
+        //FIXME: software could take realy long space
+        //%li
+        //  SOFTWARE
+
+      %ul{:class => 'main_panel'}
+        .image_build_panel
+          %h3
+            Images
+            %input{:type => 'button', :value => "Build Images", :style => 
'float:right', :onclick => 'toggle_build_form_visibility(event)'}
+          #image_build_form
+            %ul
+              %li
+                %label Image formats
+                %ul
+                  - @all_targets.each do |target_id, target|
+                    %li
+                    = check_box_tag 'targets[]', target_id, false
+                    %span
+                      = target['name']
+            = submit_tag "Build"
+        = render :partial => 'targets'
+
+    .submit
+      = submit_tag "Cancel", :name => "cancel"
+      = submit_tag "Back", :name => "back"
+      = submit_tag "Done", :name => "done"
diff --git a/src/app/views/templates/targets.haml 
b/src/app/views/templates/targets.haml
new file mode 100644
index 0000000..b4351d5
--- /dev/null
+++ b/src/app/views/templates/targets.haml
@@ -0,0 +1 @@
+= render :partial => 'targets'
-- 
1.7.0.1

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

Reply via email to