From ff3b0b353262af924d81e6978aec27b46f91f17f Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 10 Jan 2011 14:20:10 -0800 Subject: [PATCH] bug 6361: security group page - ingress rule tab - implement authorizeSecurityGroupIngress API. --- ui/jsp/securitygroup.jsp | 69 +++--------- ui/scripts/cloud.core.js | 10 +- ui/scripts/cloud.core.securitygroup.js | 146 ++++++++++++------------- 3 files changed, 94 insertions(+), 131 deletions(-) diff --git a/ui/jsp/securitygroup.jsp b/ui/jsp/securitygroup.jsp index bc3710efc18..08d6b88d66c 100644 --- a/ui/jsp/securitygroup.jsp +++ b/ui/jsp/securitygroup.jsp @@ -224,60 +224,6 @@ - - - diff --git a/ui/scripts/cloud.core.js b/ui/scripts/cloud.core.js index d187a8c4b29..3c52fcf8f1e 100644 --- a/ui/scripts/cloud.core.js +++ b/ui/scripts/cloud.core.js @@ -722,18 +722,19 @@ function afterAddingMidMenuItem($midmenuItem1, isSuccessful, extraMessage) { } } +var $currentMidmenuItem; function bindClickToMidMenu($midmenuItem1, toRightPanelFn, getMidmenuIdFn) { $midmenuItem1.bind("click", function(event){ - var thisMidmenuItem = $(this); + $currentMidmenuItem = $(this); if(selected_midmenu_id != null && selected_midmenu_id.length > 0) $("#"+selected_midmenu_id).find("#content").removeClass("selected"); - selected_midmenu_id = getMidmenuIdFn(thisMidmenuItem.data("jsonObj")); + selected_midmenu_id = getMidmenuIdFn($currentMidmenuItem.data("jsonObj")); - thisMidmenuItem.find("#content").addClass("selected"); + $currentMidmenuItem.find("#content").addClass("selected"); clearRightPanel(); - toRightPanelFn(thisMidmenuItem); + toRightPanelFn($currentMidmenuItem); return false; }); } @@ -1014,6 +1015,7 @@ function clickItemInMultipleSelectionMidmenu($midmenuItem1) { selectedItemsInMidMenu[jsonObj.id] = $midmenuItem1; selected_midmenu_id = $midmenuItem1.attr("id"); + $currentMidmenuItem = $midmenuItem1; } var currentLeftMenuId; diff --git a/ui/scripts/cloud.core.securitygroup.js b/ui/scripts/cloud.core.securitygroup.js index e8bac5d716e..f675a65f48c 100644 --- a/ui/scripts/cloud.core.securitygroup.js +++ b/ui/scripts/cloud.core.securitygroup.js @@ -159,6 +159,9 @@ function initAddIngressRuleDialog() { $("#add_ingressrule_button").unbind("click").bind("click", function(event) { if($("#tab_ingressrule").hasClass("off")) $("#tab_ingressrule").click(); + + $dialogAddIngressRule.find("#spinning_wheel").hide(); + $dialogAddIngressRule.find("#info_container").hide(); $dialogAddIngressRule.find("#protocol").val("TCP"); $dialogAddIngressRule.find("#protocol").change(); @@ -181,57 +184,66 @@ function initAddIngressRuleDialog() { $("#dialog_add_ingress_rule") .dialog('option', 'buttons', { "Add": function() { - var thisDialog = $(this); - - var moreCriteria = []; - moreCriteria.push("&domainid="+domainId); - moreCriteria.push("&account="+account); - moreCriteria.push("&securitygroupname="+securityGroupName); - - var protocol = thisDialog.find("#protocol").val(); - if (protocol!=null && protocol.length > 0) - moreCriteria.push("&protocol="+encodeURIComponent(protocol)); - - // validate values (begin) + var $thisDialog = $(this); + $thisDialog.find("#info_container").hide(); + + // validate values var isValid = true; if(protocol == "ICMP") { - isValid &= validateNumber("Type", thisDialog.find("#icmp_type"), thisDialog.find("#icmp_type_errormsg"), -1, 40, false); //required - isValid &= validateNumber("Code", thisDialog.find("#icmp_code"), thisDialog.find("#icmp_code_errormsg"), -1 , 15, false); //required + isValid &= validateNumber("Type", $thisDialog.find("#icmp_type"), $thisDialog.find("#icmp_type_errormsg"), -1, 40, false); //required + isValid &= validateNumber("Code", $thisDialog.find("#icmp_code"), $thisDialog.find("#icmp_code_errormsg"), -1 , 15, false); //required } else { //TCP, UDP - isValid &= validateNumber("Start Port", thisDialog.find("#start_port"), thisDialog.find("#start_port_errormsg"), 1, 65535, false); //required - isValid &= validateNumber("End Port", thisDialog.find("#end_port"), thisDialog.find("#end_port_errormsg"), 1, 65535, false); //required + isValid &= validateNumber("Start Port", $thisDialog.find("#start_port"), $thisDialog.find("#start_port_errormsg"), 1, 65535, false); //required + isValid &= validateNumber("End Port", $thisDialog.find("#end_port"), $thisDialog.find("#end_port_errormsg"), 1, 65535, false); //required } - if(thisDialog.find("input[name='ingress_rule_type']:checked").val() == "cidr") { - isValid &= validateCIDR("CIDR", thisDialog.find(".cidr_template").eq(0).find("#cidr"), thisDialog.find(".cidr_template").eq(0).find("#cidr_errormsg"), false); //required - for(var i=1; i 0) + moreCriteria.push("&protocol="+encodeURIComponent(protocol)); + if(protocol == "ICMP") { - var icmpType = thisDialog.find("#icmp_type").val(); + var icmpType = $thisDialog.find("#icmp_type").val(); if (icmpType!=null && icmpType.length > 0) moreCriteria.push("&icmptype="+encodeURIComponent(icmpType)); - var icmpCode = thisDialog.find("#icmp_code").val(); + var icmpCode = $thisDialog.find("#icmp_code").val(); if (icmpCode!=null && icmpCode.length > 0) moreCriteria.push("&icmpcode="+encodeURIComponent(icmpCode)); } else { //TCP, UDP - var startPort = thisDialog.find("#start_port").val(); + var startPort = $thisDialog.find("#start_port").val(); if (startPort!=null && startPort.length > 0) moreCriteria.push("&startport="+encodeURIComponent(startPort)); - var endPort = thisDialog.find("#end_port").val(); + var endPort = $thisDialog.find("#end_port").val(); if (endPort!=null && endPort.length > 0) moreCriteria.push("&endport="+encodeURIComponent(endPort)); } @@ -254,25 +266,13 @@ function initAddIngressRuleDialog() { moreCriteria.push("&usersecuritygrouplist["+i+"].account="+accountElementArray[i].value+"&usersecuritygrouplist["+i+"].group="+securitygroupElementArray[i].value); } } - - thisDialog.dialog("close"); - - var ingressRuleTemplate = $("#security_group_ingress_rule_template").clone(true); - var loadingImg = ingressRuleTemplate.find(".adding_loading"); - var rowContainer = ingressRuleTemplate.find("#row_container"); - loadingImg.find(".adding_text").text("Adding...."); - loadingImg.show(); - rowContainer.hide(); - template.find("#ingress_rule_grid").append(ingressRuleTemplate.fadeIn("slow")); - template.find("#ingress_rule_grid").find("#no_ingress_rule").hide(); - + $.ajax({ data: createURL("command=authorizeSecurityGroupIngress"+moreCriteria.join("")), dataType: "json", success: function(json) { var jobId = json.authorizesecuritygroupingress.jobid; - var timerKey = "ingressRuleJob_"+jobId; - ingressRuleTemplate.attr("id","ingressRule_"+jobId); //temporary id until API call returns real id + var timerKey = "ingressRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, @@ -286,34 +286,35 @@ function initAddIngressRuleDialog() { return; //Job has not completed } else { $("body").stopTime(timerKey); - if (result.jobstatus == 1) { // Succeeded - var items = result.jobresult.securitygroup.ingressrule; - ingressRuleJSONToTemplate(items[0], ingressRuleTemplate).data("parentSecurityGroupId", securityGroupId).data("parentSecurityGroupDomainId", domainId).data("parentSecurityGroupAccount", account).data("parentSecurityGroupName",securityGroupName); + if (result.jobstatus == 1) { // Succeeded + $thisDialog.find("#spinning_wheel").hide(); + $thisDialog.dialog("close"); + var items = result.jobresult.securitygroup.ingressrule; + + var $subgridItem = $("#ingressrule_tab_template").clone(true); + securityGroupIngressRuleJSONToTemplate(items[0], $subgridItem).data("parentSecurityGroupId", securityGroupId).data("parentSecurityGroupDomainId", domainId).data("parentSecurityGroupAccount", account).data("parentSecurityGroupName",securityGroupName); + $subgridItem.find("#after_action_info").text("Ingress rule was added successfully."); + $subgridItem.find("#after_action_info_container").removeClass("error").addClass("success").show(); + $("#right_panel_content").find("#tab_content_ingressrule").find("#tab_container").prepend($subgridItem.show()); + if(items.length > 1) { - for(var i=1; i