package com.sohu.tv.mq.cloud.task.server.data;
/**
 * 代表操作系统的原始信息
 * 及一些类型定义
 * @Description: 
 * @author yongfeigao
 * @date 2018年7月18日
 */
public class OSInfo {
	//操作系统信息  uname -a
	private String uname;
	//发布版本 - /etc/issue
	private String issue;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getIssue() {
		return issue;
	}
	public void setIssue(String issue) {
		this.issue = issue;
	}
	public String toString() {
		return "OSInfo [uname=" + uname + ", issue=" + issue + "]";
	}
	/**
	 * 操作系统类型
	 */
	public enum OSType{
		LINUX("linux"),
		;
		private String value;
		private OSType(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
		public static OSType findByValue(String value) {
			for(OSType os : values()) {
				if(os.getValue().equals(value)) {
					return os;
				}
			}
			return null;
		}
	}
	
	/**
	 * 操作系统的发行版本
	 */
	public enum DistributionType{
		//通用系列
		LINUX("linux", "@@linux@@", new DistributionVersion[]{DistributionVersion.DEFAULT}),
		LINUX_OLD("linux_old", "@@linux_old@@", new DistributionVersion[]{DistributionVersion.DEFAULT}),
		
		//红帽系列
		REDHAT("rhel", "red hat", new DistributionVersion[]{
				DistributionVersion.REDHAT_4,
				DistributionVersion.REDHAT_45,
				DistributionVersion.REDHAT_5,
				DistributionVersion.REDHAT_52,
				DistributionVersion.REDHAT_54,
				DistributionVersion.REDHAT_6,
				DistributionVersion.REDHAT_65,
				DistributionVersion.REDHAT_7,
				DistributionVersion.REDHAT_71,
				DistributionVersion.REDHAT_72,
				}),
		
		//centos系列
		CENTOS("centos", "centos", new DistributionVersion[]{
				DistributionVersion.CENTOS_6,
				DistributionVersion.CENTOS_7,
				}),
		
		//ubuntu系列
		UBUNTU("ubuntu", "ubuntu", new DistributionVersion[]{
				DistributionVersion.UBUNTU_6,
				DistributionVersion.UBUNTU_7,
				DistributionVersion.UBUNTU_8,
				DistributionVersion.UBUNTU_810,
				DistributionVersion.UBUNTU_9,
				DistributionVersion.UBUNTU_910,
				DistributionVersion.UBUNTU_10,
				DistributionVersion.UBUNTU_1004,
				DistributionVersion.UBUNTU_1010,
				DistributionVersion.UBUNTU_1104,
				DistributionVersion.UBUNTU_1110,
				DistributionVersion.UBUNTU_13,
				DistributionVersion.UBUNTU_14,
				DistributionVersion.UBUNTU_1404,
				DistributionVersion.UBUNTU_1410,
				DistributionVersion.UBUNTU_15,
				DistributionVersion.UBUNTU_1504,
				DistributionVersion.UBUNTU_1510,
				DistributionVersion.UBUNTU_16,
				DistributionVersion.UBUNTU_18,
				DistributionVersion.UBUNTU_19,
				DistributionVersion.UBUNTU_20,
				DistributionVersion.UBUNTU_21,
				DistributionVersion.UBUNTU_22,
		}),
		
		//debian系列
		DEBIAN("debian", "debian", new DistributionVersion[]{
				DistributionVersion.DEBIAN_5,
				DistributionVersion.DEBIAN_50,
				DistributionVersion.DEBIAN_6,
				DistributionVersion.DEBIAN_60,
				DistributionVersion.DEBIAN_7,
				DistributionVersion.DEBIAN_8,
		}),
		
		//fedora系列
		FEDORA("fedora", "fedora", new DistributionVersion[]{
				DistributionVersion.FEDORA_14,
				DistributionVersion.FEDORA_15,
				DistributionVersion.FEDORA_16,
				DistributionVersion.FEDORA_17,
				DistributionVersion.FEDORA_18,
				DistributionVersion.FEDORA_19,
				DistributionVersion.FEDORA_20,
				DistributionVersion.FEDORA_21,
				DistributionVersion.FEDORA_22,
		}),
		
		//mint系列
		MINT("mint", "mint", new DistributionVersion[]{
				DistributionVersion.MINT_7,
				DistributionVersion.MINT_8,
				DistributionVersion.MINT_12,
				DistributionVersion.MINT_14,
				DistributionVersion.MINT_15,
				DistributionVersion.MINT_16,
				DistributionVersion.MINT_17,
		}),
		
		//opensuse系列
		OPENSUSE("opensuse", "opensuse", new DistributionVersion[]{
				DistributionVersion.OPENSUSE_11,
				DistributionVersion.OPENSUSE_12,
				DistributionVersion.OPENSUSE_13,
		}),
		
