mirror of https://github.com/apache/cloudstack.git
Merge branch 'master' of ssh://git.cloud.com/var/lib/git/cloudstack-oss
This commit is contained in:
commit
f9ae4a6341
|
|
@ -117,6 +117,14 @@ public class CreateVolumeCmd extends BaseCmd {
|
|||
size = Long.valueOf(0);
|
||||
}
|
||||
|
||||
if(diskOfferingId != null){
|
||||
DiskOfferingVO dOffering = getManagementServer().findDiskOfferingById(diskOfferingId.longValue());
|
||||
|
||||
if(dOffering == null){
|
||||
throw new ServerApiException(BaseCmd.PARAM_ERROR,"Diskoffering id:"+diskOfferingId+" is invalid");
|
||||
}
|
||||
}
|
||||
|
||||
boolean useSnapshot = false;
|
||||
if (snapshotId == null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -75,12 +75,10 @@
|
|||
<div class="grid_rows odd">
|
||||
<div class="grid_row_cell" style="width: 20%;">
|
||||
<div class="row_celltitles">
|
||||
<%=t.t("HA")%>:</div>
|
||||
<%=t.t("HA.Enabled")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="ha">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="haenable">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -127,12 +125,10 @@
|
|||
<div class="grid_rows odd">
|
||||
<div class="grid_row_cell" style="width: 20%;">
|
||||
<div class="row_celltitles">
|
||||
<%=t.t("ISO")%>:</div>
|
||||
<%=t.t("ISO.attached")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="iso">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="iso">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_editbox">
|
||||
<div class="grid_editbox" id="edit_button">
|
||||
</div>
|
||||
<div class="gridheader_loaderbox" id="spinning_wheel" style="border: 1px solid #999;
|
||||
display: none;">
|
||||
|
|
@ -79,6 +79,8 @@
|
|||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="name">
|
||||
</div>
|
||||
<input class="text" id="name_edit" style="width: 200px; display: none;" type="text" />
|
||||
<div id="name_edit_errormsg" style="display:none"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_rows odd">
|
||||
|
|
@ -89,6 +91,8 @@
|
|||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="displaytext">
|
||||
</div>
|
||||
<input class="text" id="displaytext_edit" style="width: 200px; display: none;" type="text" />
|
||||
<div id="displaytext_edit_errormsg" style="display:none"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_rows odd">
|
||||
|
|
@ -107,9 +111,7 @@
|
|||
<%=t.t("Bootable")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="bootable">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="bootable">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -142,8 +144,12 @@
|
|||
<div class="row_celltitles" id="size">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid_botactionpanel">
|
||||
<div class="gridbot_buttons" id="save_button" style="display:none;">Save</div>
|
||||
<div class="gridbot_buttons" id="cancel_button" style="display:none;">Cancel</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ISO detail panel (end) -->
|
||||
|
|
|
|||
|
|
@ -112,9 +112,7 @@
|
|||
<%=t.t("Password.Enabled")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="passwordenabled">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="passwordenabled">
|
||||
</div>
|
||||
<select class="select" id="passwordenabled_edit" style="width: 202px; display: none;">
|
||||
<option value="false">No</option>
|
||||
|
|
@ -128,9 +126,7 @@
|
|||
<%=t.t("Public")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="ispublic">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="ispublic">
|
||||
</div>
|
||||
<select class="select" id="ispublic_edit" style="width: 202px; display: none;">
|
||||
<option value="true">Yes</option>
|
||||
|
|
@ -144,9 +140,7 @@
|
|||
<%=t.t("Featured")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="isfeatured">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="isfeatured">
|
||||
</div>
|
||||
<select class="select" id="isfeatured_edit" style="width: 202px; display: none;">
|
||||
<option value="true">Yes</option>
|
||||
|
|
@ -160,9 +154,7 @@
|
|||
<%=t.t("Cross.Zones")%>:</div>
|
||||
</div>
|
||||
<div class="grid_row_cell" style="width: 79%;">
|
||||
<div class="row_celltitles" id="crossZones">
|
||||
<div id="icon">
|
||||
</div>
|
||||
<div class="row_celltitles" id="crossZones">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -377,36 +377,44 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||
}
|
||||
|
||||
function vmToRightPanel($midmenuItem) {
|
||||
var json = $midmenuItem.data("jsonObj");
|
||||
vmJsonToDetailsTab(json, $midmenuItem);
|
||||
}
|
||||
|
||||
function vmJsonToDetailsTab(jsonObj, $midmenuItem){
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
$detailsTab.data("jsonObj", jsonObj);
|
||||
|
||||
//details tab
|
||||
if($midmenuItem.find("#info_icon").css("display") != "none") {
|
||||
$rightPanelContent.find("#after_action_info").text($midmenuItem.data("afterActionInfo"));
|
||||
$detailsTab.find("#after_action_info").text($midmenuItem.data("afterActionInfo"));
|
||||
if($midmenuItem.find("#info_icon").hasClass("error"))
|
||||
$rightPanelContent.find("#after_action_info_container").addClass("errorbox");
|
||||
$detailsTab.find("#after_action_info_container").addClass("errorbox");
|
||||
else
|
||||
$rightPanelContent.find("#after_action_info_container").removeClass("errorbox");
|
||||
$rightPanelContent.find("#after_action_info_container").show();
|
||||
$detailsTab.find("#after_action_info_container").removeClass("errorbox");
|
||||
$detailsTab.find("#after_action_info_container").show();
|
||||
}
|
||||
else {
|
||||
$rightPanelContent.find("#after_action_info").text("");
|
||||
$rightPanelContent.find("#after_action_info_container").hide();
|
||||
$detailsTab.find("#after_action_info").text("");
|
||||
$detailsTab.find("#after_action_info_container").hide();
|
||||
}
|
||||
|
||||
var jsonObj = $midmenuItem.data("jsonObj");
|
||||
|
||||
var vmName = getVmName(jsonObj.name, jsonObj.displayname);
|
||||
$rightPanelHeader.find("#vm_name").text(fromdb(vmName));
|
||||
updateVirtualMachineStateInRightPanel(jsonObj.state);
|
||||
$rightPanelContent.find("#ipAddress").text(jsonObj.ipaddress);
|
||||
$rightPanelContent.find("#zoneName").text(fromdb(jsonObj.zonename));
|
||||
$rightPanelContent.find("#templateName").text(fromdb(jsonObj.templatename));
|
||||
$rightPanelContent.find("#serviceOfferingName").text(fromdb(jsonObj.serviceofferingname));
|
||||
$rightPanelContent.find("#created").text(jsonObj.created);
|
||||
$rightPanelContent.find("#account").text(fromdb(jsonObj.account));
|
||||
$rightPanelContent.find("#domain").text(fromdb(jsonObj.domain));
|
||||
$rightPanelContent.find("#hostName").text(fromdb(jsonObj.hostname));
|
||||
$rightPanelContent.find("#group").text(fromdb(jsonObj.group));
|
||||
$detailsTab.find("#ipAddress").text(jsonObj.ipaddress);
|
||||
$detailsTab.find("#zoneName").text(fromdb(jsonObj.zonename));
|
||||
$detailsTab.find("#templateName").text(fromdb(jsonObj.templatename));
|
||||
$detailsTab.find("#serviceOfferingName").text(fromdb(jsonObj.serviceofferingname));
|
||||
$detailsTab.find("#created").text(jsonObj.created);
|
||||
$detailsTab.find("#account").text(fromdb(jsonObj.account));
|
||||
$detailsTab.find("#domain").text(fromdb(jsonObj.domain));
|
||||
$detailsTab.find("#hostName").text(fromdb(jsonObj.hostname));
|
||||
$detailsTab.find("#group").text(fromdb(jsonObj.group));
|
||||
|
||||
setBooleanField(jsonObj.haenable, $rightPanelContent.find("#ha"));
|
||||
setBooleanField((jsonObj.isoid != null && jsonObj.isoid.length > 0), $rightPanelContent.find("#iso"));
|
||||
setBooleanField(jsonObj.haenable, $detailsTab.find("#haenable"));
|
||||
setBooleanField((jsonObj.isoid != null && jsonObj.isoid.length > 0), $detailsTab.find("#iso"));
|
||||
|
||||
//volume tab
|
||||
//if (getHypervisorType() == "kvm")
|
||||
|
|
@ -418,7 +426,7 @@ function clickInstanceGroupHeader($arrowIcon) {
|
|||
success: function(json) {
|
||||
var items = json.listvolumesresponse.volume;
|
||||
if (items != null && items.length > 0) {
|
||||
var container = $rightPanelContent.find("#tab_content_volume").empty();
|
||||
var container = $detailsTab.find("#tab_content_volume").empty();
|
||||
var template = $("#volume_tab_template");
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var newTemplate = template.clone(true);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,28 @@ var g_zoneNames = [];
|
|||
function afterLoadIsoJSP() {
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
|
||||
//edit button ***
|
||||
var $readonlyFields = $detailsTab.find("#name, #displaytext");
|
||||
var $editFields = $detailsTab.find("#name_edit, #displaytext_edit");
|
||||
$("#edit_button").bind("click", function(event){
|
||||
$readonlyFields.hide();
|
||||
$editFields.show();
|
||||
$("#cancel_button, #save_button").show()
|
||||
return false;
|
||||
});
|
||||
$("#cancel_button").bind("click", function(event){
|
||||
$editFields.hide();
|
||||
$readonlyFields.show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
return false;
|
||||
});
|
||||
$("#save_button").bind("click", function(event){
|
||||
doUpdateIso();
|
||||
$editFields.hide();
|
||||
$readonlyFields.show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
return false;
|
||||
});
|
||||
|
||||
//populate dropdown ***
|
||||
$.ajax({
|
||||
|
|
@ -107,8 +129,13 @@ function isoJsonToDetailsTab(jsonObj) {
|
|||
$detailsTab.data("jsonObj", jsonObj);
|
||||
$detailsTab.find("#id").text(fromdb(jsonObj.id));
|
||||
$detailsTab.find("#zonename").text(fromdb(jsonObj.zonename));
|
||||
|
||||
$detailsTab.find("#name").text(fromdb(jsonObj.name));
|
||||
$detailsTab.find("#name_edit").val(fromdb(jsonObj.name));
|
||||
|
||||
$detailsTab.find("#displaytext").text(fromdb(jsonObj.displaytext));
|
||||
$detailsTab.find("#displaytext_edit").val(fromdb(jsonObj.displaytext));
|
||||
|
||||
$detailsTab.find("#account").text(fromdb(jsonObj.account));
|
||||
|
||||
if(jsonObj.size != null)
|
||||
|
|
@ -158,7 +185,22 @@ function isoJsonToDetailsTab(jsonObj) {
|
|||
}
|
||||
|
||||
function isoClearRightPanel() {
|
||||
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
|
||||
$detailsTab.find("#id").text("");
|
||||
$detailsTab.find("#zonename").text("");
|
||||
|
||||
$detailsTab.find("#name").text("");
|
||||
$detailsTab.find("#name_edit").val("");
|
||||
|
||||
$detailsTab.find("#displaytext").text("");
|
||||
$detailsTab.find("#displaytext_edit").val("");
|
||||
|
||||
$detailsTab.find("#account").text("");
|
||||
$detailsTab.find("#size").text("");
|
||||
$detailsTab.find("#status").text("");
|
||||
$detailsTab.find("#bootable").text("");
|
||||
$detailsTab.find("#created").text("");
|
||||
}
|
||||
|
||||
var isoActionMap = {
|
||||
|
|
@ -167,7 +209,7 @@ var isoActionMap = {
|
|||
isAsyncJob: true,
|
||||
asyncJobResponse: "deleteisosresponse",
|
||||
inProcessText: "Deleting ISO....",
|
||||
afterActionSeccessFn: function(jsonObj) {
|
||||
afterActionSeccessFn: function(jsonObj) {
|
||||
var $midmenuItem1 = $("#midmenuItem_"+jsonObj.id);
|
||||
$midmenuItem1.remove();
|
||||
clearRightPanel();
|
||||
|
|
@ -192,11 +234,38 @@ var isoActionMap = {
|
|||
}
|
||||
|
||||
var isoListAPIMap = {
|
||||
listAPI: "listisos&isofilter=self",
|
||||
listAPI: "listIsos&isofilter=self",
|
||||
listAPIResponse: "listisosresponse",
|
||||
listAPIResponseObj: "iso"
|
||||
};
|
||||
|
||||
function doUpdateIso() {
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
|
||||
// validate values
|
||||
var isValid = true;
|
||||
isValid &= validateString("Name", $detailsTab.find("#name_edit"), $detailsTab.find("#name_edit_errormsg"));
|
||||
isValid &= validateString("Display Text", $detailsTab.find("#displaytext_edit"), $detailsTab.find("#displaytext_edit_errormsg"));
|
||||
if (!isValid)
|
||||
return;
|
||||
|
||||
var jsonObj = $detailsTab.data("jsonObj");
|
||||
var id = jsonObj.id;
|
||||
|
||||
var name = trim($detailsTab.find("#name_edit").val());
|
||||
var displaytext = trim($detailsTab.find("#displaytext_edit").val());
|
||||
|
||||
$.ajax({
|
||||
data: createURL("command=updateIso&id="+id+"&name="+todb(name)+"&displayText="+todb(displaytext)),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
var jsonObj = json.updateisoresponse;
|
||||
isoToMidmenu(jsonObj, $("#midmenuItem_"+jsonObj.id));
|
||||
isoJsonToDetailsTab(jsonObj);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function populateZoneFieldExcludeSourceZone(zoneField, excludeZoneId) {
|
||||
zoneField.empty();
|
||||
if (g_zoneIds != null && g_zoneIds.length > 0) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,166 @@
|
|||
|
||||
// Version: @VERSION@
|
||||
|
||||
|
||||
//***** actions for details tab in right panel (begin) ************************************************************************
|
||||
function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap) {
|
||||
var apiInfo = actionMap[label];
|
||||
var $listItem = $("#action_list_item").clone();
|
||||
$actionMenu.find("#action_list").append($listItem.show());
|
||||
var $link = $listItem.find("#link").text(label);
|
||||
$link.data("label", label);
|
||||
$link.data("inProcessText", apiInfo.inProcessText);
|
||||
$link.data("api", apiInfo.api);
|
||||
$link.data("isAsyncJob", apiInfo.isAsyncJob);
|
||||
$link.data("asyncJobResponse", apiInfo.asyncJobResponse);
|
||||
$link.data("afterActionSeccessFn", apiInfo.afterActionSeccessFn);
|
||||
$link.data("dialogBeforeActionFn", apiInfo.dialogBeforeActionFn);
|
||||
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
var id = $detailsTab.data("jsonObj").id;
|
||||
|
||||
$link.bind("click", function(event) {
|
||||
$actionMenu.hide();
|
||||
var $actionLink = $(this);
|
||||
var dialogBeforeActionFn = $actionLink.data("dialogBeforeActionFn");
|
||||
if(dialogBeforeActionFn == null) {
|
||||
var apiCommand = "command="+$actionLink.data("api")+"&id="+id;
|
||||
doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap);
|
||||
}
|
||||
else {
|
||||
dialogBeforeActionFn($actionLink, listAPIMap, $detailsTab);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) {
|
||||
var label = $actionLink.data("label");
|
||||
var inProcessText = $actionLink.data("inProcessText");
|
||||
var isAsyncJob = $actionLink.data("isAsyncJob");
|
||||
var asyncJobResponse = $actionLink.data("asyncJobResponse");
|
||||
var afterActionSeccessFn = $actionLink.data("afterActionSeccessFn");
|
||||
var listAPI = listAPIMap["listAPI"];
|
||||
var listAPIResponse = listAPIMap["listAPIResponse"];
|
||||
var listAPIResponseObj = listAPIMap["listAPIResponseObj"];
|
||||
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
var $spinningWheel = $detailsTab.find("#spinning_wheel");
|
||||
$spinningWheel.find("#description").text(inProcessText);
|
||||
$spinningWheel.show();
|
||||
|
||||
//Async job (begin) *****
|
||||
if(isAsyncJob == true) {
|
||||
$.ajax({
|
||||
data: createURL(apiCommand),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
var jobId = json[asyncJobResponse].jobid;
|
||||
var timerKey = "asyncJob_" + jobId;
|
||||
$("body").everyTime(
|
||||
10000,
|
||||
timerKey,
|
||||
function() {
|
||||
$.ajax({
|
||||
data: createURL("command=queryAsyncJobResult&jobId="+jobId),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
var result = json.queryasyncjobresultresponse;
|
||||
if (result.jobstatus == 0) {
|
||||
return; //Job has not completed
|
||||
} else {
|
||||
$("body").stopTime(timerKey);
|
||||
$spinningWheel.hide();
|
||||
if (result.jobstatus == 1) { // Succeeded
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action succeeded.");
|
||||
$detailsTab.find("#action_message_box").removeClass("error").show();
|
||||
|
||||
//DestroyVirtualMachine API doesn't return an embedded object on success (Bug 6041)
|
||||
//Before Bug 6041 get fixed, use the temporary solution below.
|
||||
$.ajax({
|
||||
cache: false,
|
||||
data: createURL("command="+listAPI+"&id="+id),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
}
|
||||
});
|
||||
//After Bug 6037 is fixed, remove temporary solution above and uncomment the line below
|
||||
//afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
|
||||
} else if (result.jobstatus == 2) { // Failed
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(result.jobresult));
|
||||
$detailsTab.find("#action_message_box").addClass("error").show();
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
$("body").stopTime(timerKey);
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
},
|
||||
0
|
||||
);
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
}
|
||||
//Async job (end) *****
|
||||
|
||||
//Sync job (begin) *****
|
||||
else {
|
||||
$.ajax({
|
||||
data: createURL(apiCommand),
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(json) {
|
||||
$spinningWheel.hide();
|
||||
|
||||
//RecoverVirtualMachine API doesn't return an embedded object on success (Bug 6037)
|
||||
//Before Bug 6037 get fixed, use the temporary solution below.
|
||||
$.ajax({
|
||||
cache: false,
|
||||
data: createURL("command="+listAPI+"&id="+id),
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(json) {
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action succeeded.");
|
||||
$detailsTab.find("#action_message_box").removeClass("error").show();
|
||||
|
||||
afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
}
|
||||
});
|
||||
//After Bug 6037 is fixed, remove temporary solution above and uncomment the line below
|
||||
//afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
}
|
||||
//Sync job (end) *****
|
||||
}
|
||||
|
||||
function handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label) {
|
||||
$detailsTab.find("#spinning_wheel").hide();
|
||||
|
||||
var errorMsg = "";
|
||||
if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) {
|
||||
var start = XMLHttpResponse.responseText.indexOf("h1") + 3;
|
||||
var end = XMLHttpResponse.responseText.indexOf("</h1");
|
||||
errorMsg = XMLHttpResponse.responseText.substring(start, end);
|
||||
}
|
||||
if(errorMsg.length > 0)
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(unescape(errorMsg)));
|
||||
else
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed.");
|
||||
$detailsTab.find("#action_message_box").addClass("error").show();
|
||||
}
|
||||
//***** actions for details tab in right panel (end) **************************************************************************
|
||||
|
||||
//***** actions for middle menu (begin) ************************************************************************
|
||||
var selectedItemsInMidMenu = {};
|
||||
|
||||
|
|
@ -180,164 +340,6 @@ function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem) {
|
|||
}
|
||||
//***** actions for middle menu (end) **************************************************************************
|
||||
|
||||
//***** actions for details tab in right panel (begin) ************************************************************************
|
||||
function buildActionLinkForDetailsTab(label, actionMap, $actionMenu, listAPIMap) {
|
||||
var apiInfo = actionMap[label];
|
||||
var $listItem = $("#action_list_item").clone();
|
||||
$actionMenu.find("#action_list").append($listItem.show());
|
||||
var $link = $listItem.find("#link").text(label);
|
||||
$link.data("label", label);
|
||||
$link.data("inProcessText", apiInfo.inProcessText);
|
||||
$link.data("api", apiInfo.api);
|
||||
$link.data("isAsyncJob", apiInfo.isAsyncJob);
|
||||
$link.data("asyncJobResponse", apiInfo.asyncJobResponse);
|
||||
$link.data("afterActionSeccessFn", apiInfo.afterActionSeccessFn);
|
||||
$link.data("dialogBeforeActionFn", apiInfo.dialogBeforeActionFn);
|
||||
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
var id = $detailsTab.data("jsonObj").id;
|
||||
|
||||
$link.bind("click", function(event) {
|
||||
$actionMenu.hide();
|
||||
var $actionLink = $(this);
|
||||
var dialogBeforeActionFn = $actionLink.data("dialogBeforeActionFn");
|
||||
if(dialogBeforeActionFn == null) {
|
||||
var apiCommand = "command="+$actionLink.data("api")+"&id="+id;
|
||||
doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap);
|
||||
}
|
||||
else {
|
||||
dialogBeforeActionFn($actionLink, listAPIMap, $detailsTab);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function doActionToDetailsTab(id, $actionLink, apiCommand, listAPIMap) {
|
||||
var label = $actionLink.data("label");
|
||||
var inProcessText = $actionLink.data("inProcessText");
|
||||
var isAsyncJob = $actionLink.data("isAsyncJob");
|
||||
var asyncJobResponse = $actionLink.data("asyncJobResponse");
|
||||
var afterActionSeccessFn = $actionLink.data("afterActionSeccessFn");
|
||||
var listAPI = listAPIMap["listAPI"];
|
||||
var listAPIResponse = listAPIMap["listAPIResponse"];
|
||||
var listAPIResponseObj = listAPIMap["listAPIResponseObj"];
|
||||
|
||||
var $detailsTab = $("#right_panel_content #tab_content_details");
|
||||
var $spinningWheel = $detailsTab.find("#spinning_wheel");
|
||||
$spinningWheel.find("#description").text(inProcessText);
|
||||
$spinningWheel.show();
|
||||
|
||||
//Async job (begin) *****
|
||||
if(isAsyncJob == true) {
|
||||
$.ajax({
|
||||
data: createURL(apiCommand),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
var jobId = json[asyncJobResponse].jobid;
|
||||
var timerKey = "asyncJob_" + jobId;
|
||||
$("body").everyTime(
|
||||
10000,
|
||||
timerKey,
|
||||
function() {
|
||||
$.ajax({
|
||||
data: createURL("command=queryAsyncJobResult&jobId="+jobId),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
var result = json.queryasyncjobresultresponse;
|
||||
if (result.jobstatus == 0) {
|
||||
return; //Job has not completed
|
||||
} else {
|
||||
$("body").stopTime(timerKey);
|
||||
$spinningWheel.hide();
|
||||
if (result.jobstatus == 1) { // Succeeded
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action succeeded.");
|
||||
$detailsTab.find("#action_message_box").removeClass("error").show();
|
||||
|
||||
//DestroyVirtualMachine API doesn't return an embedded object on success (Bug 6041)
|
||||
//Before Bug 6041 get fixed, use the temporary solution below.
|
||||
$.ajax({
|
||||
cache: false,
|
||||
data: createURL("command="+listAPI+"&id="+id),
|
||||
dataType: "json",
|
||||
success: function(json) {
|
||||
afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
}
|
||||
});
|
||||
//After Bug 6037 is fixed, remove temporary solution above and uncomment the line below
|
||||
//afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
|
||||
} else if (result.jobstatus == 2) { // Failed
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(result.jobresult));
|
||||
$detailsTab.find("#action_message_box").addClass("error").show();
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
$("body").stopTime(timerKey);
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
},
|
||||
0
|
||||
);
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
}
|
||||
//Async job (end) *****
|
||||
|
||||
//Sync job (begin) *****
|
||||
else {
|
||||
$.ajax({
|
||||
data: createURL(apiCommand),
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(json) {
|
||||
$spinningWheel.hide();
|
||||
|
||||
//RecoverVirtualMachine API doesn't return an embedded object on success (Bug 6037)
|
||||
//Before Bug 6037 get fixed, use the temporary solution below.
|
||||
$.ajax({
|
||||
cache: false,
|
||||
data: createURL("command="+listAPI+"&id="+id),
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(json) {
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action succeeded.");
|
||||
$detailsTab.find("#action_message_box").removeClass("error").show();
|
||||
|
||||
afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
}
|
||||
});
|
||||
//After Bug 6037 is fixed, remove temporary solution above and uncomment the line below
|
||||
//afterActionSeccessFn(json[listAPIResponse][listAPIResponseObj][0]);
|
||||
},
|
||||
error: function(XMLHttpResponse) {
|
||||
handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label);
|
||||
}
|
||||
});
|
||||
}
|
||||
//Sync job (end) *****
|
||||
}
|
||||
|
||||
function handleErrorInDetailsTab(XMLHttpResponse, $detailsTab, label) {
|
||||
$detailsTab.find("#spinning_wheel").hide();
|
||||
|
||||
var errorMsg = "";
|
||||
if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) {
|
||||
var start = XMLHttpResponse.responseText.indexOf("h1") + 3;
|
||||
var end = XMLHttpResponse.responseText.indexOf("</h1");
|
||||
errorMsg = XMLHttpResponse.responseText.substring(start, end);
|
||||
}
|
||||
if(errorMsg.length > 0)
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed. Reason: " + sanitizeXSS(unescape(errorMsg)));
|
||||
else
|
||||
$detailsTab.find("#action_message_box #description").text(label + " action failed.");
|
||||
$detailsTab.find("#action_message_box").addClass("error").show();
|
||||
}
|
||||
//***** actions for details tab in right panel (end) **************************************************************************
|
||||
|
||||
//***** actions for a subgrid item in right panel (begin) ************************************************************************
|
||||
function buildActionLinkForSubgridItem(label, actionMap, $actionMenu, listAPIMap, $subgridItem) {
|
||||
|
|
@ -513,12 +515,12 @@ function todb(val) {
|
|||
var midmenuItemCount = 20;
|
||||
|
||||
function setBooleanField(value, $field) {
|
||||
if(value == "true")
|
||||
$field.find("#icon").removeClass("cross_icon").addClass("tick_icon").show();
|
||||
else if(value == "false")
|
||||
$field.find("#icon").removeClass("tick_icon").addClass("cross_icon").show();
|
||||
if(value == "true" || value == true)
|
||||
$field.text("Yes").show();
|
||||
else if(value == "false" || value == false)
|
||||
$field.text("No").show();
|
||||
else
|
||||
$field.find("#icon").hide();
|
||||
$field.hide();
|
||||
}
|
||||
|
||||
function clearLeftMenu() {
|
||||
|
|
|
|||
|
|
@ -9,24 +9,21 @@ function afterLoadTemplateJSP() {
|
|||
var $editFields = $detailsTab.find("#name_edit, #displaytext_edit, #passwordenabled_edit, #ispublic_edit, #isfeatured_edit, #ostypename_edit");
|
||||
$("#edit_button").bind("click", function(event){
|
||||
$readonlyFields.hide();
|
||||
$editFields.show();
|
||||
$(this).hide();
|
||||
$editFields.show();
|
||||
$("#cancel_button, #save_button").show()
|
||||
return false;
|
||||
});
|
||||
$("#cancel_button").bind("click", function(event){
|
||||
$editFields.hide();
|
||||
$readonlyFields.show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
$("#edit_button").show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
return false;
|
||||
});
|
||||
$("#save_button").bind("click", function(event){
|
||||
doUpdateTemplate();
|
||||
$editFields.hide();
|
||||
$readonlyFields.show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
$("#edit_button").show();
|
||||
$("#save_button, #cancel_button").hide();
|
||||
return false;
|
||||
});
|
||||
|
||||
|
|
@ -223,16 +220,16 @@ function templateClearRightPanel() {
|
|||
|
||||
$detailsTab.find("#status").text("");
|
||||
|
||||
setBooleanField(null, $detailsTab.find("#passwordenabled"));
|
||||
$detailsTab.find("#passwordenabled").text("");
|
||||
$detailsTab.find("#passwordenabled_edit").val(null);
|
||||
|
||||
setBooleanField(null, $detailsTab.find("#ispublic"));
|
||||
$detailsTab.find("#ispublic").text("");
|
||||
$detailsTab.find("#ispublic_edit").val(null);
|
||||
|
||||
setBooleanField(null, $detailsTab.find("#isfeatured"));
|
||||
$detailsTab.find("#isfeatured").text("");
|
||||
$detailsTab.find("#isfeatured_edit").val(null);
|
||||
|
||||
setBooleanField(null, $detailsTab.find("#crossZones"));
|
||||
$detailsTab.find("#crossZones").text("");
|
||||
|
||||
$detailsTab.find("#ostypename").text("");
|
||||
$detailsTab.find("#ostypename_edit").val(null);
|
||||
|
|
|
|||
Loading…
Reference in New Issue