package com.gmail.dpierron.tools; import java.io.File; import java.io.IOException; public abstract class OS { public enum OsFamily { Windows, Linux, MacOsX } public enum OsType { WindowsXP("Windows XP", OsFamily.Windows), Windows7("Windows 7", OsFamily.Windows), Windows8("Windows 8", OsFamily.Windows), Windows("Windows", OsFamily.Windows), // Catch-all for other Windows variants Linux("Linux", OsFamily.Linux), MacOsX("Mac OS X", OsFamily.MacOsX); private String osTypeName; private OsFamily osFamily; private OsType(String osTypeName, OsFamily osFamily) { this.osTypeName = osTypeName; this.osFamily = osFamily; } public String getTypeName() { return osTypeName; } public OsFamily getFamily() { return osFamily; } } public abstract void openFile(File file) throws IOException; public static BaseOS factory() { return factory(System.getProperty("os.name")); } public static BaseOS factory(String osTypeName) { OsFamily family = null; for (OsType osType : OsType.values()) { if (osTypeName.toUpperCase().startsWith(osType.getTypeName().toUpperCase())) { family = osType.getFamily(); break; } } if (family == null) return new BaseOS(osTypeName); switch (family) { case Windows: return new WindowsOS(osTypeName); case MacOsX: return new MacOS(osTypeName); case Linux: return new LinuxOS(osTypeName); default: return new BaseOS(osTypeName); } } }