From 31b22bf806b8d91a2acecd74a37ac3419f57d781 Mon Sep 17 00:00:00 2001 From: will Date: Thu, 31 Mar 2011 16:08:16 -0700 Subject: [PATCH] bug 9118: Updated snapshot UI to support multiple recurring snapshot policy --- .../classes/resources/messages.properties | 2 + ui/jsp/volume.jsp | 21 +++-- ui/scripts/cloud.core.volume.js | 85 ++++++++++++------- 3 files changed, 70 insertions(+), 38 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 2fdd1e50ea2..b4e3f1d8d5b 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -731,6 +731,8 @@ message.volume.create.template.confirm=Please confirm that you wish to create a message.zone.step.1.desc=Please select a network model for your zone. message.zone.step.2.desc=Please enter the following info to add a new zone message.zone.step.3.desc=Please enter the following info to add a new pod +message.apply.snapshot.policy=You have successfully updated your current snapshot policy. +message.disable.snapshot.policy=You have successfully disabled your current snapshot policy. #Errors error.login=Your username/password does not match our records. diff --git a/ui/jsp/volume.jsp b/ui/jsp/volume.jsp index d7263ffbde6..b34fd9de6e1 100644 --- a/ui/jsp/volume.jsp +++ b/ui/jsp/volume.jsp @@ -26,7 +26,9 @@ dictionary = { 'label.action.delete.snapshot' : '', 'label.action.delete.snapshot.processing' : '', 'message.action.delete.snapshot' : '', - 'message.download.volume' : '' + 'message.download.volume' : '', + 'message.disable.snapshot.policy' : '', + 'message.apply.snapshot.policy' : '' }; @@ -308,12 +310,11 @@ dictionary = {
 :   
