package com.limegroup.gnutella.version; import com.limegroup.gnutella.util.CommonUtils; import java.util.StringTokenizer; /** * An abstraction for representing an operating system. */ class OS { /** * The string representation of the OS. */ private final String os; /** * Whether or not the OS of this machine is a match. */ private final boolean acceptable; /** * Constructs a new OS based on the given string representation. */ OS(String s) { this.os = s; this.acceptable = accept(s.toLowerCase()); } /** * Returns the OS as a string. */ public String toString() { return os; } /** * Determines if the current machine's OS is a match for what this OS * object is representing. */ public boolean isAcceptable() { return acceptable; } /** * Creates an array of OSes from a comma delimited list of strings. * Whitespace is ignored. */ static OS[] createFromList(String oses) { StringTokenizer st = new StringTokenizer(oses, ","); OS[] all = new OS[st.countTokens()]; for(int i = 0; st.hasMoreTokens(); i++) { all[i] = new OS(st.nextToken().trim()); } return all; } /** * Determines if any OS object in the array matches the current machine. */ static boolean hasAcceptableOS(OS[] oses) { for(int i = 0; i < oses.length; i++) if(oses[i].isAcceptable()) return true; return false; } /** * Prints out a comma separated list of the OSes. */ static String toString(OS[] oses) { if (oses == null) return ""; String s = ""; for(int i = 0; i < oses.length; i++) { s += oses[i].toString(); if( i < oses.length - 2) s += ", "; } return s; } /** * Determines whether or not the current machine matches the string representation * of an OS. * * An exact match of System.getProperty("os.name") is allowed, as are the special: * "windows", "mac", "linux" and "unix" values (representing all OSes that are of * that variety). "other" is allowed, representing all OSes not of those varieties. * "*" is also allowed, representing all OSes. */ private boolean accept(String s) { String os = CommonUtils.getOS().toLowerCase(); if(s.equals(os)) return true; if("windows".equals(s)) return CommonUtils.isWindows(); else if("mac".equals(s)) return CommonUtils.isAnyMac(); else if("linux".equals(s)) return CommonUtils.isLinux(); else if("unix".equals(s)) return CommonUtils.isUnix() && !CommonUtils.isLinux(); else if("other".equals(s)) return !CommonUtils.isWindows() && !CommonUtils.isAnyMac() && !CommonUtils.isUnix() && !CommonUtils.isLinux(); else if("*".equals(s)) return true; return false; } }