package com.sobey.cmop.mvc.web.apply.iaas;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.sobey.cmop.mvc.comm.BaseController;
import com.sobey.cmop.mvc.constant.NetworkConstant;
import com.sobey.cmop.mvc.entity.NetworkElbItem;
/**
* 负责负载均衡器NetworkElbItem的管理
*
* @author liukai
*
*/
@Controller
@RequestMapping(value = "/apply/elb")
public class ELBController extends BaseController {
private static final String REDIRECT_SUCCESS_URL = "redirect:/apply/";
/**
* 跳转到新增页面
*/
@RequestMapping(value = "/save", method = RequestMethod.GET)
public String createForm(Model model) {
return "apply/elb/elbForm";
}
/**
* 新增N个ELB( N >= 1)
*
* <pre>
* 同一个ELB下的多个参数用"@"区分.
* 逗号","用于区分不同的ELB的参数.
* </pre>
*
* @param applyId
* @param keepSessions
* @param protocols
* 协议数组 格式{1-2-3,4-5-6}下同
* @param sourcePorts
* 源端口数组
* @param targetPorts
* 目标端口数组
* @param computeIds
* 关联实例数组
* @param redirectAttributes
* @return
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@RequestParam(value = "applyId") Integer applyId,
@RequestParam(value = "keepSessions") String[] keepSessions,
@RequestParam(value = "protocols", required = false) String[] protocols,
@RequestParam(value = "sourcePorts", required = false) String[] sourcePorts,
@RequestParam(value = "targetPorts", required = false) String[] targetPorts,
@RequestParam(value = "computeIds", required = false) String[] computeIds,
RedirectAttributes redirectAttributes) {
comm.elbService.saveELBToApply(applyId, keepSessions, protocols, sourcePorts, targetPorts, computeIds);
redirectAttributes.addFlashAttribute("message", "创建负载均衡器ELB成功.");
return REDIRECT_SUCCESS_URL;
}
/**
* 从服务申请表页面跳转到ELB的修改页面.
*/
@RequestMapping(value = "/update/{id}/applyId/{applyId}", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId, Model model) {
model.addAttribute("elb", comm.elbService.getNetworkElbItem(id));
return "apply/elb/elbUpateForm";
}
/**
* 修改单个ELB信息.
*
* <pre>
* 注意:接收的数组和新建的数组格式不同,只有",",没有"@".
* 修改ELB信息后,跳转到applyId的服务申请修改页面
* </pre>
*
* @param id
* @param applyId
* 服务申请单ID
* @param keepSession
* 是否保持会话
* @param protocols
* 协议数组
* @param sourcePorts
* 源端口数组
* @param targetPorts
* 目标端口数组
* @param computeIds
* 关联实例
* @param redirectAttributes
* @return
*/
@RequestMapping(value = "/update/{id}/applyId", method = RequestMethod.POST)
public String update(@PathVariable("id") Integer id, @RequestParam("applyId") Integer applyId,
@RequestParam(value = "keepSession") String keepSession,
@RequestParam(value = "protocols", required = false) String[] protocols,
@RequestParam(value = "sourcePort", required = false) String[] sourcePorts,
@RequestParam(value = "targetPort", required = false) String[] targetPorts,
@RequestParam(value = "computeIds", required = false) String[] computeIds,
RedirectAttributes redirectAttributes) {
NetworkElbItem networkElbItem = comm.elbService.getNetworkElbItem(id);
networkElbItem.setKeepSession(NetworkConstant.KeepSession.保持.toString().equals(keepSession) ? true : false);
comm.elbService.updateELBToApply(networkElbItem, protocols, sourcePorts, targetPorts, computeIds);
redirectAttributes.addFlashAttribute("message", "修改ELB " + networkElbItem.getIdentifier() + " 成功");
return "redirect:/apply/update/" + applyId;
}
/**
* 删除ELB后,跳转到applyId的服务申请修改页面
*/
@RequestMapping(value = "/delete/{id}/applyId/{applyId}")
public String delete(@PathVariable("id") Integer id, @PathVariable("applyId") Integer applyId,
RedirectAttributes redirectAttributes) {
comm.elbService.deleteNetworkElbItem(id);
redirectAttributes.addFlashAttribute("message", "删除ELB成功");
return "redirect:/apply/update/" + applyId;
}
}