From c49eada7bddbee7712708bd0a7566592a3698046 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 07:58:46 -0700 Subject: [PATCH 01/19] rename JSP file (to be consistent with javascript file) --- ui/new/jsp/{ip_address.jsp => ipaddress.jsp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ui/new/jsp/{ip_address.jsp => ipaddress.jsp} (100%) diff --git a/ui/new/jsp/ip_address.jsp b/ui/new/jsp/ipaddress.jsp similarity index 100% rename from ui/new/jsp/ip_address.jsp rename to ui/new/jsp/ipaddress.jsp From b6878714639eaa30d89f3852cf7045a150c96b8b Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 10:32:08 -0700 Subject: [PATCH 02/19] new UI - implement assign VM instance to load balancer rule. --- ui/new/jsp/ipaddress.jsp | 10 +- ui/new/scripts/cloud.core2.init.js | 2 +- ui/new/scripts/cloud.core2.ipaddress.js | 168 ++++++++++++------------ 3 files changed, 88 insertions(+), 92 deletions(-) diff --git a/ui/new/jsp/ipaddress.jsp b/ui/new/jsp/ipaddress.jsp index 1b5b7778a17..8f0ee9ee26c 100644 --- a/ui/new/jsp/ipaddress.jsp +++ b/ui/new/jsp/ipaddress.jsp @@ -325,9 +325,7 @@
-
@@ -338,7 +336,7 @@

- Assigning instance to load balancer policy …

+ Assigning instance to load balancer rule …

@@ -354,10 +352,10 @@
-
+
-
+
diff --git a/ui/new/scripts/cloud.core2.init.js b/ui/new/scripts/cloud.core2.init.js index 3d261233901..1ae6b076e3d 100644 --- a/ui/new/scripts/cloud.core2.init.js +++ b/ui/new/scripts/cloud.core2.init.js @@ -75,7 +75,7 @@ $(document).ready(function() { listMidMenuItems("leftmenu_account", "listAccounts", "listaccountsresponse", "account", "jsp/account.jsp", afterLoadAccountJSP, accountToMidmenu, accountToRigntPanel); listMidMenuItems("leftmenu_volume", "listVolumes", "listvolumesresponse", "volume", "jsp/volume.jsp", afterLoadVolumeJSP, volumeToMidmenu, volumeToRigntPanel); listMidMenuItems("leftmenu_snapshot", "listSnapshots", "listsnapshotsresponse", "snapshot", "jsp/snapshot.jsp", afterLoadSnapshotJSP, snapshotToMidmenu, snapshotToRigntPanel); - listMidMenuItems("leftmenu_ip", "listPublicIpAddresses", "listpublicipaddressesresponse", "publicipaddress", "jsp/ip_address.jsp", afterLoadIpJSP, ipToMidmenu, ipToRigntPanel, ipGetMidmenuId); + listMidMenuItems("leftmenu_ip", "listPublicIpAddresses", "listpublicipaddressesresponse", "publicipaddress", "jsp/ipaddress.jsp", afterLoadIpJSP, ipToMidmenu, ipToRigntPanel, ipGetMidmenuId); listMidMenuItems("leftmenu_router", "listRouters", "listroutersresponse", "router", "jsp/router.jsp", afterLoadRouterJSP, routerToMidmenu, routerToRigntPanel); listMidMenuItems("leftmenu_submenu_my_template", "listTemplates&templatefilter=self", "listtemplatesresponse", "template", "jsp/template.jsp", afterLoadTemplateJSP, templateToMidmenu, templateToRigntPanel, templateGetMidmenuId); diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index bfc8c54c56b..6a4e47124d0 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -89,7 +89,7 @@ function afterLoadIpJSP() { $("#tab_content_load_balancer #grid_content").append($template.show()); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); - $spinningWheel.find("#description").text("Adding...."); + $spinningWheel.find("#description").text("Adding load balancer rule...."); $spinningWheel.show(); var ipObj = $("#right_panel_content #tab_content_details").data("jsonObj"); @@ -220,20 +220,20 @@ function listPortForwardingRules(ipObj) { } //var portForwardingIndex = 0; -function portForwardingJsonToTemplate(jsonObj, template) { - //(portForwardingIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd"); - template.attr("id", "portForwarding_" + jsonObj.id).data("portForwardingId", jsonObj.id); +function portForwardingJsonToTemplate(jsonObj, $template) { + //(portForwardingIndex++ % 2 == 0)? $template.find("#row_container").addClass("smallrow_even"): $template.find("#row_container").addClass("smallrow_odd"); + $template.attr("id", "portForwarding_" + jsonObj.id).data("portForwardingId", jsonObj.id); - template.find("#row_container #public_port").text(jsonObj.publicport); - template.find("#row_container_edit #public_port").text(jsonObj.publicport); + $template.find("#row_container #public_port").text(jsonObj.publicport); + $template.find("#row_container_edit #public_port").text(jsonObj.publicport); - template.find("#row_container #private_port").text(jsonObj.privateport); - template.find("#row_container_edit #private_port").val(jsonObj.privateport); + $template.find("#row_container #private_port").text(jsonObj.privateport); + $template.find("#row_container_edit #private_port").val(jsonObj.privateport); - template.find("#row_container #protocol").text(jsonObj.protocol); - template.find("#row_container_edit #protocol").text(jsonObj.protocol); + $template.find("#row_container #protocol").text(jsonObj.protocol); + $template.find("#row_container_edit #protocol").text(jsonObj.protocol); - template.find("#row_container #vm_name").text(jsonObj.vmname); + $template.find("#row_container #vm_name").text(jsonObj.vmname); var virtualMachineId = jsonObj.virtualmachineid; var $detailsTab = $("#right_panel_content #tab_content_details"); @@ -247,7 +247,7 @@ function portForwardingJsonToTemplate(jsonObj, template) { dataType: "json", success: function(json) { var instances = json.listvirtualmachinesresponse.virtualmachine; - var vmSelect = template.find("#row_container_edit #vm").empty(); + var vmSelect = $template.find("#row_container_edit #vm").empty(); if (instances != null && instances.length > 0) { for (var i = 0; i < instances.length; i++) { var html = $(""); @@ -258,10 +258,10 @@ function portForwardingJsonToTemplate(jsonObj, template) { } }); - var $rowContainer = template.find("#row_container"); - var $rowContainerEdit = template.find("#row_container_edit"); + var $rowContainer = $template.find("#row_container"); + var $rowContainerEdit = $template.find("#row_container_edit"); - template.find("#delete_link").unbind("click").bind("click", function(event){ + $template.find("#delete_link").unbind("click").bind("click", function(event){ var $spinningWheel = $rowContainer.find("#spinning_wheel"); $spinningWheel.find("#description").text("Deleting...."); $spinningWheel.show(); @@ -269,7 +269,7 @@ function portForwardingJsonToTemplate(jsonObj, template) { data: createURL("command=deletePortForwardingRule&id="+jsonObj.id), dataType: "json", success: function(json) { - template.slideUp("slow", function(){ + $template.slideUp("slow", function(){ $(this).remove(); }); }, @@ -281,17 +281,17 @@ function portForwardingJsonToTemplate(jsonObj, template) { return false; }); - template.find("#edit_link").unbind("click").bind("click", function(event){ + $template.find("#edit_link").unbind("click").bind("click", function(event){ $rowContainer.hide(); $rowContainerEdit.show(); }); - template.find("#cancel_link").unbind("click").bind("click", function(event){ + $template.find("#cancel_link").unbind("click").bind("click", function(event){ $rowContainer.show(); $rowContainerEdit.hide(); }); - template.find("#save_link").unbind("click").bind("click", function(event){ + $template.find("#save_link").unbind("click").bind("click", function(event){ // validate values var isValid = true; isValid &= validateNumber("Private Port", $rowContainerEdit.find("#private_port"), $rowContainerEdit.find("#private_port_errormsg"), 1, 65535); @@ -332,7 +332,7 @@ function portForwardingJsonToTemplate(jsonObj, template) { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded var items = result.portforwardingrule; - portForwardingJsonToTemplate(items[0],template); + portForwardingJsonToTemplate(items[0],$template); $spinningWheel.hide(); $rowContainerEdit.hide(); $rowContainer.show(); @@ -402,38 +402,38 @@ function listLoadBalancerRules(ipObj) { loadBalancerGrid.empty(); if (items != null && items.length > 0) { for (var i = 0; i < items.length; i++) { - var template = $("#load_balancer_template").clone(true); - loadBalancerJsonToTemplate(items[i], template); - loadBalancerGrid.append(template.show()); + var $template = $("#load_balancer_template").clone(true); + loadBalancerJsonToTemplate(items[i], $template); + loadBalancerGrid.append($template.show()); } } } }); } -function loadBalancerJsonToTemplate(jsonObj, template) { - //(loadBalancerIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd"); +function loadBalancerJsonToTemplate(jsonObj, $template) { + //(loadBalancerIndex++ % 2 == 0)? $template.find("#row_container").addClass("smallrow_even"): $template.find("#row_container").addClass("smallrow_odd"); var loadBalancerId = jsonObj.id; - template.attr("id", "loadBalancer_" + loadBalancerId).data("loadBalancerId", loadBalancerId); + $template.attr("id", "loadBalancer_" + loadBalancerId).data("loadBalancerId", loadBalancerId); - template.find("#row_container #name").text(jsonObj.name); - template.find("#row_container_edit #name").val(jsonObj.name); + $template.find("#row_container #name").text(jsonObj.name); + $template.find("#row_container_edit #name").val(jsonObj.name); - template.find("#row_container #public_port").text(jsonObj.publicport); - template.find("#row_container_edit #public_port").text(jsonObj.publicport); + $template.find("#row_container #public_port").text(jsonObj.publicport); + $template.find("#row_container_edit #public_port").text(jsonObj.publicport); - template.find("#row_container #private_port").text(jsonObj.privateport); - template.find("#row_container_edit #private_port").val(jsonObj.privateport); + $template.find("#row_container #private_port").text(jsonObj.privateport); + $template.find("#row_container_edit #private_port").val(jsonObj.privateport); - template.find("#row_container #algorithm").text(jsonObj.algorithm); - template.find("#row_container_edit #algorithm").val(jsonObj.algorithm); + $template.find("#row_container #algorithm").text(jsonObj.algorithm); + $template.find("#row_container_edit #algorithm").val(jsonObj.algorithm); - template.find("#manage_link").unbind("click").bind("click", function(event){ - var managementArea = template.find("#management_area"); - var vmSubgrid = managementArea.find("#grid_content"); - if(managementArea.css("display") == "none") { - vmSubgrid.empty(); + $template.find("#manage_link").unbind("click").bind("click", function(event){ + var $managementArea = $template.find("#management_area"); + var $vmSubgrid = $managementArea.find("#grid_content"); + if($managementArea.css("display") == "none") { + $vmSubgrid.empty(); $.ajax({ cache: false, data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId), @@ -442,28 +442,28 @@ function loadBalancerJsonToTemplate(jsonObj, template) { var instances = json.listloadbalancerruleinstancesresponse.loadbalancerruleinstance; if (instances != null && instances.length > 0) { for (var i = 0; i < instances.length; i++) { - var lbVmTemplate = $("#load_balancer_vm_template").clone(); + var $lbVmTemplate = $("#load_balancer_vm_template").clone(); var obj = {"loadBalancerId": loadBalancerId, "vmId": instances[i].id, "vmName": getVmName(instances[i].name, instances[i].displayname), "vmPrivateIp": instances[i].privateip}; - lbVmObjToTemplate(obj, lbVmTemplate); - vmSubgrid.append(lbVmTemplate.show()); + lbVmObjToTemplate(obj, $lbVmTemplate); + $vmSubgrid.append($lbVmTemplate.show()); } } } }); - managementArea.show(); + $managementArea.show(); } else { - managementArea.hide(); + $managementArea.hide(); } return false; }); //??? - var loadingContainer = template.find("#loading_container"); - var rowContainer = template.find("#row_container"); - var rowContainerEdit = template.find("#row_container_edit"); + var loadingContainer = $template.find("#loading_container"); + var rowContainer = $template.find("#row_container"); + var rowContainerEdit = $template.find("#row_container_edit"); - template.find("#delete_link").unbind("click").bind("click", function(event){ + $template.find("#delete_link").unbind("click").bind("click", function(event){ loadingContainer.find(".adding_text").text("Deleting...."); loadingContainer.show(); rowContainer.hide(); @@ -487,7 +487,7 @@ function loadBalancerJsonToTemplate(jsonObj, template) { } else { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded - template.slideUp("slow", function() { + $template.slideUp("slow", function() { $(this).remove(); }); } else if (result.jobstatus == 2) { // Failed @@ -511,24 +511,24 @@ function loadBalancerJsonToTemplate(jsonObj, template) { return false; }); - template.find("#edit_link").unbind("click").bind("click", function(event){ + $template.find("#edit_link").unbind("click").bind("click", function(event){ rowContainer.hide(); rowContainerEdit.show(); }); - template.find("#cancel_link").unbind("click").bind("click", function(event){ + $template.find("#cancel_link").unbind("click").bind("click", function(event){ rowContainer.show(); rowContainerEdit.hide(); }); - template.find("#save_link").unbind("click").bind("click", function(event){ + $template.find("#save_link").unbind("click").bind("click", function(event){ // validate values var isValid = true; isValid &= validateString("Name", rowContainerEdit.find("#name"), rowContainerEdit.find("#name_errormsg")); isValid &= validateNumber("Private Port", rowContainerEdit.find("#private_port"), rowContainerEdit.find("#private_port_errormsg"), 1, 65535); if (!isValid) return; - var loadingContainer = template.find(".adding_loading"); + var loadingContainer = $template.find(".adding_loading"); loadingContainer.find(".adding_text").text("Saving...."); loadingContainer.show(); rowContainerEdit.hide(); @@ -562,7 +562,7 @@ function loadBalancerJsonToTemplate(jsonObj, template) { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded var items = result.loadbalancer; - loadBalancerJsonToTemplate(items[0],template); + loadBalancerJsonToTemplate(items[0],$template); loadingContainer.hide(); rowContainer.show(); } else if (result.jobstatus == 2) { //Fail @@ -589,57 +589,56 @@ function loadBalancerJsonToTemplate(jsonObj, template) { }); }); - refreshLbVmSelect(template, jsonObj.id); + refreshLbVmSelect($template, jsonObj.id); - template.find("#add_vm_to_lb_row #add_link").unbind("click").bind("click", function(event){ - var vmOption = template.find("#add_vm_to_lb_row #vm_select option:selected"); + $template.find("#add_vm_to_lb_row #assign_link").unbind("click").bind("click", function(event){ + var vmOption = $template.find("#add_vm_to_lb_row #vm_select option:selected"); var vmId = vmOption.val(); var vmName = vmOption.data("vmName"); var vmPrivateIp = vmOption.data("vmPrivateIp"); if(vmId == null || vmId.length == 0) return; - var loading = template.find("#adding_loading").show(); - var rowContainer = template.find("#adding_row_container").hide(); - + + var $spinningWheel = $template.find("#add_vm_to_lb_row #spinning_wheel"); + $spinningWheel.show(); + $.ajax({ data: createURL("command=assignToLoadBalancerRule&id="+loadBalancerId+"&virtualmachineid="+vmId), dataType: "json", success: function(json) { - var lbInstanceJSON = jsonObj.assigntoloadbalancerruleresponse; - var timerKey = "lbInstanceNew"+lbInstancejsonObj.jobid; + var lbInstanceJSON = json.assigntoloadbalancerruleresponse; + var jobId = lbInstanceJSON.jobid; + var timerKey = "assignToLoadBalancerRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ - data: createURL("command=queryAsyncJobResult&jobId="+lbInstancejsonObj.jobid), + data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { - var result = jsonObj.queryasyncjobresultresponse; + var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded - var lbVmTemplate = $("#load_balancer_vm_template").clone(); + var $lbVmTemplate = $("#load_balancer_vm_template").clone(); var obj = {"loadBalancerId": loadBalancerId, "vmId": vmId, "vmName": vmName, "vmPrivateIp": vmPrivateIp}; - lbVmObjToTemplate(obj, lbVmTemplate); - template.find("#management_area #grid_content").append(lbVmTemplate.show()); - refreshLbVmSelect(template, loadBalancerId); - loading.hide(); - rowContainer.show(); + lbVmObjToTemplate(obj, $lbVmTemplate); + $template.find("#management_area #grid_content").append($lbVmTemplate.show()); + refreshLbVmSelect($template, loadBalancerId); + $spinningWheel.hide(); } else if (result.jobstatus == 2) { // Failed $("#dialog_error").html("

Operation error:


"+ sanitizeXSS(result.jobresult)+"

").dialog("open"); - loading.hide(); - rowContainer.show(); + $spinningWheel.hide(); } } }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); $("body").stopTime(timerKey); - loading.hide(); - rowContainer.show(); + $spinningWheel.hide(); } }); }, @@ -648,8 +647,7 @@ function loadBalancerJsonToTemplate(jsonObj, template) { }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); - loading.hide(); - rowContainer.show(); + $spinningWheel.hide(); } }); return false; @@ -666,15 +664,15 @@ function refreshCreateLoadBalancerRow() { } -function lbVmObjToTemplate(obj, template) { - template.find("#vm_name").text(obj.vmName); - template.find("#vm_private_ip").text(obj.vmPrivateIp); - template.find("#remove_link").bind("click", function(event){ +function lbVmObjToTemplate(obj, $template) { + $template.find("#vm_name").text(obj.vmName); + $template.find("#vm_private_ip").text(obj.vmPrivateIp); + $template.find("#remove_link").bind("click", function(event){ var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.show(); - //var loading = template.find("#deleting_loading").show(); - //var rowContainer = template.find("#deleting_row_container").hide(); + //var loading = $template.find("#deleting_loading").show(); + //var rowContainer = $template.find("#deleting_row_container").hide(); $.ajax({ data: createURL("command=removeFromLoadBalancerRule&id="+obj.loadBalancerId+"&virtualmachineid="+obj.vmId), @@ -697,7 +695,7 @@ function lbVmObjToTemplate(obj, template) { $("body").stopTime(timerKey); if (result.jobstatus == 1) { // Succeeded refreshLbVmSelect($("#loadBalancer_" + obj.loadBalancerId), obj.loadBalancerId); - template.fadeOut("slow", function(event) { + $template.fadeOut("slow", function(event) { $(this).remove(); }); } else if (result.jobstatus == 2) { // Failed @@ -725,8 +723,8 @@ function lbVmObjToTemplate(obj, template) { }); } -function refreshLbVmSelect(template, loadBalancerId) { - var vmSelect = template.find("#add_vm_to_lb_row #vm_select"); +function refreshLbVmSelect($template, loadBalancerId) { + var vmSelect = $template.find("#add_vm_to_lb_row #vm_select"); // Load the select box with the VMs that haven't been applied a LB rule to. $.ajax({ cache: false, From ac9335d9d72310ff42f29c9b029b0809e9f939ef Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 10:39:27 -0700 Subject: [PATCH 03/19] new UI - implement remove VM instance from load balancer rule. --- ui/new/jsp/ipaddress.jsp | 2 +- ui/new/scripts/cloud.core2.ipaddress.js | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/ui/new/jsp/ipaddress.jsp b/ui/new/jsp/ipaddress.jsp index 8f0ee9ee26c..dd0e6185547 100644 --- a/ui/new/jsp/ipaddress.jsp +++ b/ui/new/jsp/ipaddress.jsp @@ -366,7 +366,7 @@

- Removing instance from load balancer policy …

+ Removing instance from load balancer rule …

diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index 6a4e47124d0..ea5eb1410be 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -667,25 +667,23 @@ function refreshCreateLoadBalancerRow() { function lbVmObjToTemplate(obj, $template) { $template.find("#vm_name").text(obj.vmName); $template.find("#vm_private_ip").text(obj.vmPrivateIp); - $template.find("#remove_link").bind("click", function(event){ - var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); + $template.find("#remove_link").bind("click", function(event){ + var $spinningWheel = $template.find("#spinning_wheel"); $spinningWheel.show(); - - //var loading = $template.find("#deleting_loading").show(); - //var rowContainer = $template.find("#deleting_row_container").hide(); - + $.ajax({ data: createURL("command=removeFromLoadBalancerRule&id="+obj.loadBalancerId+"&virtualmachineid="+obj.vmId), dataType: "json", success: function(json) { var lbJSON = json.removefromloadbalancerruleresponse; - var timerKey = "removeVmFromLb"+obj.vmId; + var jobId = lbJSON.jobid; + var timerKey = "removeFromLoadBalancerRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ - data: createURL("command=queryAsyncJobResult&jobId="+lbJSON.jobid), + data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; From 3d3d2f58364e8cdc27400ae128f768e97b24c71f Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 11:10:13 -0700 Subject: [PATCH 04/19] new UI - implement update load balancer rule. --- ui/new/jsp/ipaddress.jsp | 7 +++ ui/new/scripts/cloud.core2.ipaddress.js | 74 +++++++++++++------------ 2 files changed, 45 insertions(+), 36 deletions(-) diff --git a/ui/new/jsp/ipaddress.jsp b/ui/new/jsp/ipaddress.jsp index dd0e6185547..dd77853ed37 100644 --- a/ui/new/jsp/ipaddress.jsp +++ b/ui/new/jsp/ipaddress.jsp @@ -314,6 +314,13 @@ Cancel
+ -
+
diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index b1dbb186168..a1f72ad1670 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -112,7 +112,7 @@ function afterLoadIpJSP() { dataType: "json", success: function(json) { var items = json.createloadbalancerruleresponse.loadbalancerrule; - loadBalancerJsonToTemplate(items[0],$template); + loadBalancerJsonToTemplate(items[0], $template); $spinningWheel.hide(); refreshCreateLoadBalancerRow(); }, @@ -431,7 +431,7 @@ function loadBalancerJsonToTemplate(jsonObj, $template) { $template.find("#manage_link").unbind("click").bind("click", function(event){ var $managementArea = $template.find("#management_area"); - var $vmSubgrid = $managementArea.find("#grid_content"); + var $vmSubgrid = $managementArea.find("#subgrid_content"); if($managementArea.css("display") == "none") { $vmSubgrid.empty(); $.ajax({ @@ -631,7 +631,7 @@ function loadBalancerJsonToTemplate(jsonObj, $template) { var $lbVmTemplate = $("#load_balancer_vm_template").clone(); var obj = {"loadBalancerId": loadBalancerId, "vmId": vmId, "vmName": vmName, "vmPrivateIp": vmPrivateIp}; lbVmObjToTemplate(obj, $lbVmTemplate); - $template.find("#management_area #grid_content").append($lbVmTemplate.show()); + $template.find("#management_area #subgrid_content").append($lbVmTemplate.show()); refreshLbVmSelect($template, loadBalancerId); $spinningWheel.hide(); } else if (result.jobstatus == 2) { // Failed From ccc8485942d0274f242462b87732624ea2d9ff13 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 12:05:36 -0700 Subject: [PATCH 07/19] new UI - load balancer - collapse vm management area when deleting a load balancer rule. --- ui/new/scripts/cloud.core2.ipaddress.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index a1f72ad1670..4d5ba02a60b 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -462,6 +462,10 @@ function loadBalancerJsonToTemplate(jsonObj, $template) { var $rowContainerEdit = $template.find("#row_container_edit"); $template.find("#delete_link").unbind("click").bind("click", function(event){ + var $managementArea = $template.find("#management_area"); + if($managementArea.css("display") != "none") + $managementArea.hide(); + var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text("Deleting load balancer rule...."); $spinningWheel.show(); From 385f14e9ae542fa9bf21de09db58261c253e0800 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 12:36:31 -0700 Subject: [PATCH 08/19] new UI - port forwarding - display vmname and vmdisplayname (defined by user). --- ui/new/scripts/cloud.core2.ipaddress.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index 4d5ba02a60b..c7a6e94d26c 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -232,8 +232,9 @@ function portForwardingJsonToTemplate(jsonObj, $template) { $template.find("#row_container #protocol").text(jsonObj.protocol); $template.find("#row_container_edit #protocol").text(jsonObj.protocol); - - $template.find("#row_container #vm_name").text(jsonObj.vmname); + + var vmName = getVmName(jsonObj.vmname, jsonObj.vmdisplayname); //jsonObj doesn't include vmdisplayname property(incorrect). Waiting for Bug 6241 to be fixed.... + $template.find("#row_container #vm_name").text(vmName); var virtualMachineId = jsonObj.virtualmachineid; var $detailsTab = $("#right_panel_content #tab_content_details"); @@ -674,11 +675,11 @@ function refreshCreateLoadBalancerRow() { function lbVmObjToTemplate(obj, $template) { $template.find("#vm_name").text(obj.vmName); - $template.find("#vm_private_ip").text(obj.vmPrivateIp); + $template.find("#vm_private_ip").text(obj.vmPrivateIp); + $template.find("#remove_link").bind("click", function(event){ var $spinningWheel = $template.find("#spinning_wheel"); - $spinningWheel.show(); - + $spinningWheel.show(); $.ajax({ data: createURL("command=removeFromLoadBalancerRule&id="+obj.loadBalancerId+"&virtualmachineid="+obj.vmId), dataType: "json", @@ -691,7 +692,7 @@ function lbVmObjToTemplate(obj, $template) { timerKey, function() { $.ajax({ - data: createURL("command=queryAsyncJobResult&jobId="+jobId), + data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; From 53cd82027f72ddaa9678813bdc747f9218c9b45a Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Sun, 19 Sep 2010 23:22:23 -0700 Subject: [PATCH 09/19] new UI - IP address page - hide port forwarding tab and load balancer tab to non-manageable IP (i.e. IP of System VM) --- ui/new/scripts/cloud.core2.ipaddress.js | 27 +++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/ui/new/scripts/cloud.core2.ipaddress.js b/ui/new/scripts/cloud.core2.ipaddress.js index c7a6e94d26c..9648850ff8c 100644 --- a/ui/new/scripts/cloud.core2.ipaddress.js +++ b/ui/new/scripts/cloud.core2.ipaddress.js @@ -125,8 +125,6 @@ function afterLoadIpJSP() { }); return false; }); - - } function ipGetMidmenuId(jsonObj) { @@ -145,18 +143,31 @@ function ipToMidmenu(jsonObj, $midmenuItem1) { $midmenuItem1.find("#second_row").text(fromdb(jsonObj.account).substring(0,25)); } +function isIpManageable(domainid, account) { + if((g_domainid == domainid && g_account == account) || (isAdmin() && account!="system")) + return true; + else + return false; +} + function ipToRigntPanel($midmenuItem1) { var ipObj = $midmenuItem1.data("jsonObj"); //Details tab ipJsonToDetailsTab(ipObj); + $("#tab_details").click(); - //Port Forwarding tab - listPortForwardingRules(ipObj); - refreshCreatePortForwardingRow(); - - //Load Balancer tab - listLoadBalancerRules(ipObj); + //Port Forwarding tab, Load Balancer tab + if(isIpManageable(ipObj.domainid, ipObj.account) == true) { + $("#tab_port_forwarding, #tab_load_balancer").show(); + listPortForwardingRules(ipObj); + refreshCreatePortForwardingRow(); + listLoadBalancerRules(ipObj); + refreshCreateLoadBalancerRow(); + } + else { + $("#tab_port_forwarding, #tab_load_balancer").hide(); + } } function ipJsonToDetailsTab(jsonObj) { From a39fad5da441f2e9709e92cbbeea33deb1c4abb5 Mon Sep 17 00:00:00 2001 From: nit Date: Mon, 20 Sep 2010 13:09:33 +0530 Subject: [PATCH 10/19] bug 3384: listVolumes: allowing regular user to make a search by "type". status 3384: resolved fixed --- server/src/com/cloud/api/commands/ListVolumesCmd.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListVolumesCmd.java b/server/src/com/cloud/api/commands/ListVolumesCmd.java index 006f1565ca2..29959ba3935 100755 --- a/server/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/server/src/com/cloud/api/commands/ListVolumesCmd.java @@ -131,9 +131,9 @@ public class ListVolumesCmd extends BaseCmd{ } else { c.addCriteria(Criteria.ID, id); c.addCriteria(Criteria.INSTANCEID, vmId); - c.addCriteria(Criteria.NAME, name); - if (isAdmin) { - c.addCriteria(Criteria.VTYPE, type); + c.addCriteria(Criteria.NAME, name); + c.addCriteria(Criteria.VTYPE, type); + if (isAdmin) { c.addCriteria(Criteria.DATACENTERID, zoneId); c.addCriteria(Criteria.PODID, podId); c.addCriteria(Criteria.HOSTID, hostId); From b606d143965fce3a17fab38f91c1d52e9d1e11f0 Mon Sep 17 00:00:00 2001 From: kishan Date: Mon, 20 Sep 2010 15:00:57 +0530 Subject: [PATCH 11/19] Bug 5904: Included version in API header --- .../com/cloud/server/ManagementServer.java | 5 +++++ server/src/com/cloud/api/BaseCmd.java | 9 ++++---- .../cloud/server/ManagementServerImpl.java | 22 +++++++++++-------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/core/src/com/cloud/server/ManagementServer.java b/core/src/com/cloud/server/ManagementServer.java index 9fc6d672b9c..eebb93f3f5e 100755 --- a/core/src/com/cloud/server/ManagementServer.java +++ b/core/src/com/cloud/server/ManagementServer.java @@ -2253,5 +2253,10 @@ public interface ManagementServer { URISyntaxException, InternalErrorException; long extractTemplateAsync(String url, Long templateId, Long zoneId) throws URISyntaxException; long extractVolumeAsync(String url, Long volumeId, Long zoneId) throws URISyntaxException; + + /* + * Fetches the version of cloud stack + */ + String getVersion(); } diff --git a/server/src/com/cloud/api/BaseCmd.java b/server/src/com/cloud/api/BaseCmd.java index e1f42327b4c..cf34dfd65ac 100755 --- a/server/src/com/cloud/api/BaseCmd.java +++ b/server/src/com/cloud/api/BaseCmd.java @@ -624,13 +624,14 @@ public abstract class BaseCmd { StringBuffer sb = new StringBuffer(); if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { // JSON response - sb.append("{ \"" + getName() + "\" : { \"errorcode\" : \"" + apiException.getErrorCode() + "\", \"description\" : \"" + apiException.getDescription() + "\" } }"); + sb.append("{ \"" + getName() + "\" : { " + "\"@attributes\":{\"cloud-stack-version\":\""+getManagementServer().getVersion()+"\"},"); + sb.append("\"errorcode\" : \"" + apiException.getErrorCode() + "\", \"description\" : \"" + apiException.getDescription() + "\" } }"); } else { sb.append(""); sb.append("<" + getName() + ">"); sb.append("" + apiException.getErrorCode() + ""); sb.append("" + escapeXml(apiException.getDescription()) + ""); - sb.append(""); + sb.append(""); } return sb.toString(); } @@ -640,10 +641,10 @@ public abstract class BaseCmd { // set up the return value with the name of the response if (RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { - sb.append("{ \"" + getName() + "\" : { "); + sb.append("{ \"" + getName() + "\" : { \"@attributes\":{\"cloud-stack-version\":\""+getManagementServer().getVersion()+"\"},"); } else { sb.append(""); - sb.append("<" + getName() + ">"); + sb.append("<" + getName() + " cloud-stack-version=\""+getManagementServer().getVersion()+ "\">"); } int i = 0; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index ddd67097aac..2ebf529e3f2 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -8899,15 +8899,8 @@ public class ManagementServerImpl implements ManagementServer { if(networkGroupsEnabled == null) networkGroupsEnabled = "false"; - capabilities.put("networkGroupsEnabled", networkGroupsEnabled); - - final Class c = this.getClass(); - String fullVersion = c.getPackage().getImplementationVersion(); - String version = "unknown"; - if(fullVersion.length() > 0){ - version = fullVersion.substring(0,fullVersion.lastIndexOf(".")); - } - capabilities.put("cloudStackVersion", version); + capabilities.put("networkGroupsEnabled", networkGroupsEnabled); + capabilities.put("cloudStackVersion", getVersion()); return capabilities; } @@ -9049,6 +9042,17 @@ public class ManagementServerImpl implements ManagementServer { public List searchForZoneWideVlans(long dcId, String vlanType, String vlanId){ return _vlanDao.searchForZoneWideVlans(dcId, vlanType, vlanId); } + + @Override + public String getVersion(){ + final Class c = this.getClass(); + String fullVersion = c.getPackage().getImplementationVersion(); + String version = "unknown"; + if(fullVersion.length() > 0){ + version = fullVersion.substring(0,fullVersion.lastIndexOf(".")); + } + return version; + } } From b0fb42460ff8d18dfc05fc74f5d41c31079508bc Mon Sep 17 00:00:00 2001 From: NIKITA Date: Mon, 20 Sep 2010 11:36:11 -0700 Subject: [PATCH 12/19] Title icon for Alerts --- ui/new/jsp/alert.jsp | 116 +++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/ui/new/jsp/alert.jsp b/ui/new/jsp/alert.jsp index ce1c4cee77f..68409619074 100644 --- a/ui/new/jsp/alert.jsp +++ b/ui/new/jsp/alert.jsp @@ -1,59 +1,59 @@ -<%@ page import="java.util.*" %> -<%@ page import="com.cloud.utils.*" %> - -<% - Locale browserLocale = request.getLocale(); - CloudResourceBundle t = CloudResourceBundle.getBundle("resources/resource", browserLocale); -%> - - -
- -

Alert -

-
-
- -
-
- <%=t.t("Details")%>
-
-
-
-
-
- <%=t.t("Type")%>:
-
-
-
-
-
-
-
-
-
- <%=t.t("Description")%>:
-
-
-
-
-
-
-
-
-
- <%=t.t("Sent")%>:
-
-
-
-
-
-
-
-
+<%@ page import="java.util.*" %> +<%@ page import="com.cloud.utils.*" %> + +<% + Locale browserLocale = request.getLocale(); + CloudResourceBundle t = CloudResourceBundle.getBundle("resources/resource", browserLocale); +%> + + +
+ +
+ Alerts
+ +

Alerts +

+
+
+ +
+
+ <%=t.t("Details")%>
+
+
+
+
+
+ <%=t.t("Type")%>:
+
+
+
+
+
+
+
+
+
+ <%=t.t("Description")%>:
+
+
+
+
+
+
+
+
+
+ <%=t.t("Sent")%>:
+
+
+
+
+
+
+
+
\ No newline at end of file From 207cee40a79b2daa2df0f6bbe194db7bf0bff029 Mon Sep 17 00:00:00 2001 From: NIKITA Date: Mon, 20 Sep 2010 13:13:39 -0700 Subject: [PATCH 13/19] UI for Advanced Search Popup --- ui/new/css/main.css | 169 +++++++++++++++++++++++ ui/new/images/adv_searchbutton.gif | Bin 0 -> 781 bytes ui/new/images/adv_searchbutton_hover.gif | Bin 0 -> 781 bytes ui/new/index.jsp | 50 ++++++- 4 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 ui/new/images/adv_searchbutton.gif create mode 100644 ui/new/images/adv_searchbutton_hover.gif diff --git a/ui/new/css/main.css b/ui/new/css/main.css index dab70890c0e..2e7d0eede73 100644 --- a/ui/new/css/main.css +++ b/ui/new/css/main.css @@ -1386,6 +1386,7 @@ a:visited { width:223px; height:27px; float:left; + position:relative; margin:0; padding:0; background:url(../images/actionpanel_border.gif) no-repeat top right; @@ -1460,6 +1461,174 @@ a:visited { padding:0; } +.adv_searchpopup { + width:156px; + height:auto; + float:left; + position:absolute; + background:#fefae7 repeat top left; + border:1px solid #999; + top:5px; + left:8px; + margin:0; + padding:0; + z-index:1005; +} + +.adv_searchformbox { + width:140px; + height:auto; + float:left; + margin:0 0 10px 10px; + display:inline; + padding:0; +} + +.adv_searchformbox a:link { + width:auto; + height:auto; + float:right; + text-align:left; + text-decoration:underline; + font-size:10px; + font-weight:normal; + color: #2c8bbc; + margin: 7px 5px 0 0; + padding:0; +} + +.adv_searchformbox a:visited { + width:auto; + height:auto; + float:right; + text-align:left; + text-decoration:underline; + font-size:10px; + font-weight:normal; + color: #2c8bbc; + margin: 7px 5px 0 0; + padding:0; +} +.adv_searchformbox a:hover { + width:auto; + height:auto; + float:right; + text-align:left; + text-decoration:none; + font-size:10px; + font-weight:normal; + color: #2c8bbc; + margin: 7px 5px 0 0; + padding:0; +} + +.adv_searchformbox h3 { + width:auto; + height:auto; + color:#2d6487; + font-size:11px; + font-weight:bold; + float:left; + margin:8px 0 7px 0; + padding:0; +} + +.adv_searchformbox ol { + width: auto; + color:#333; + float:left; + font-family:Arial, Helvetica, sans-serif; + font-size:11px; + list-style:none; +} + +.adv_searchformbox li { + width:140px; + float:left; + clear:left; + font-family:Arial, Helvetica, sans-serif; + color:#333; + font-weight:normal; + margin:0 0 7px 0; +} + +.adv_searchformbox label { + width:45px; + float:left; + clear:left; + font-family:Arial, Helvetica, sans-serif; + color:#333; + font-size:10px; + font-weight:normal; + margin:2px 5px 0 0; +} + +.adv_searchformbox .text { + background-color: #FFF; + font: normal 11px Arial, Helvetica, sans-serif; + float:left; + border: 1px solid #CCC; + height: 13px; + width: 80px; + color:#666; + margin:0; + padding:1px 0 0 2px; + font-weight:normal; +} + +.adv_searchformbox .select { + background-color: #FFF; + font: normal 11px Arial, Helvetica, sans-serif; + float:left; + border: 1px solid #CCC; + height: 17px; + width: 83px; + margin:0; + padding:1px 0 0 2px; + color:#666; +} + + +.adv_search_actionbox { + width:140px; + height:20px; + float:left; + margin:5px 0 0 0; + padding:0; +} +.adv_searchpopup_button { + width:49px; + height:16px; + float:left; + background:url(../images/adv_searchbutton.gif) no-repeat top left; + margin:0 5px 0 0; + display:inline; + padding:0; + cursor:pointer; + cursor:hand; +} + +.adv_searchpopup_button:hover { + background:url(../images/adv_searchbutton_hover.gif) no-repeat top left; +} + +a.search_button { + width:26px; + height:25px; + float:left; + margin-left:10px; + display:inline; + text-decoration:none; + background:url(../images/searchicon_button.jpg) no-repeat top left; + padding:0; +} + + + +a:hover.search_button { + background:url(../images/searchicon_button_hover.jpg) no-repeat top left; +} + .actionpanel_button_wrapper{ width:auto; height:27px; diff --git a/ui/new/images/adv_searchbutton.gif b/ui/new/images/adv_searchbutton.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7b424d7535239388999a7e1e370cad5369ccd14 GIT binary patch literal 781 zcmZ?wbhEHbG-ME9c*el+_QR)jdpsUJ-}~d|`#X=;9zI*ScCYP*eO?cr?OC+RbipQ> zhtKyuc)I8N&v(Z!)~wm({^aGp1E+IV?R4FJJmctv>g)ICA30Zb?cThb4_2?RZS%VF}yhWgK(X^UdEZxO%_jiap{>cZx3BCfqrf zv11Oy|Ns9PC;*B-S-`q=KqM$m7})LMO`Er@OWD37B}z9t+evHZ!9#~r90HH*NIrEs zIVi$gUsUwWm8;j1gSD@pj=g&?mYMA?*CQ^0Y=NildtGDMG?|UL#Iu=IV+F*SAKt$o z|DR#Mi^PM2j&1cUN*pR5Qkf6)Wbb21Ut=^9&~W0|^=oX-rH899e2}Vws;EyuDe%WJg8<^TFm_Wj`>uaCX`_WtJ|?}NAej@-?;@NDJNk4;yfuYLY`?c;Yx-hBP=>(BZp z@AJ+*ZoTnRZu4co;}7i*-P783CF=OW4KKeueD&h`%X@Qf?D4+v>fVw-PYrrvq2 zvhC`^2XE)zef{9;&*kN_uM+8xAU6kk-L{a zeqVm)!2K^j-A_Nu+O)F1&F( z{eor1X@+Gd|NsBbKrT@H$pY4@10q3j!odE&fuSiRrM0cSqqD2KBTA)-!AUWF%G7Do zXUv>6Q(LvkHDlqT#Y>hhTfRaq)HrkPy7e12ZrZ$MUF!B7sd@%EIZ81*4<0(4>S%ss zN7|{=X~CLl&SGL`u3WvA7T|IHblly0aqJv-c^>ib=kPz(*y|R@5yY;~Ba*}J6~`~a z{_y_&g#Qc&O-?i%Y;3P*mg10MNMmy5&p9A)^25XCW=12m6vpPphesP2k9WveUSepM zuspUw@W7;A4;`7D9VQA6OBk3{^7|HgPFgZ!zC-^ThE>hI5@w8(*aU(Xy0>b$F{}KT znXpnqEooKPM6NBXXBZ?LZoBEUz*&Mx_fUp{K$>%-0c)1ooK#`AL$^0eS*`d{xU`{V zSNYMVzfL@L$+f}Yn-%=6v7?d|Oy#p_=(F>r9-J
- +
Advanced + +