diff --git a/src/cloud/occi/lib/ui/public/js/occi.js b/src/cloud/occi/lib/ui/public/js/occi.js index f53b3832cc..b91c2dda6e 100644 --- a/src/cloud/occi/lib/ui/public/js/occi.js +++ b/src/cloud/occi/lib/ui/public/js/occi.js @@ -66,16 +66,14 @@ var OCCI = { "Helper": { "action": function(action, params) { - obj = { - "action": { - "perform": action - } + action = { + "perform": action } if (params) { - obj.action.params = params; + action.params = params; } - return obj; + return action; }, "request": function(resource, method, data) { @@ -257,6 +255,37 @@ var OCCI = { }); }, + "simple_action" : function(params, resource, method, action_obj){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + + var action,request; + if (action_obj) { + action = OCCI.Helper.action(method, action_obj); + request = OCCI.Helper.request(resource,method, [id, action_obj]); + } else { + action = OCCI.Helper.action(method); + request = OCCI.Helper.request(resource,method, id); + }; + + $.ajax({ + url: resource.toLowerCase() + "/" + id + '/action', + type: "POST", + data: json2xml(action,'ACTION'), + dataType: "xml ONEjson", + success: function(response){ + var res = {}; + res[resource] = response; + return callback ? callback(request,res) : null; + }, + error: function(response){ + return callback_error ? + callback_error(request, OCCI.Error(response)) : null; + } + }); + }, + "accounting": function(params, resource){ var callback = params.success; var callback_error = params.error; @@ -455,7 +484,6 @@ var OCCI = { var resource = OCCI.VM.resource; var method = startstop; - var action = OCCI.Helper.action(method); var request = OCCI.Helper.request(resource,method, id); $.ajax({ url: "ui/" + method + "/" + id, @@ -532,52 +560,11 @@ var OCCI = { "nonpersistent": function(params){ params.data.body = { "PERSISTENT":"NO" }; OCCI.Action.update(params,OCCI.Image.resource,"nonpersistent"); - } - }, - - "Template" : { - "resource" : "VMTEMPLATE", - - "create" : function(params){ - OCCI.Action.create(params,OCCI.Template.resource); }, - "del" : function(params){ - OCCI.Action.del(params,OCCI.Template.resource); - }, - "list" : function(params){ - OCCI.Action.list(params,OCCI.Template.resource); - }, - "show" : function(params){ - OCCI.Action.show(params,OCCI.Template.resource); - }, - "chown" : function(params){ - OCCI.Action.chown(params,OCCI.Template.resource); - }, - "chgrp" : function(params){ - OCCI.Action.chgrp(params,OCCI.Template.resource); - }, - "update" : function(params){ - var action_obj = {"template_raw" : params.data.extra_param }; - OCCI.Action.simple_action(params, - OCCI.Template.resource, - "update", - action_obj); - }, - "fetch_template" : function(params){ - OCCI.Action.show(params,OCCI.Template.resource,"template"); - }, - "publish" : function(params){ - OCCI.Action.simple_action(params,OCCI.Template.resource,"publish"); - }, - "unpublish" : function(params){ - OCCI.Action.simple_action(params,OCCI.Template.resource,"unpublish"); - }, - - "instantiate" : function(params) { - var vm_name = params.data.extra_param ? params.data.extra_param : ""; - var action_obj = { "vm_name" : vm_name }; - OCCI.Action.simple_action(params,OCCI.Template.resource, - "instantiate",action_obj); + "clone" : function(params){ + var action_obj = { 'NAME' : params.data.extra_param }; + OCCI.Action.simple_action(params, OCCI.Image.resource, + "clone", action_obj) } }, diff --git a/src/cloud/occi/lib/ui/public/js/plugins/storage.js b/src/cloud/occi/lib/ui/public/js/plugins/storage.js index 37e09ce498..c8d73f35aa 100644 --- a/src/cloud/occi/lib/ui/public/js/plugins/storage.js +++ b/src/cloud/occi/lib/ui/public/js/plugins/storage.js @@ -100,13 +100,27 @@ var create_image_tmpl = \ '; +var clone_image_tmpl = '
\ +
'+tr("Choose a new name for the image")+':
\ +
'+tr("Several image are selected, please choose prefix to name the new copies")+':
\ +
\ +\ +\ +\ +

\ +
\ + \ + \ +
' + var image_dashboard = '
\ one-storage'+ storage_dashboard_html + '
'; var dataTable_images; -var $create_image_dialog; var image_actions = { @@ -175,6 +189,18 @@ var image_actions = { notify: true }, + "Image.clone_dialog" : { + type: "custom", + call: popUpImageCloneDialog + }, + + "Image.clone" : { + type: "single", + call: OCCI.Image.clone, + error: onError, + notify: true + }, + // "Image.publish" : { // type: "multiple", // call: OCCI.Image.publish, @@ -239,6 +265,10 @@ var image_buttons = { // }, // } // }, + "Image.clone_dialog" : { + type: "action", + text: tr("Clone") + }, "Image.delete" : { type: "action", text: tr("Delete") @@ -259,6 +289,13 @@ var image_create_panel = { } }; +var image_clone_panel = { + "image_clone_panel" : { + title: tr("Clone image"), + content: clone_image_tmpl + } +} + var images_tab = { title: ''+tr("Storage"), content: images_tab_content, @@ -269,6 +306,7 @@ Sunstone.addActions(image_actions); Sunstone.addMainTab('images_tab',images_tab); Sunstone.addInfoPanel('image_info_panel',image_info_panel); Sunstone.addInfoPanel('image_create_panel',image_create_panel); +Sunstone.addInfoPanel('image_clone_panel',image_clone_panel); function imageElements() { @@ -390,7 +428,6 @@ function updateImageInfo(request,img){ function popUpCreateImageDialog(){ Sunstone.popUpInfoPanel("image_create_panel"); var dialog = $('#dialog'); - $create_image_dialog = dialog; $('#create_image',dialog).button({ icons: { @@ -429,13 +466,13 @@ function popUpCreateImageDialog(){ */ $('#img_type',dialog).change(function(){ if ($(this).val() == "DATABLOCK"){ - $('#img_fstype',$create_image_dialog).parents('div.img_param').show(); - $('#img_size',$create_image_dialog).parents('div.img_param').show(); - $('#upload_div',$create_image_dialog).hide(); + $('#img_fstype',dialog).parents('div.img_param').show(); + $('#img_size',dialog).parents('div.img_param').show(); + $('#upload_div',dialog).hide(); } else { - $('#img_fstype',$create_image_dialog).parents('div.img_param').hide(); - $('#img_size',$create_image_dialog).parents('div.img_param').hide(); - $('#upload_div',$create_image_dialog).show(); + $('#img_fstype',dialog).parents('div.img_param').hide(); + $('#img_size',dialog).parents('div.img_param').hide(); + $('#upload_div',dialog).show(); }; }); @@ -454,7 +491,7 @@ function popUpCreateImageDialog(){ var img_obj; var uploader = new qq.FileUploaderBasic({ - button: $('#file-uploader',$create_image_dialog)[0], + button: $('#file-uploader',dialog)[0], action: 'ui/upload', multiple: false, params: {}, @@ -493,8 +530,6 @@ function popUpCreateImageDialog(){ $('#file-uploader input').attr('style','margin:0;width:256px!important'); var processCreateImageForm = function(){ - var dialog = $create_image_dialog; - var img_json = {}; var name = $('#img_name',dialog).val(); @@ -551,6 +586,63 @@ function popUpCreateImageDialog(){ }); } +function popUpImageCloneDialog(){ + Sunstone.popUpInfoPanel("image_clone_panel"); + var dialog = $('#dialog'); + + $('#clone_image',dialog).button({ + icons: { + primary: "ui-icon-check" + }, + text: true + }); + + $('.image_close_dialog_link',dialog).button({ + icons: { + primary: "ui-icon-closethick" + }, + text: true + }); + + $('form',dialog).submit(function(){ + var name = $('input', this).val(); + var sel_elems = imageElements(); + if (!name || !sel_elems.length) + notifyError('A name or prefix is needed!'); + if (sel_elems.length > 1){ + for (var i=0; i< sel_elems.length; i++) + //If we are cloning several images we + //use the name as prefix + Sunstone.runAction('Image.clone', + sel_elems[i], + name+getName(sel_elems[i], + dataTable_images, 2)); + } else { + Sunstone.runAction('Image.clone',sel_elems[0],name) + }; + setTimeout(function(){ + Sunstone.runAction('Image.refresh'); + }, 1500); + popUpImageDashboard(); + return false; + }); + + var sel_elems = imageElements(); + //show different text depending on how many elements are selected + if (sel_elems.length > 1){ + $('.clone_one',dialog).hide(); + $('.clone_several',dialog).show(); + $('input',dialog).val('Copy of '); + } + else { + $('.clone_one',dialog).show(); + $('.clone_several',dialog).hide(); + $('input',dialog).val('Copy of '+getName(sel_elems[0], + dataTable_images, 2)); + }; + +} + function popUpImageDashboard(){ var count = dataTable_images.fnGetNodes().length; popDialog(image_dashboard);