From: Jan Provaznik <[email protected]>

---
 src/app/controllers/image_descriptor_controller.rb |   42 +++++++++++++++++++
 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/_services.haml      |   32 ++++++++++++++
 src/app/views/image_descriptor/_software.haml      |   36 ++++++++++++++++
 src/app/views/image_descriptor/_summary.haml       |   16 +++++++
 src/app/views/image_descriptor/new.haml            |    9 ++++
 src/public/stylesheets/components.css              |   44 ++++++++++++++++++++
 .../functional/image_descriptor_controller_test.rb |    8 ++++
 11 files changed, 222 insertions(+), 0 deletions(-)
 create mode 100644 src/app/controllers/image_descriptor_controller.rb
 create mode 100644 src/app/helpers/image_descriptor_helper.rb
 create mode 100644 src/app/views/image_descriptor/_basics.haml
 create mode 100644 src/app/views/image_descriptor/_nav.haml
 create mode 100644 src/app/views/image_descriptor/_services.haml
 create mode 100644 src/app/views/image_descriptor/_software.haml
 create mode 100644 src/app/views/image_descriptor/_summary.haml
 create mode 100644 src/app/views/image_descriptor/new.haml
 create mode 100644 src/test/functional/image_descriptor_controller_test.rb

diff --git a/src/app/controllers/image_descriptor_controller.rb 
b/src/app/controllers/image_descriptor_controller.rb
new file mode 100644
index 0000000..6aa9304
--- /dev/null
+++ b/src/app/controllers/image_descriptor_controller.rb
@@ -0,0 +1,42 @@
+class ImageDescriptorController < ApplicationController
+  before_filter :require_user
+
+  TABS = %w(basics services software summary)
+
+  def new
+    # FIXME: check permission, something like IMAGE_CREATE
+    if params[:commit] == 'Cancel'
+      redirect_to :controller => "image", :action => 'show'
+      return
+    end
+
+    @image_descriptor = params[:image_descriptor] && 
params[:image_descriptor][:id] ? 
ImageDescriptor.find(params[:image_descriptor][:id]) : ImageDescriptor.new
+    @image_descriptor.update_xml_attributes!(params[:xml] || {})
+    #...@repositories = RepositoryManager.new.repositories
+
+    idx = (TABS.index(params[:tab]) || -1) + (params[:commit] == 'Back' ? -1 : 
1)
+    @tab = TABS[idx] || TABS[0]
+  end
+
+  def create
+    if params[:commit] == 'Cancel'
+      redirect_to :controller => "image", :action => 'show'
+      return
+    end
+    redirect_to :action => 'images', :tab => 'show'
+  end
+
+  def 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 repid != params[:repository]
+      rep = rmanager.get_repository(repid)
+      packages += rep.get_packages.map {|p| [p[:name], p[:group], 
p[:description], '']}
+    end
+  end
+end
diff --git a/src/app/helpers/image_descriptor_helper.rb 
b/src/app/helpers/image_descriptor_helper.rb
new file mode 100644
index 0000000..fc89001
--- /dev/null
+++ b/src/app/helpers/image_descriptor_helper.rb
@@ -0,0 +1,2 @@
+module ImageDescriptorHelper
+end
diff --git a/src/app/views/dashboard/summary.haml 
b/src/app/views/dashboard/summary.haml
index 4eeb58b..993cd18 100644
--- a/src/app/views/dashboard/summary.haml
+++ b/src/app/views/dashboard/summary.haml
@@ -38,6 +38,8 @@
       Create a Template
     %a{:href => url_for(:controller => "users", :action => "new")}
       Create a User
+    %a{:href => url_for(:controller => "image_descriptor", :action => "new")}
+      Create a Image
   - else
     %a{:href => url_for(:controller => "", :action => "")}
       Launch Instances
