diff --git a/ui/new/index.jsp b/ui/new/index.jsp index f184f97e7f0..75bdc90a0f0 100644 --- a/ui/new/index.jsp +++ b/ui/new/index.jsp @@ -269,14 +269,7 @@ long milliseconds = new Date().getTime(); Router <%=t.t("router")%> - -
-
-
- System
- System -
-
+
diff --git a/ui/new/scripts/cloud.core2.account.js b/ui/new/scripts/cloud.core2.account.js index 3c5275f33de..fc6aefc32a8 100644 --- a/ui/new/scripts/cloud.core2.account.js +++ b/ui/new/scripts/cloud.core2.account.js @@ -47,19 +47,20 @@ function accountJsonToDetailsTab(jsonObj) { $actionMenu.find("#action_list").empty(); var noAvailableActions = true; + var midmenuItemId = getMidmenuId(jsonObj); if(jsonObj.id != systemAccountId && jsonObj.id != adminAccountId) { if (jsonObj.accounttype == roleTypeUser || jsonObj.accounttype == roleTypeDomainAdmin) { - buildActionLinkForDetailsTab("Resource limits", accountActionMap, $actionMenu, accountListAPIMap); + buildActionLinkForDetailsTab("Resource limits", accountActionMap, $actionMenu, accountListAPIMap, midmenuItemId); noAvailableActions = false; } if(jsonObj.state == "enabled") { - buildActionLinkForDetailsTab("Disable account", accountActionMap, $actionMenu, accountListAPIMap); - buildActionLinkForDetailsTab("Lock account", accountActionMap, $actionMenu, accountListAPIMap); + buildActionLinkForDetailsTab("Disable account", accountActionMap, $actionMenu, accountListAPIMap, midmenuItemId); + buildActionLinkForDetailsTab("Lock account", accountActionMap, $actionMenu, accountListAPIMap, midmenuItemId); noAvailableActions = false; } else if(jsonObj.state == "disabled" || jsonObj.state == "locked") { - buildActionLinkForDetailsTab("Enable account", accountActionMap, $actionMenu, accountListAPIMap); + buildActionLinkForDetailsTab("Enable account", accountActionMap, $actionMenu, accountListAPIMap, midmenuItemId); noAvailableActions = false; } } @@ -72,7 +73,7 @@ function accountJsonToDetailsTab(jsonObj) { var accountActionMap = { "Resource limits": { - customActionFn : doResourceLimits + dialogBeforeActionFn : doResourceLimits } , "Disable account": { @@ -80,8 +81,19 @@ var accountActionMap = { asyncJobResponse: "disableaccountresponse", dialogBeforeActionFn : doDisableAccount, inProcessText: "Disabling account....", - afterActionSeccessFn: function(jsonObj) { - $("#midmenuItem_"+jsonObj.id).data("jsonObj", jsonObj); + afterActionSeccessFn: function(json, id, midmenuItemId) { + //Get embedded object from listVolume API until bug 6482("enableAccount, disableAccount, lockAccount should return an embedded object") is fixed. + var jsonObj; + $.ajax({ + data: createURL("command=listAccounts&id="+id), + dataType: "json", + async: false, + success: function(json) { + jsonObj = json.listaccountsresponse.account[0]; + } + }); + + accountToMidmenu(jsonObj, $("#"+midmenuItemId)); accountJsonToDetailsTab(jsonObj); } } @@ -90,8 +102,19 @@ var accountActionMap = { isAsyncJob: false, dialogBeforeActionFn : doLockAccount, inProcessText: "Locking account....", - afterActionSeccessFn: function(jsonObj) { - $("#midmenuItem_"+jsonObj.id).data("jsonObj", jsonObj); + afterActionSeccessFn: function(json, id, midmenuItemId) { + //Get embedded object from listVolume API until bug 6482("enableAccount, disableAccount, lockAccount should return an embedded object") is fixed. + var jsonObj; + $.ajax({ + data: createURL("command=listAccounts&id="+id), + dataType: "json", + async: false, + success: function(json) { + jsonObj = json.listaccountsresponse.account[0]; + } + }); + + accountToMidmenu(jsonObj, $("#"+midmenuItemId)); accountJsonToDetailsTab(jsonObj); } } @@ -100,8 +123,19 @@ var accountActionMap = { isAsyncJob: false, dialogBeforeActionFn : doEnableAccount, inProcessText: "Enabling account....", - afterActionSeccessFn: function(jsonObj) { - $("#midmenuItem_"+jsonObj.id).data("jsonObj", jsonObj); + afterActionSeccessFn: function(json, id, midmenuItemId) { + //Get embedded object from listVolume API until bug 6482("enableAccount, disableAccount, lockAccount should return an embedded object") is fixed. + var jsonObj; + $.ajax({ + data: createURL("command=listAccounts&id="+id), + dataType: "json", + async: false, + success: function(json) { + jsonObj = json.listaccountsresponse.account[0]; + } + }); + + accountToMidmenu(jsonObj, $("#"+midmenuItemId)); accountJsonToDetailsTab(jsonObj); } } diff --git a/ui/new/scripts/cloud.core2.iso.js b/ui/new/scripts/cloud.core2.iso.js index f9e7ead18bd..eb63cf6f193 100644 --- a/ui/new/scripts/cloud.core2.iso.js +++ b/ui/new/scripts/cloud.core2.iso.js @@ -155,11 +155,6 @@ function isoToMidmenu(jsonObj, $midmenuItem1) { $midmenuItem1.find("#second_row").text(fromdb(jsonObj.zonename).substring(0,25)); } -function isoAfterDetailsTabAction(jsonObj) { - isoToMidmenu(jsonObj, $("#"+isoGetMidmenuId(jsonObj))); - isoJsonToDetailsTab(jsonObj); -} - function isoToRigntPanel($midmenuItem) { var jsonObj = $midmenuItem.data("jsonObj"); isoJsonToDetailsTab(jsonObj); @@ -205,7 +200,7 @@ function isoJsonToDetailsTab(jsonObj) { } else { $("#edit_button").show(); - buildActionLinkForDetailsTab("Copy ISO", isoActionMap, $actionMenu, isoListAPIMap); + buildActionLinkForDetailsTab("Copy ISO", isoActionMap, $actionMenu, isoListAPIMap, isoGetMidmenuId(jsonObj)); noAvailableActions = false; } @@ -213,7 +208,7 @@ function isoJsonToDetailsTab(jsonObj) { if (((isUser() && jsonObj.ispublic == "true" && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account)) || jsonObj.isready == "false") || (jsonObj.bootable == "false")) { } else { - buildActionLinkForDetailsTab("Create VM", isoActionMap, $actionMenu, isoListAPIMap); + buildActionLinkForDetailsTab("Create VM", isoActionMap, $actionMenu, isoListAPIMap, isoGetMidmenuId(jsonObj)); noAvailableActions = false; } @@ -221,7 +216,7 @@ function isoJsonToDetailsTab(jsonObj) { if (((isUser() && jsonObj.ispublic == "true" && !(jsonObj.domainid == g_domainid && jsonObj.account == g_account))) || (jsonObj.isready == "false" && jsonObj.isostatus != null && jsonObj.isostatus.indexOf("% Downloaded") != -1)) { } else { - buildActionLinkForDetailsTab("Delete ISO", isoActionMap, $actionMenu, isoListAPIMap); + buildActionLinkForDetailsTab("Delete ISO", isoActionMap, $actionMenu, isoListAPIMap, isoGetMidmenuId(jsonObj)); noAvailableActions = false; } @@ -261,19 +256,19 @@ var isoActionMap = { asyncJobResponse: "deleteisosresponse", dialogBeforeActionFn : doDeleteIso, inProcessText: "Deleting ISO....", - afterActionSeccessFn: function(jsonObj) { - var $midmenuItem1 = $("#"+isoGetMidmenuId(jsonObj)); + afterActionSeccessFn: function(json, id, midmenuItemId){ + var $midmenuItem1 = $("#"+midmenuItemId); $midmenuItem1.remove(); clearRightPanel(); isoClearRightPanel(); - } + } }, "Copy ISO": { isAsyncJob: true, asyncJobResponse: "copyisoresponse", dialogBeforeActionFn : doCopyIso, inProcessText: "Copying ISO....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} } , "Create VM": { @@ -281,7 +276,7 @@ var isoActionMap = { asyncJobResponse: "deployvirtualmachineresponse", dialogBeforeActionFn : doCreateVMFromIso, inProcessText: "Creating VM....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} } } @@ -303,6 +298,7 @@ function doUpdateIso() { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; + var midmenuId = isoGetMidmenuId(jsonObj); var name = trim($detailsTab.find("#name_edit").val()); var displaytext = trim($detailsTab.find("#displaytext_edit").val()); @@ -311,12 +307,14 @@ function doUpdateIso() { data: createURL("command=updateIso&id="+id+"&name="+todb(name)+"&displayText="+todb(displaytext)), dataType: "json", success: function(json) { - isoAfterDetailsTabAction(json.updateisoresponse); + var jsonObj = json.updateisoresponse; + isoToMidmenu(jsonObj, $("#"+midmenuId)); + isoJsonToDetailsTab(jsonObj); } }); } -function doDeleteIso($actionLink, listAPIMap, $detailsTab) { +function doDeleteIso($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var $detailsTab = $("#right_panel_content #tab_content_details"); var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; @@ -338,7 +336,7 @@ function doDeleteIso($actionLink, listAPIMap, $detailsTab) { "Confirm": function() { $(this).dialog("close"); var apiCommand = "command=deleteIso&id="+id+moreCriteria.join(""); - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); @@ -356,7 +354,7 @@ function populateZoneFieldExcludeSourceZone(zoneField, excludeZoneId) { } } -function doCopyIso($actionLink, listAPIMap, $detailsTab) { +function doCopyIso($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; var name = jsonObj.name; @@ -376,7 +374,7 @@ function doCopyIso($actionLink, listAPIMap, $detailsTab) { var destZoneId = thisDialog.find("#copy_iso_zone").val(); var apiCommand = "command=copyIso&id="+id+"&sourcezoneid="+sourceZoneId+"&destzoneid="+destZoneId; - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); @@ -384,7 +382,7 @@ function doCopyIso($actionLink, listAPIMap, $detailsTab) { }).dialog("open"); } -function doCreateVMFromIso($actionLink, listAPIMap, $detailsTab) { +function doCreateVMFromIso($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; var name = jsonObj.name; @@ -410,7 +408,7 @@ function doCreateVMFromIso($actionLink, listAPIMap, $detailsTab) { var diskOfferingId = thisDialog.find("#disk_offering").val(); var apiCommand = "command=deployVirtualMachine&zoneId="+zoneId+"&serviceOfferingId="+serviceOfferingId+"&diskOfferingId="+diskOfferingId+"&templateId="+id+"&group="+todb(group)+"&displayname="+todb(name); - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); diff --git a/ui/new/scripts/cloud.core2.js b/ui/new/scripts/cloud.core2.js index de00180e434..80dcb5d663a 100644 --- a/ui/new/scripts/cloud.core2.js +++ b/ui/new/scripts/cloud.core2.js @@ -22,7 +22,7 @@ //***** actions for details tab in right panel (begin) ************************************************************************ -function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap) { +function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap, midmenuItemId) { var apiInfo = actionMap[label]; var $listItem = $("#action_list_item").clone(); $actionMenu.find("#action_list").append($listItem.show()); @@ -45,16 +45,16 @@ function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap) var dialogBeforeActionFn = $actionLink.data("dialogBeforeActionFn"); if(dialogBeforeActionFn == null) { var apiCommand = "command="+$actionLink.data("api")+"&id="+id; - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); } else { - dialogBeforeActionFn($actionLink, listAPIMap, $detailsTab); + dialogBeforeActionFn($actionLink, listAPIMap, $detailsTab, midmenuItemId); } return false; }); } -function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { +function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId) { var label = $actionLink.data("label"); var inProcessText = $actionLink.data("inProcessText"); var isAsyncJob = $actionLink.data("isAsyncJob"); @@ -69,7 +69,8 @@ function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { var $detailsTab = $("#right_panel_content #tab_content_details"); var $spinningWheel = $detailsTab.find("#spinning_wheel"); $spinningWheel.find("#description").text(inProcessText); - $spinningWheel.show(); + $spinningWheel.show(); + $("#right_panel_content #after_action_info_container").removeClass("errorbox").hide(); //Async job (begin) ***** if(isAsyncJob == true) { @@ -97,6 +98,9 @@ function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { $("#right_panel_content #after_action_info").text(label + " action succeeded."); $("#right_panel_content #after_action_info_container").removeClass("errorbox").show(); + afterActionSeccessFn(json, id, midmenuItemId); + + /* if(apiCommand.indexOf("command=delete")!=0) { //DestroyVirtualMachine API doesn't return an embedded object on success (Bug 6041) //Before Bug 6041 get fixed, use the temporary solution below. @@ -112,8 +116,10 @@ function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { //afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]); } else { //apiCommand is deleteXXXXXXX - afterActionSeccessFn(id); - } + afterActionSeccessFn(json, id, midmenuItemId); + } + */ + } else if (result.jobstatus == 2) { // Failed $("#right_panel_content #after_action_info").text(label + " action failed. Reason: " + fromdb(result.jobresult)); $("#right_panel_content #after_action_info_container").addClass("errorbox").show(); @@ -146,7 +152,10 @@ function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { $spinningWheel.hide(); $("#right_panel_content #after_action_info").text(label + " action succeeded."); $("#right_panel_content #after_action_info_container").removeClass("errorbox").show(); - + + afterActionSeccessFn(json, id, midmenuItemId); + + /* if(apiCommand.indexOf("command=delete")!=0 && apiCommand.indexOf("command=disassociateIpAddress")!=0) { //RecoverVirtualMachine API doesn't return an embedded object on success (Bug 6037) //Before Bug 6037 get fixed, use the temporary solution below. @@ -163,8 +172,10 @@ function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) { //afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]); } else { //apiCommand is deleteXXXXXXX - afterActionSeccessFn(id); + afterActionSeccessFn(json, id, midmenuItemId); } + */ + }, error: function(XMLHttpResponse) { handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label); @@ -594,7 +605,10 @@ function clearMiddleMenu() { } function clearRightPanel() { - $("#right_panel_content #tab_content_details #action_link #action_menu #action_list").empty(); + var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); + $actionMenu.find("#action_list").empty(); + $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); + $("#right_panel_content #tab_content_details #spinning_wheel").hide(); $("#right_panel_content #after_action_info_container").hide(); } @@ -832,6 +846,9 @@ function enableMultipleSelectionInMiddleMenu() { }); } +function getMidmenuId(jsonObj) { + return "midmenuItem_" + jsonObj.id; +} diff --git a/ui/new/scripts/cloud.core2.router.js b/ui/new/scripts/cloud.core2.router.js index adc341f6b5b..8b243d55661 100644 --- a/ui/new/scripts/cloud.core2.router.js +++ b/ui/new/scripts/cloud.core2.router.js @@ -11,8 +11,9 @@ function routerToMidmenu(jsonObj, $midmenuItem1) { updateStateInMidMenu(jsonObj, $midmenuItem1); } -function routerAfterDetailsTabAction(jsonObj) { - $("#midmenuItem_"+jsonObj.id).data("jsonObj", jsonObj); +function routerAfterDetailsTabAction(json, id, midmenuItemId) { + var jsonObj = json.queryasyncjobresultresponse.router[0]; + routerToMidmenu(jsonObj, $("#"+midmenuItemId)); routerJsonToDetailsTab(jsonObj); } @@ -44,12 +45,12 @@ function routerJsonToDetailsTab(jsonObj) { var noAvailableActions = true; if (jsonObj.state == 'Running') { - buildActionLinkForDetailsTab("Stop Router", routerActionMap, $actionMenu, routerListAPIMap); - buildActionLinkForDetailsTab("Reboot Router", routerActionMap, $actionMenu, routerListAPIMap); + buildActionLinkForDetailsTab("Stop Router", routerActionMap, $actionMenu, routerListAPIMap, getMidmenuId(jsonObj)); + buildActionLinkForDetailsTab("Reboot Router", routerActionMap, $actionMenu, routerListAPIMap, getMidmenuId(jsonObj)); noAvailableActions = false; } else if (jsonObj.state == 'Stopped') { - buildActionLinkForDetailsTab("Start Router", routerActionMap, $actionMenu, routerListAPIMap); + buildActionLinkForDetailsTab("Start Router", routerActionMap, $actionMenu, routerListAPIMap, getMidmenuId(jsonObj)); noAvailableActions = false; } diff --git a/ui/new/scripts/cloud.core2.snapshot.js b/ui/new/scripts/cloud.core2.snapshot.js index 89474815ae6..5e863cd3514 100644 --- a/ui/new/scripts/cloud.core2.snapshot.js +++ b/ui/new/scripts/cloud.core2.snapshot.js @@ -59,9 +59,10 @@ function snapshotJsonToDetailsTab(jsonObj) { //actions *** var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); - buildActionLinkForDetailsTab("Create Volume", snapshotActionMap, $actionMenu, snapshotListAPIMap); - buildActionLinkForDetailsTab("Delete Snapshot", snapshotActionMap, $actionMenu, snapshotListAPIMap); - buildActionLinkForDetailsTab("Create Template", snapshotActionMap, $actionMenu, snapshotListAPIMap); + var midmenuItemId = getMidmenuId(jsonObj); + buildActionLinkForDetailsTab("Create Volume", snapshotActionMap, $actionMenu, snapshotListAPIMap, midmenuItemId); + buildActionLinkForDetailsTab("Delete Snapshot", snapshotActionMap, $actionMenu, snapshotListAPIMap, midmenuItemId); + buildActionLinkForDetailsTab("Create Template", snapshotActionMap, $actionMenu, snapshotListAPIMap, midmenuItemId); } function snapshotClearRightPanel() { @@ -81,7 +82,7 @@ var snapshotActionMap = { asyncJobResponse: "createvolumeresponse", dialogBeforeActionFn : doCreateVolumeFromSnapshotInSnapshotPage, inProcessText: "Creating Volume....", - afterActionSeccessFn: function(jsonObj) {} + afterActionSeccessFn: function(json, id, midmenuItemId) {} } , "Delete Snapshot": { @@ -89,9 +90,8 @@ var snapshotActionMap = { isAsyncJob: true, asyncJobResponse: "deletesnapshotresponse", inProcessText: "Deleting snapshot....", - afterActionSeccessFn: function(id) { - var $midmenuItem1 = $("#midmenuItem_"+id); - $midmenuItem1.remove(); + afterActionSeccessFn: function(json, id, midmenuItemId) { + $("#"+midmenuItemId).remove(); clearRightPanel(); snapshotClearRightPanel(); } @@ -102,7 +102,7 @@ var snapshotActionMap = { asyncJobResponse: "createtemplateresponse", dialogBeforeActionFn : doCreateTemplateFromSnapshotInSnapshotPage, inProcessText: "Creating Template....", - afterActionSeccessFn: function(jsonObj) {} + afterActionSeccessFn: function(json, id, midmenuItemId) {} } } diff --git a/ui/new/scripts/cloud.core2.template.js b/ui/new/scripts/cloud.core2.template.js index 66054e11d51..78187b65a01 100644 --- a/ui/new/scripts/cloud.core2.template.js +++ b/ui/new/scripts/cloud.core2.template.js @@ -211,13 +211,6 @@ function templateToMidmenu(jsonObj, $midmenuItem1) { $midmenuItem1.find("#second_row").text(fromdb(jsonObj.zonename).substring(0,25)); } -function templateAfterDetailsTabAction(jsonObj) { - var $midmenuItem1 = $("#"+templateGetMidmenuId(jsonObj)); - $midmenuItem1.data("jsonObj", jsonObj); - templateToMidmenu(jsonObj, $midmenuItem1); - templateJsonToDetailsTab(jsonObj); -} - function templateToRigntPanel($midmenuItem) { var jsonObj = $midmenuItem.data("jsonObj"); templateJsonToDetailsTab(jsonObj); @@ -275,8 +268,8 @@ function templateJsonToDetailsTab(jsonObj) { } else { $("#edit_button").show(); - buildActionLinkForDetailsTab("Copy Template", templateActionMap, $actionMenu, templateListAPIMap); - buildActionLinkForDetailsTab("Create VM", templateActionMap, $actionMenu, templateListAPIMap); + buildActionLinkForDetailsTab("Copy Template", templateActionMap, $actionMenu, templateListAPIMap, templateGetMidmenuId(jsonObj)); + buildActionLinkForDetailsTab("Create VM", templateActionMap, $actionMenu, templateListAPIMap, templateGetMidmenuId(jsonObj)); noAvailableActions = false; } @@ -285,7 +278,7 @@ function templateJsonToDetailsTab(jsonObj) { //template.find("#template_delete_container").hide(); } else { - buildActionLinkForDetailsTab("Delete Template", templateActionMap, $actionMenu, templateListAPIMap); + buildActionLinkForDetailsTab("Delete Template", templateActionMap, $actionMenu, templateListAPIMap, templateGetMidmenuId(jsonObj)); noAvailableActions = false; } @@ -350,8 +343,8 @@ var templateActionMap = { asyncJobResponse: "deletetemplateresponse", dialogBeforeActionFn : doDeleteTemplate, inProcessText: "Deleting Template....", - afterActionSeccessFn: function(jsonObj) { - var $midmenuItem1 = $("#"+templateGetMidmenuId(jsonObj)); + afterActionSeccessFn: function(json, id, midmenuItemId){ + var $midmenuItem1 = $("#"+midmenuItemId); $midmenuItem1.remove(); clearRightPanel(); templateClearRightPanel(); @@ -362,7 +355,7 @@ var templateActionMap = { asyncJobResponse: "createtemplateresponse", dialogBeforeActionFn : doCopyTemplate, inProcessText: "Copying Template....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} } , "Create VM": { @@ -370,7 +363,7 @@ var templateActionMap = { asyncJobResponse: "deployvirtualmachineresponse", dialogBeforeActionFn : doCreateVMFromTemplate, inProcessText: "Creating VM....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} } } @@ -395,6 +388,7 @@ function doUpdateTemplate() { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; + var midmenuId = templateGetMidmenuId(jsonObj); //updateTemplate var array1 = []; @@ -457,12 +451,14 @@ function doUpdateTemplate() { data:createURL("command=listTemplates&templatefilter=self&id="+id), dataType: "json", success: function(json) { - templateAfterDetailsTabAction(json.listtemplatesresponse.template[0]); + var jsonObj = json.listtemplatesresponse.template[0]; + templateToMidmenu(jsonObj, $("#"+midmenuId)); + templateJsonToDetailsTab(jsonObj); } }); } -function doDeleteTemplate($actionLink, listAPIMap, $detailsTab) { +function doDeleteTemplate($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var $detailsTab = $("#right_panel_content #tab_content_details"); var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; @@ -484,7 +480,7 @@ function doDeleteTemplate($actionLink, listAPIMap, $detailsTab) { "Confirm": function() { $(this).dialog("close"); var apiCommand = "command=deleteTemplate&id="+id+moreCriteria.join(""); - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); @@ -502,7 +498,7 @@ function populateZoneFieldExcludeSourceZone(zoneField, excludeZoneId) { } } -function doCopyTemplate($actionLink, listAPIMap, $detailsTab) { +function doCopyTemplate($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; var name = jsonObj.name; @@ -529,7 +525,7 @@ function doCopyTemplate($actionLink, listAPIMap, $detailsTab) { var id = $detailsTab.data("jsonObj").id; var apiCommand = "command=copyTemplate&id="+id+"&sourcezoneid="+sourceZoneId+"&destzoneid="+destZoneId; - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); @@ -537,7 +533,7 @@ function doCopyTemplate($actionLink, listAPIMap, $detailsTab) { }).dialog("open"); } -function doCreateVMFromTemplate($actionLink, listAPIMap, $detailsTab) { +function doCreateVMFromTemplate($actionLink, listAPIMap, $detailsTab, midmenuItemId) { var jsonObj = $detailsTab.data("jsonObj"); var id = jsonObj.id; var name = jsonObj.name; @@ -573,7 +569,7 @@ function doCreateVMFromTemplate($actionLink, listAPIMap, $detailsTab) { array1.push("&diskOfferingId="+diskOfferingId); var apiCommand = "command=deployVirtualMachine&zoneId="+zoneId+"&templateId="+id+array1.join(""); - doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap); + doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap, midmenuItemId); }, "Cancel": function() { $(this).dialog("close"); diff --git a/ui/new/scripts/cloud.core2.volume.js b/ui/new/scripts/cloud.core2.volume.js index c867ea51349..fbf9b397841 100644 --- a/ui/new/scripts/cloud.core2.volume.js +++ b/ui/new/scripts/cloud.core2.volume.js @@ -370,8 +370,9 @@ function afterLoadVolumeJSP() { //***** switch between different tabs (end) ********************************************************************** } -function volumeAfterDetailsTabAction(jsonObj) { - $("#midmenuItem_"+jsonObj.id).data("jsonObj", jsonObj); +function volumeAfterDetailsTabAction(json, id, midmenuItemId) { + var jsonObj = json.queryasyncjobresultresponse.virtualmachine[0]; + volumeToMidmenu(jsonObj, $("#"+midmenuItemId)); volumeJsonToDetailsTab(jsonObj); } @@ -417,27 +418,27 @@ function volumeJsonToDetailsTab(jsonObj){ var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); - buildActionLinkForDetailsTab("Take Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap); //show take snapshot - buildActionLinkForDetailsTab("Recurring Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap); //show Recurring Snapshot + buildActionLinkForDetailsTab("Take Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //show take snapshot + buildActionLinkForDetailsTab("Recurring Snapshot", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //show Recurring Snapshot if(jsonObj.state != "Creating" && jsonObj.state != "Corrupted" && jsonObj.name != "attaching") { if(jsonObj.type=="ROOT") { if (jsonObj.vmstate == "Stopped") { - //buildActionLinkForDetailsTab("Create Template", volumeActionMap, $actionMenu, volumeListAPIMap); //backend of CreateTemplateFromVolume is not working. Hide the option from UI until backend is fixed. + //buildActionLinkForDetailsTab("Create Template", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //backend of CreateTemplateFromVolume is not working. Hide the option from UI until backend is fixed. } } else { if (jsonObj.virtualmachineid != null) { if (jsonObj.storagetype == "shared" && (jsonObj.vmstate == "Running" || jsonObj.vmstate == "Stopped")) { - buildActionLinkForDetailsTab("Detach Disk", volumeActionMap, $actionMenu, volumeListAPIMap); //show detach disk + buildActionLinkForDetailsTab("Detach Disk", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //show detach disk } } else { // Disk not attached if (jsonObj.storagetype == "shared") { - buildActionLinkForDetailsTab("Attach Disk", volumeActionMap, $actionMenu, volumeListAPIMap); //show attach disk + buildActionLinkForDetailsTab("Attach Disk", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //show attach disk if(jsonObj.vmname == null || jsonObj.vmname == "none") - buildActionLinkForDetailsTab("Delete Volume", volumeActionMap, $actionMenu, volumeListAPIMap); //show delete volume + buildActionLinkForDetailsTab("Delete Volume", volumeActionMap, $actionMenu, volumeListAPIMap, getMidmenuId(jsonObj)); //show delete volume } } } @@ -515,29 +516,56 @@ var volumeActionMap = { asyncJobResponse: "attachvolumeresponse", dialogBeforeActionFn : doAttachDisk, inProcessText: "Attaching disk....", - afterActionSeccessFn: volumeAfterDetailsTabAction + afterActionSeccessFn: function (json, id, midmenuItemId) { + //var jsonObj = json.queryasyncjobresultresponse.virtualmachine[0]; + //Get embedded object from lsitVolume API until Bug 6481(embedded object returned by attachVolume API should include "type" property) is fixed. + var jsonObj; + $.ajax({ + data: createURL("command=listVolumes&id="+id), + dataType: "json", + async: false, + success: function(json) { + jsonObj = json.listvolumesresponse.volume[0]; + } + }); + volumeToMidmenu(jsonObj, $("#"+midmenuItemId)); + volumeJsonToDetailsTab(jsonObj); + } }, "Detach Disk": { api: "detachVolume", isAsyncJob: true, asyncJobResponse: "detachvolumeresponse", inProcessText: "Detaching disk....", - afterActionSeccessFn: volumeAfterDetailsTabAction + afterActionSeccessFn: function (json, id, midmenuItemId) { + //var jsonObj = json.queryasyncjobresultresponse.virtualmachine[0]; + //Get embedded object from lsitVolume API until Bug 6480(detachVolume API should return embedded object, like attachVolume API does.) is fixed. + var jsonObj; + $.ajax({ + data: createURL("command=listVolumes&id="+id), + dataType: "json", + async: false, + success: function(json) { + jsonObj = json.listvolumesresponse.volume[0]; + } + }); + volumeToMidmenu(jsonObj, $("#"+midmenuItemId)); + volumeJsonToDetailsTab(jsonObj); + } }, "Create Template": { isAsyncJob: true, asyncJobResponse: "createtemplateresponse", dialogBeforeActionFn : doCreateTemplateFromVolume, inProcessText: "Creating template....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} }, "Delete Volume": { api: "deleteVolume", isAsyncJob: false, inProcessText: "Deleting volume....", - afterActionSeccessFn: function(id) { - var $midmenuItem1 = $("#midmenuItem_"+id); - $midmenuItem1.remove(); + afterActionSeccessFn: function(json, id, midmenuItemId) { + $("#"+midmenuItemId).remove(); clearRightPanel(); volumeClearRightPanel(); } @@ -547,7 +575,7 @@ var volumeActionMap = { asyncJobResponse: "createsnapshotresponse", dialogBeforeActionFn : doTakeSnapshot, inProcessText: "Taking Snapshot....", - afterActionSeccessFn: function(){} + afterActionSeccessFn: function(json, id, midmenuItemId){} }, "Recurring Snapshot": { dialogBeforeActionFn : doRecurringSnapshot @@ -660,7 +688,7 @@ function clearBottomPanel() { cleanErrMsg(dialogBox.find("#edit_day_of_month"), dialogBox.find("#edit_day_of_month_errormsg")); } -function doRecurringSnapshot() { +function doRecurringSnapshot(json, id, midmenuItemId) { var $detailsTab = $("#right_panel_content #tab_content_details"); var volumeId = $detailsTab.data("jsonObj").id;