001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2006-2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.types; 028 029 /** 030 * This class defines an enumeration that may be used to identify 031 * the operating system on which the JVM is running. 032 * 033 * NOTE: to share code this class is used in SetupUtils and should 034 * not contain any dependency with other classes (not even with 035 * classes in this package). 036 * If this class is modified to depend on other classes it will break 037 * the quicksetup. If this must be done, the references to this 038 * class in SetupUtils must be removed. 039 */ 040 @org.opends.server.types.PublicAPI( 041 stability=org.opends.server.types.StabilityLevel.VOLATILE, 042 mayInstantiate=false, 043 mayExtend=false, 044 mayInvoke=true) 045 public enum OperatingSystem 046 { 047 /** 048 * The value indicating the AIX operating system. 049 */ 050 AIX("AIX"), 051 052 053 054 /** 055 * The value indicating the FreeBSD operating system. 056 */ 057 FREEBSD("FreeBSD"), 058 059 060 061 /** 062 * The value indicating the HP-UX operating system. 063 */ 064 HPUX("HP-UX"), 065 066 067 068 /** 069 * The value indicating the Linux operating system. 070 */ 071 LINUX("Linux"), 072 073 074 075 /** 076 * The value indicating the Mac OS X operating system. 077 */ 078 MACOS("Mac OS X"), 079 080 081 082 /** 083 * The value indicating the Solaris operating system. 084 */ 085 SOLARIS("Solaris"), 086 087 088 089 /** 090 * The value indicating the Windows operating system. 091 */ 092 WINDOWS("Windows"), 093 094 095 096 /** 097 * The value indicating the z/OS operating system. 098 */ 099 ZOS("z/OS"), 100 101 102 103 /** 104 * The value indicating an unknown operating system. 105 */ 106 UNKNOWN("Unknown"); 107 108 109 110 // The human-readable name for this operating system. 111 private String osName; 112 113 114 115 /** 116 * Creates a new operating system value with the provided name. 117 * 118 * @param osName The human-readable name for the operating system. 119 */ 120 private OperatingSystem(String osName) 121 { 122 this.osName = osName; 123 } 124 125 126 127 /** 128 * Retrieves the human-readable name of this operating system. 129 * 130 * @return The human-readable name for this operating system. 131 */ 132 public String toString() 133 { 134 return osName; 135 } 136 137 138 139 /** 140 * Retrieves the operating system for the provided name. The name 141 * provided should come from the <CODE>os.name</CODE> system 142 * property. 143 * 144 * @param osName The name for which to retrieve the corresponding 145 * operating system. 146 * 147 * @return The operating system for the provided name. 148 */ 149 public static OperatingSystem forName(String osName) 150 { 151 if (osName == null) 152 { 153 return UNKNOWN; 154 } 155 156 157 String lowerName = osName.toLowerCase(); 158 159 if ((lowerName.indexOf("solaris") >= 0) || 160 (lowerName.indexOf("sunos") >= 0)) 161 { 162 return SOLARIS; 163 } 164 else if (lowerName.indexOf("linux") >= 0) 165 { 166 return LINUX; 167 } 168 else if ((lowerName.indexOf("hp-ux") >= 0) || 169 (lowerName.indexOf("hp ux") >= 0) || 170 (lowerName.indexOf("hpux") >= 0)) 171 { 172 return HPUX; 173 } 174 else if (lowerName.indexOf("aix") >= 0) 175 { 176 return AIX; 177 } 178 else if (lowerName.indexOf("windows") >= 0) 179 { 180 return WINDOWS; 181 } 182 else if ((lowerName.indexOf("freebsd") >= 0) || 183 (lowerName.indexOf("free bsd") >= 0)) 184 { 185 return FREEBSD; 186 } 187 else if ((lowerName.indexOf("macos") >= 0) || 188 (lowerName.indexOf("mac os") >= 0)) 189 { 190 return MACOS; 191 } 192 else if (lowerName.indexOf("z/os") >= 0) 193 { 194 return ZOS; 195 } 196 else 197 { 198 return UNKNOWN; 199 } 200 } 201 202 203 204 /** 205 * Indicates whether the provided operating system is UNIX-based. 206 * UNIX-based operating systems include Solaris, Linux, HP-UX, AIX, 207 * FreeBSD, and Mac OS X. 208 * 209 * @param os The operating system for which to make the 210 * determination. 211 * 212 * @return <CODE>true</CODE> if the provided operating system is 213 * UNIX-based, or <CODE>false</CODE> if not. 214 */ 215 public static boolean isUNIXBased(OperatingSystem os) 216 { 217 switch (os) 218 { 219 case SOLARIS: 220 case LINUX: 221 case HPUX: 222 case AIX: 223 case FREEBSD: 224 case MACOS: 225 return true; 226 default: 227 return false; 228 } 229 } 230 } 231