new UI - details tab actions - optimize code of after-actions.

This commit is contained in:
Jessica Wang 2010-10-08 19:04:14 -07:00
parent a93d36d81a
commit c4496a9453
8 changed files with 166 additions and 99 deletions

View File

@ -269,14 +269,7 @@ long milliseconds = new Date().getTime();
<img src="images/routers_leftmenuicon.png" alt="Router" /></div>
<%=t.t("router")%>
</div>
</div>
<div class="leftmenu_content" id="leftmenu_system">
<div class="leftmenu_secondindent">
<div class="leftmenu_list_icons">
<img src="images/storage_leftmenuicon.png" alt="System" /></div>
System
</div>
</div>
</div>
</div>
<div class="leftmenu_list">
<div class="leftmenu_content">

View File

@ -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);
}
}

View File

@ -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");

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) {}
}
}

View File

@ -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");

View File

@ -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;