		//sles系列(SuSE Linux Enterprise Server)
		SLES("sles", "sles", new DistributionVersion[]{
				DistributionVersion.SLES_11,
				DistributionVersion.SLES_12,
				DistributionVersion.SLES_13,
		}),
		
		//knoppix
		KNOPPIX("knoppix", "knoppix", new DistributionVersion[]{
				DistributionVersion.KNOPPIX_4,
				DistributionVersion.KNOPPIX_5,
				DistributionVersion.KNOPPIX_6,
				DistributionVersion.KNOPPIX_7,
		}),
		
		;
		//nmon文件对应的名字
		private String nmonName;
		//发行版本对应的标志
		private String distSign;
		private DistributionVersion[] versions;
		
		private DistributionType(String nmonName, String distSign, 
				DistributionVersion[] versions) {
			this.nmonName = nmonName;
			this.distSign = distSign;
			this.versions = versions;
		}
		
		public String getNmonName() {
			return nmonName;
		}

		public String getDistSign() {
			return distSign;
		}

		public DistributionVersion[] getVersions() {
			return versions;
		}
		
		public static DistributionType findByContains(String value) {
			for(DistributionType type : values()) {
				if(value.contains(type.getDistSign())) {
					return type;
				}
			}
			return null;
		}
	}
	
	/**
	 * 操作系统的发行版本号
	 */
	public enum DistributionVersion{
		//通用系列无版本
		DEFAULT(""),
		
		//红帽系列
		REDHAT_4("4"),
		REDHAT_45("45"),
		REDHAT_5("5"),
		REDHAT_52("52"),
		REDHAT_54("54"),
		REDHAT_6("6"),
		REDHAT_65("65"),
		REDHAT_7("7"),
		REDHAT_71("71"),
		REDHAT_72("72"),
		
		//centos系列
		CENTOS_6("6"),
		CENTOS_7("7"),
		
		//ubuntu系列
		UBUNTU_6("6"),
		UBUNTU_7("7"),
		UBUNTU_8("8"),
		UBUNTU_810("810"),
		UBUNTU_9("9"),
		UBUNTU_910("910"),
		UBUNTU_10("10"),
		UBUNTU_1004("1004"),
		UBUNTU_1010("1010"),
		UBUNTU_1104("1104"),
		UBUNTU_1110("1110"),
		UBUNTU_13("13"),
		UBUNTU_14("14"),
		UBUNTU_1404("1404"),
		UBUNTU_1410("1410"),
		UBUNTU_15("15"),
		UBUNTU_1504("1504"),
		UBUNTU_1510("1510"),
		UBUNTU_16("16"),
		UBUNTU_18("18"),
		UBUNTU_19("19"),
		UBUNTU_20("20", "19"),
		UBUNTU_21("21", "19"),
		UBUNTU_22("22", "19"),
		
		//debian系列
		DEBIAN_5("5"),
		DEBIAN_50("50"),
		DEBIAN_6("6"),
		DEBIAN_60("60"),
		DEBIAN_7("7"),
		DEBIAN_8("8"),
		
		//fedora系列
		FEDORA_14("14"),
		FEDORA_15("15"),
		FEDORA_16("16"),
		FEDORA_17("17"),
		FEDORA_18("18"),
		FEDORA_19("19"),
		FEDORA_20("20"),
		FEDORA_21("21"),
		FEDORA_22("22"),
		
		//mint系列
		MINT_7("7"),
		MINT_8("8"),
		MINT_12("12"),
		MINT_14("14"),
		MINT_15("15"),
		MINT_16("16"),
		MINT_17("17"),
		
		//opensuse系列
		OPENSUSE_11("11"),
		OPENSUSE_12("12"),
		OPENSUSE_13("13"),
		
		//sles系列(SuSE Linux Enterprise Server)
		SLES_11("11"),
		SLES_12("12"),
		SLES_13("13"),
		
		//knoppix
		KNOPPIX_4("4"),
		KNOPPIX_5("5"),
		KNOPPIX_6("6"),
		KNOPPIX_7("7"),
		;
		
		private String value;
		private String nmonVersion;

		private DistributionVersion(String value) {
			this.value = value;
		}

		private DistributionVersion(String value, String nmonVersion) {
			this.value = value;
			this.nmonVersion = nmonVersion;
		}

		public String getValue() {
			return value;
		}

		public String getNmonVersion() {
			if (nmonVersion == null) {
				return value;
			}
			return nmonVersion;
		}
	}
	
	/**
	 * 处理器架构
	 */
	public enum ProcessorArchitecture{
		X86_64("x86_64"),
		X86("x86"),
		UNKONW(""),
		;
		private String value;
		
		private ProcessorArchitecture(String value) {
			this.value = value;
		}
		public String getValue() {
			return value;
		}
		
	}
}