diff --git a/src/app/views/image_descriptor/_basics.haml 
b/src/app/views/image_descriptor/_basics.haml
new file mode 100644
index 0000000..b89970d
--- /dev/null
+++ b/src/app/views/image_descriptor/_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/image_descriptor/_nav.haml 
b/src/app/views/image_descriptor/_nav.haml
new file mode 100644
index 0000000..c923baf
--- /dev/null
+++ b/src/app/views/image_descriptor/_nav.haml
@@ -0,0 +1,15 @@
+#image_descriptor_nav
+  %h2 Create a New Template Master
+  %ul{:class => 'nav'}
+    %li{:class => @tab == 'basics' ? 'selected' : nil}
+      %h4 BASICS
+      %p Basic RHEL LAMP
+    %li{:class => @tab == 'services' ? 'selected' : nil}
+      %h4 SERVICES
+      %p Add services
+    %li{:class => @tab == 'software' ? 'selected' : nil}
+      %h4 SOFTWARE
+      %p Add software
+    %li{:class => @tab == 'summary' ? 'selected' : nil}
+      %h4 SUMMARY
+      %p Create images
diff --git a/src/app/views/image_descriptor/_services.haml 
b/src/app/views/image_descriptor/_services.haml
new file mode 100644
index 0000000..88cd38a
--- /dev/null
+++ b/src/app/views/image_descriptor/_services.haml
@@ -0,0 +1,32 @@
+%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'
+    %span Provides cloud avare table storage.
+  %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'
+    %span Provides cloud avare messaging.
+  %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'
+    %span
+  %li
+    %label JBoss
+    = check_box_tag 'xml[services][jboss]', '1', 
@image_descriptor.xml.services.include?('jboss')
+    = label_tag 'xml[services][jboss]', 'Enable JBoss infrastructure'
+    %span
+  %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'
+    %span
+
+
+.submit
+  = submit_tag "Cancel"
+  = submit_tag "Back"
+  = submit_tag "Next"
diff --git a/src/app/views/image_descriptor/_software.haml 
b/src/app/views/image_descriptor/_software.haml
new file mode 100644
index 0000000..4070408
--- /dev/null
+++ b/src/app/views/image_descriptor/_software.haml
@@ -0,0 +1,36 @@
+- 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();
+
+      // when JS is enabled, hide the Dashboard content -- it'll be loaded
+      // by jquery UI tab using ajax
+      $("#dashboard-content").hide();
+    });
+
+- menu = [ { :text => "Groups", :action => "index" }, |
+  { :text => "Packages", :action => "index" }, ] |
+
+//%div{:style => 'float:left;width:400px'}
+//  #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" }
+//          = "tab #{item[:text]}"
+
+
+.pkglist
+  %div all packages
+
+.pkglist
+  %div selected packages
+
+.submit
+  = submit_tag "Cancel"
+  = submit_tag "Back"
+  = submit_tag "Next"
diff --git a/src/app/views/image_descriptor/_summary.haml 
b/src/app/views/image_descriptor/_summary.haml
new file mode 100644
index 0000000..06e1ae5
--- /dev/null
+++ b/src/app/views/image_descriptor/_summary.haml
@@ -0,0 +1,16 @@
+%ul
+  %li
+    %label Name
+    = text_field :image_descriptor, :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("image_descriptor", "platform", ['Fedora', 'RHEL'])
+    %span Choose the software operating system.
+  %li
+    %label Description
+    = text_area("image_descriptor", "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/new.haml 
b/src/app/views/image_descriptor/new.haml
new file mode 100644
index 0000000..e6f4a3e
--- /dev/null
+++ b/src/app/views/image_descriptor/new.haml
@@ -0,0 +1,9 @@
+= render :partial => "nav", :locals => {:tab => params[:tab]}
+
+#image_descriptor_form{:class => 'dcloud_form'}
+  = error_messages_for 'image_descriptor'
+
+  - form_tag :action => 'new' do
+    %input{:type => 'hidden', :name => 'tab', :value => @tab}
+    = hidden_field :image_descriptor, :id
+    = render :partial => @tab
diff --git a/src/public/stylesheets/components.css 
b/src/public/stylesheets/components.css
index 5b25cd4..8a2ff02 100644
--- a/src/public/stylesheets/components.css
+++ b/src/public/stylesheets/components.css
@@ -136,3 +136,47 @@ ul.nav li.selected {
   color: blue;
   text-decoration: underline;
 }
+
+#image_descriptor_form {
+  width: 80%;
+  margin: 20px;
+  display: inline-block;
+}
+
+
+#image_descriptor_form ul li textarea {
+  width: 302px;
+}
+
+#image_descriptor_form ul li select {
+  width: 302px;
+}
+
+#image_descriptor_form ul li input {
+  width: 302px;
+}
+
+#image_descriptor_form .pkglist {
+  float:left;
+  width:400px;
+  height:300px;
+  overflow:auto;
+}
+
+#image_descriptor_nav {
+  margin: 20px;
+}
+
+#image_descriptor_nav ul {
+  width: 100%;
+}
+
+#image_descriptor_nav ul li {
+  display: inline;
+  float: left;
+  width: 23%;
+  border: 1px solid black;
+  padding-left: 10px;
+  clear: none;
+  font-size: 1em;
+}
diff --git a/src/test/functional/image_descriptor_controller_test.rb 
b/src/test/functional/image_descriptor_controller_test.rb
new file mode 100644
index 0000000..7fea6ca
--- /dev/null
+++ b/src/test/functional/image_descriptor_controller_test.rb
@@ -0,0 +1,8 @@
+require 'test_helper'
+
+class ImageDescriptorControllerTest < ActionController::TestCase
+  # Replace this with your real tests.
+  test "the truth" do
+    assert true
+  end
+end
-- 
1.7.0.1

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

Reply via email to