+ + + + + : Enabled
@@ -541,6 +542,12 @@ dictionary = {
+ diff --git a/ui/scripts/cloud.core.volume.js b/ui/scripts/cloud.core.volume.js index 5f5cea11826..5d225e5c2dd 100644 --- a/ui/scripts/cloud.core.volume.js +++ b/ui/scripts/cloud.core.volume.js @@ -226,12 +226,16 @@ function afterLoadVolumeJSP() { $("#snapshot_interval").change(function(event) { var thisElement = $(this); var snapshotInterval = thisElement.val(); - var jsonObj = thisElement.data("jsonObj"); + var $snapshotIntervalOption = thisElement.find("#snapshot_interval_"+snapshotInterval); + var jsonObj = $snapshotIntervalOption.data("jsonObj"); var $dialog = $("#dialog_recurring_snapshot"); + if (jsonObj == undefined || jsonObj == null) { + $dialog.find("#policy_enabled").text("Disabled"); + } else { + $dialog.find("#policy_enabled").text("Enabled"); + } + $dialog.find("#info_container").hide(); switch (snapshotInterval) { - case "-1": - $dialog.find("#snapshot_form").hide(); - break; case "0": $dialog.find("#edit_time_colon, #edit_hour_container, #edit_meridiem_container, #edit_day_of_week_container, #edit_day_of_month_container").hide(); $dialog.find("#edit_past_the_hour, #edit_minute_container").show(); @@ -239,6 +243,10 @@ function afterLoadVolumeJSP() { $dialog.find("#edit_minute").val(jsonObj.schedule); $dialog.find("#edit_max").val(jsonObj.maxsnaps); $dialog.find("#edit_timezone").val(jsonObj.timezone); + } else { + $dialog.find("#edit_minute").val(""); + $dialog.find("#edit_max").val(""); + $dialog.find("#edit_timezone").val(""); } $dialog.find("#snapshot_form").show(); break; @@ -266,7 +274,13 @@ function afterLoadVolumeJSP() { $dialog.find("#edit_meridiem").val(meridiem); $dialog.find("#edit_max").val(jsonObj.maxsnaps); $dialog.find("#edit_timezone").val(jsonObj.timezone); - } + } else { + $dialog.find("#edit_minute").val(""); + $dialog.find("#edit_hour").val(""); + $dialog.find("#edit_meridiem").val(""); + $dialog.find("#edit_max").val(""); + $dialog.find("#edit_timezone").val(""); + } $dialog.find("#snapshot_form").show(); break; case "2": @@ -294,6 +308,13 @@ function afterLoadVolumeJSP() { $dialog.find("#edit_day_of_week").val(parts[2]); $dialog.find("#edit_max").val(jsonObj.maxsnaps); $dialog.find("#edit_timezone").val(jsonObj.timezone); + } else { + $dialog.find("#edit_minute").val(""); + $dialog.find("#edit_hour").val(""); + $dialog.find("#edit_meridiem").val(""); + $dialog.find("#edit_day_of_week").val(""); + $dialog.find("#edit_max").val(""); + $dialog.find("#edit_timezone").val(""); } $dialog.find("#snapshot_form").show(); break; @@ -321,6 +342,13 @@ function afterLoadVolumeJSP() { $dialog.find("#edit_day_of_month").val(parts[2]); $dialog.find("#edit_max").val(jsonObj.maxsnaps); $dialog.find("#edit_timezone").val(jsonObj.timezone); + } else { + $dialog.find("#edit_minute").val(""); + $dialog.find("#edit_hour").val(""); + $dialog.find("#edit_meridiem").val(""); + $dialog.find("#edit_day_of_month").val(""); + $dialog.find("#edit_max").val(""); + $dialog.find("#edit_timezone").val(""); } $dialog.find("#snapshot_form").show(); break; @@ -806,12 +834,15 @@ function doRecurringSnapshot($actionLink, $detailsTab, $midmenuItem1) { var items = json.listsnapshotpoliciesresponse.snapshotpolicy; var $snapInterval = dialogBox.find("#snapshot_interval"); if(items!=null && items.length>0) { - var item = items[0]; // We only expect a single policy. - $snapInterval.val(item.intervaltype).data("jsonObj", item); + for (var i = 0; i < items.length; i++) { + var item = items[i]; + $snapInterval.find("#snapshot_interval_"+item.intervaltype).data("jsonObj", item); + } } else { - $snapInterval.val("-1").data("jsonObj", null); + // Maybe use a different message } clearBottomPanel(); + $snapInterval.val("0"); //default to hourly $snapInterval.change(); dialogBox.dialog('option', 'buttons', { @@ -823,23 +854,6 @@ function doRecurringSnapshot($actionLink, $detailsTab, $midmenuItem1) { var intervalType = thisDialog.find("#snapshot_interval").val(); var minute, hour12, hour24, meridiem, dayOfWeek, dayOfWeekString, dayOfMonth, schedule, max, timezone; switch(intervalType) { - case "-1": - var $snapshotInterval = $(this).find("#snapshot_interval"); - var jsonObj = $snapshotInterval.data("jsonObj"); - if(jsonObj != null) { - $.ajax({ - data: createURL("command=deleteSnapshotPolicies&id="+jsonObj.id), - dataType: "json", - success: function(json) { - $snapshotInterval.val("-1"); - }, - error: function(XMLHttpResponse) { - handleError(XMLHttpResponse); - } - }); - } - thisDialog.dialog("close"); - return false; case "0": var isValid = true; isValid &= validateInteger("Keep # of snapshots", bottomPanel.find("#edit_max"), bottomPanel.find("#edit_max_errormsg")); @@ -906,11 +920,16 @@ function doRecurringSnapshot($actionLink, $detailsTab, $midmenuItem1) { break; } var thisLink; + var $snapshotInterval = thisDialog.find("#snapshot_interval"); + var $snapshotIntervalOption = thisDialog.find("#snapshot_interval_"+$snapshotInterval.val()); $.ajax({ data: createURL("command=createSnapshotPolicy&intervaltype="+intervalType+"&schedule="+schedule+"&volumeid="+volumeId+"&maxsnaps="+max+"&timezone="+todb(timezone)), dataType: "json", success: function(json) { - thisDialog.dialog("close"); + $snapshotIntervalOption.data("jsonObj", json.createsnapshotpolicyresponse.snapshotpolicy); + $snapshotInterval.change(); + thisDialog.find("#info").text(dictionary[message.apply.snapshot.policy]); + thisDialog.find("#info_container").show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); @@ -918,21 +937,25 @@ function doRecurringSnapshot($actionLink, $detailsTab, $midmenuItem1) { }); }, "Disable": function() { - var $snapshotInterval = $(this).find("#snapshot_interval"); - var jsonObj = $snapshotInterval.data("jsonObj"); + var thisDialog = $(this); + var $snapshotInterval = thisDialog.find("#snapshot_interval"); + var $snapshotIntervalOption = thisDialog.find("#snapshot_interval_"+$snapshotInterval.val()); + var jsonObj = $snapshotIntervalOption.data("jsonObj"); if(jsonObj != null) { $.ajax({ data: createURL("command=deleteSnapshotPolicies&id="+jsonObj.id), dataType: "json", - success: function(json) { - $snapshotInterval.val("-1"); + success: function(json) { + $snapshotIntervalOption.data("jsonObj", null); + $snapshotInterval.change(); + thisDialog.find("#info").text(dictionary[message.disable.snapshot.policy]); + thisDialog.find("#info_container").show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); } }); } - $(this).dialog("close"); }, "Close": function() { $(this).dialog("close");