package com.sobey.cmop.mvc.comm;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.shiro.SecurityUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import com.sobey.cmop.mvc.constant.AccountConstant;
import com.sobey.cmop.mvc.constant.ApplyConstant;
import com.sobey.cmop.mvc.constant.AuditConstant;
import com.sobey.cmop.mvc.constant.CPConstant;
import com.sobey.cmop.mvc.constant.ComputeConstant;
import com.sobey.cmop.mvc.constant.HostServerConstant;
import com.sobey.cmop.mvc.constant.IpPoolConstant;
import com.sobey.cmop.mvc.constant.MdnConstant;
import com.sobey.cmop.mvc.constant.MonitorConstant;
import com.sobey.cmop.mvc.constant.NetworkConstant;
import com.sobey.cmop.mvc.constant.RedmineConstant;
import com.sobey.cmop.mvc.constant.ResourcesConstant;
import com.sobey.cmop.mvc.constant.StorageConstant;
import com.sobey.cmop.mvc.entity.Apply;
import com.sobey.cmop.mvc.entity.ComputeItem;
import com.sobey.cmop.mvc.entity.Department;
import com.sobey.cmop.mvc.entity.Location;
import com.sobey.cmop.mvc.entity.NetworkEipItem;
import com.sobey.cmop.mvc.entity.NetworkElbItem;
import com.sobey.cmop.mvc.entity.NetworkEsgItem;
import com.sobey.cmop.mvc.entity.ServiceTag;
import com.sobey.cmop.mvc.entity.User;
import com.sobey.cmop.mvc.entity.Vlan;
import com.sobey.cmop.mvc.service.account.ShiroDbRealm.ShiroUser;
/**
* Contoller的基类.
*
* <pre>
* 包含了常用的分页,查询参数,当前用户ID,所有业务的Service注入等.
* 建议每个Controller都实现此类.
* </pre>
*
* @author liukai
*
*/
public class BaseController {
/**
* 公共的Service
*/
@Resource
public CommonService comm;
/**
* 分页:每页行数 : 10
*/
public static final String PAGE_SIZE = "100000";
/**
* 查询前缀 :search_
*
* <pre>
* 页面的查询条件中name的前缀必须包含: REQUEST_PREFIX+查询格式(LIKE,EQ..) +查询参数.
* eg: search_LIKE_name
* </pre>
*
*/
public static final String REQUEST_PREFIX = "search_";
/**
* 获得当前登录用户的ID. 如果没有当前用户则返回 0
*/
public Integer getCurrentUserId() {
ShiroUser user = (ShiroUser) SecurityUtils.getSubject().getPrincipal();
return user != null ? user.id : 0;
}
// =============== 返回页面参数 =============== //
/**
* 当前用户所创建的所有实例
*
* @return
*/
@ModelAttribute("allComputes")
public List<ComputeItem> allComputes() {
return comm.computeService.getComputeListByUserId(getCurrentUserId() == null ? 0 : getCurrentUserId());
}
/**
* @return 所有的部门信息
*/
@ModelAttribute("allDepartments")
public List<Department> allDepartments() {
return comm.departmentService.getDepartmentList();
}
/**
* 当前用户所创建的所有EIP
*
* @return
*/
@ModelAttribute("allEips")
public List<NetworkEipItem> allEips() {
return comm.eipService.getNetworkEipItemListByUserId(getCurrentUserId() == null ? 0 : getCurrentUserId());
}
/**
* 当前用户所创建的所有ELB
*
* @return
*/
@ModelAttribute("allElbs")
public List<NetworkElbItem> allElbs() {
return comm.elbService.getNetworkElbItemListByUserId(getCurrentUserId() == null ? 0 : getCurrentUserId());
}
/**
*
* 服务申请apply页面管理链接只能在该状态下显示.
*
* @return
*
*/
@ModelAttribute("allowApplyStatus")
public List<Integer> allowApplyStatus() {
List<Integer> allowApplyStatus = new ArrayList<Integer>();
allowApplyStatus.add(ApplyConstant.Status.已申请.toInteger());
allowApplyStatus.add(ApplyConstant.Status.已退回.toInteger());
return allowApplyStatus;
}
/**
*
* 资源resources页面管理链接只能在该状态下显示.
*
* @return
*
*/
@ModelAttribute("allowResourcesStatus")
public List<Integer> allowResourcesStatus() {
List<Integer> allowResourcesStatus = new ArrayList<Integer>();
allowResourcesStatus.add(ResourcesConstant.Status.未变更.toInteger());
allowResourcesStatus.add(ResourcesConstant.Status.已变更.toInteger());
allowResourcesStatus.add(ResourcesConstant.Status.已退回.toInteger());
allowResourcesStatus.add(ResourcesConstant.Status.已创建.toInteger());
return allowResourcesStatus;
}
/**
* @return 当前用户创建的所有服务标签
*/
@ModelAttribute("allTags")
public List<ServiceTag> allTags() {
return comm.serviceTagService.getServiceTagList();
}
/**
*
* @return 服务申请表的服务类型
*/
@ModelAttribute("applyServiceTypeMap")
public Map<Integer, String> applyServiceTypeMap() {
return ApplyConstant.ServiceType.map;
}
/**
* @return 服务申请表的状态
*/
@ModelAttribute("applyStatusMap")
public Map<Integer, String> applyStatusMap() {
return ApplyConstant.Status.map;
}
/**
*
* @return 分配人 Assignee Map
*/
@ModelAttribute("assigneeMap")
public Map<Integer, String> assigneeMap() {
return RedmineConstant.Assignee.map;
}
/**
*
* @return 审批结果Map
*/
@ModelAttribute("auditResultMap")
public Map<Integer, String> auditResultMap() {
return AuditConstant.Result.map;
}
/**
* @return 带宽
*/
@ModelAttribute("bandwidthMap")
public Map<Integer, String> bandwidthMap() {
return MdnConstant.BANDWIDTH_MAP;
}
/**
* @return 当前用户创建的所有可用于基础设施申请的申请单Apply List.
*/
@ModelAttribute("baseStationApplys")
public List<Apply> baseStationApplys() {
return comm.applyService.getBaseStationApplyList();
}
/**
* @return 计算资源类型Map
*/
@ModelAttribute("computeTypeMap")
public Map<Integer, String> computeTypeMap() {
return ComputeConstant.ComputeType.map;
}
/**
*
* @return 默认IP 0.0.0.0
*/
@ModelAttribute("DEFAULT_IPADDRESS")
public String defaultIpaddress() {
return IpPoolConstant.DEFAULT_IPADDRESS;
}
/**
*
* @return 域名类型Map
*/
@ModelAttribute("domainTypeMap")
public Map<Integer, String> domainTypeMap() {
return NetworkConstant.DomainType.map;
}
/**
*
* @return 完成百分比( 0% - 100%) Map
*/
@ModelAttribute("doneRatioMap")
public Map<Integer, String> doneRatioMap() {
return RedmineConstant.REDMINE_DONERATIO_MAP;
}
/**
* @return ECS的服务器类型Map
*/
@ModelAttribute("ecsServerTypeMap")
public Map<Integer, String> ecsServerTypeMap() {
return ComputeConstant.ECSServerType.map;
}
/**
* @return 编码器模式
*/
@ModelAttribute("encoderModeMap")
public Map<Integer, String> encoderModeMap() {
return MdnConstant.EncoderMode.map;
}
/**
* @return 当前用户创建的+公用的(user_id 为null) ESG列表.
*/
@ModelAttribute("esgList")
public List<NetworkEsgItem> esgList() {
return comm.esgService.getESGList();
}
/**
* @returnesg 协议Map
*/
@ModelAttribute("esgProtocolMap")
public Map<String, String> esgProtocolMap() {
return NetworkConstant.EsgProtocol.map;
}
/**
* @return 输出编码
*/
@ModelAttribute("exportEncodeMap")
public Map<Integer, String> exportEncodeMap() {
return CPConstant.EXPORTENCODE_MAP;
}
/**
* @return 所有的VLAN List
*/
@ModelAttribute("vlanList")
public List<Vlan> getVlanList() {
return comm.vlanService.getVlanList();
}
/**
* @return 服务器类型
*/
@ModelAttribute("hostServerTypeMap")
public Map<Integer, String> hostServerTypeMap() {
return HostServerConstant.HostServerType.map;
}
/**
* @return Ip状态Map
*/
@ModelAttribute("ipStausMap")
public Map<Integer, String> ipStausMap() {
return IpPoolConstant.IpStatus.map;
}
/**
*
* @return 运营商ISP类型Map
*/
@ModelAttribute("ispTypeMap")
public Map<Integer, String> ispTypeMap() {
return NetworkConstant.ISPType.map;
}
/**
*
* @return 是否推送内容交易平台Map
*/
@ModelAttribute("isPushCtpMap")
public Map<Boolean, String> isPushCtpMap() {
return CPConstant.IsPushCtp.map;
}
/**
*
* @return 是否保持会话Map key为boolean类型
*/
@ModelAttribute("keepSessionMap")
public Map<Boolean, String> keepSessionMap() {
return NetworkConstant.KeepSession.map;
}
/**
*
* type从 枚举 DefaultGroups 取 3.audit 审批人. 即上级领导.
*
* @return 所有的上级领导列表
*
*/
@ModelAttribute("leaders")
public List<User> leaders() {
return comm.accountService.getUserListByType(AccountConstant.DefaultGroups.audit.toInteger());
}
/**
* @return 所有的IDC List
*/
@ModelAttribute("locationList")
public List<Location> locationList() {
return comm.locationService.getLocationList();
}
/**
* @return 最大进程数Map.
*/
@ModelAttribute("maxProcessMap")
public Map<Integer, String> maxProcessMap() {
return MonitorConstant.MAX_PROCESS;
}
/**
*
* @return 工单RedmineIssue的状态
*/
@ModelAttribute("operateStatusMap")
public Map<Integer, String> operateStatusMap() {
return RedmineConstant.Status.map;
}
/**
* @return 操作系统位数Map
*/
@ModelAttribute("osBitMap")
public Map<Integer, String> osBitMap() {
return ComputeConstant.OS_BIT_MAP;
}
/**
* @return 操作系统类型Map
*/
@ModelAttribute("osTypeMap")
public Map<Integer, String> osTypeMap() {
return ComputeConstant.OS_TYPE_MAP;
}
/**
* @return 输出模式
*/
@ModelAttribute("outputModeMap")
public Map<Integer, String> outputModeMap() {
return MdnConstant.OutputMode.map;
}
/**
* @return 播放协议
*/
@ModelAttribute("palyProtocolMap")
public Map<String, String> palyProtocolMap() {
return MdnConstant.Protocol.map;
}
/**
* @return PCS的服务器类型Map
*/
@ModelAttribute("pcsServerTypeMap")
public Map<Integer, String> pcsServerTypeMap() {
return ComputeConstant.PCSServerType.map;
}
/**
* @return Ip类型 Map
*/
@ModelAttribute("poolTypeMap")
public Map<Integer, String> poolTypeMap() {
return IpPoolConstant.PoolType.map;
}
/**
*
* @return 服务申请表的优先级
*/
@ModelAttribute("priorityMap")
public Map<Integer, String> priorityMap() {
return RedmineConstant.Priority.map;
}
/**
*
* @return Redmine中的项目Map
*/
@ModelAttribute("projectMap")
public Map<Integer, String> projectMap() {
return RedmineConstant.Project.map;
}
/**
*
* @return 网络资源的协议类型Map
*/
@ModelAttribute("protocolMap")
public Map<String, String> protocolMap() {
return NetworkConstant.Protocol.map;
}
/**
* @return 收录编码率Map
*/
@ModelAttribute("recordBitrateMap")
public Map<String, String> recordBitrateMap() {
return CPConstant.RECORDBITRATE_MAP_STRING_KEY;
}
/**
*
* @return 收录类型Map
*/
@ModelAttribute("recordTypeMap")
public Map<Integer, String> recordTypeMap() {
return CPConstant.RecordType.map;
}
/**
*
* @return 资源Resources的服务类型Map
*/
@ModelAttribute("resourcesServiceTypeMap")
public Map<Integer, String> resourcesServiceTypeMap() {
return ResourcesConstant.ServiceType.map;
}
/**
*
* @return 资源Resources的状态Map
*/
@ModelAttribute("resourcesStatusMap")
public Map<Integer, String> resourcesStatusMap() {
return ResourcesConstant.Status.map;
}
/**
*
* @return 存储类型Map
*/
@ModelAttribute("storageTypeMap")
public Map<Integer, String> storageTypeMap() {
return StorageConstant.StorageType.map;
}
/**
* 资源变更页面可选择的服务标签列表. 该服务标签是 可用的,没有在审批流程中的服务标签.
*/
@ModelAttribute("tags")
public List<ServiceTag> tags() {
return comm.serviceTagService.getServiceTagToResourcesList();
}
/**
* @return 阀值Map. 大于 >
*/
@ModelAttribute("thresholdGtMap")
public Map<Integer, String> thresholdGtMap() {
return MonitorConstant.THRESHOLD_GT;
}
/**
* @return 阀值Map. 小于 <
*/
@ModelAttribute("thresholdLtMap")
public Map<Integer, String> thresholdLtMap() {
return MonitorConstant.THRESHOLD_LT;
}
/**
* @return 网络阀值Map. 大于>
*/
@ModelAttribute("thresholdNetGtMap")
public Map<Integer, String> thresholdNetGtMap() {
return MonitorConstant.THRESHOLD_NET_GT;
}
/**
*
* @return redmine Tracker Map
*/
@ModelAttribute("trackerMap")
public Map<Integer, String> trackerMap() {
return RedmineConstant.Tracker.map;
}
/**
*
* @return 所有的用户类型
*/
@ModelAttribute("userTypeMap")
public Map<Integer, String> userTypeMap() {
return AccountConstant.UserTypes.map;
}
/**
*
* @return 视频输出方式配置
*/
@ModelAttribute("videoOutputWayMap")
public Map<Integer, String> videoOutputWayMap() {
return CPConstant.VideoOutputWay.map;
}
}