net.sf.uadetector.OperatingSystemFamily Maven / Gradle / Ivy
/*******************************************************************************
* Copyright 2012 André Rouél
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package net.sf.uadetector;
import net.sf.uadetector.internal.Check;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* This enum represents the more commonly used operating system families. It will never be complete, but can assist in
* identifying the version of an operating system.
*
* @author André Rouél
*/
public enum OperatingSystemFamily
{
/**
* AIX (Advanced Interactive eXecutive) is a Unix operating system from IBM.
*/
AIX("AIX", Pattern.compile("AIX")),
/**
* AROS is a free operating system aiming at being compatible with AmigaOS at the API level.
*/
AROS("AROS", Pattern.compile("AROS")),
/**
* AmigaOS is the native operating system for the Commodore Amiga, consisting of the components of Workbench,
* AmigaDOS with the command line interpreter CLI (later renamed to shell) and for many Amiga models in the ROM
* included kernel kickstart.
*/
AMIGA_OS("Amiga OS", Pattern.compile("Amiga OS")),
/**
* Android is both an operating system and a software platform for mobile devices like smart phones, mobile phones,
* netbooks and tablets, which is developed by the Open Handset Alliance.
*/
ANDROID("Android", Pattern.compile("Android")),
/**
* The Berkeley Software Distribution (BSD) is a version of the Unix operating system, which was created at the
* University of California at Berkeley in 1977.
*/
BSD("BSD", Pattern.compile("BSD")),
/**
* Bada is a service-oriented operating system that is developed by Samsung Electronics and is designed for use in
* smartphones.
*/
BADA("Bada", Pattern.compile("Bada")),
/**
* Be Operating System (BeOS) was an operating system of the company Be Incorporated and was called in later
* versions Be. Due to its multimedia capabilities it is also commonly called "Media OS".
*/
BEOS("BeOS", Pattern.compile("BeOS")),
/**
* Chrome OS is an operating system based on the Linux kernel and designed by Google to work with web applications and installed applications.
*/
CHROME_OS("Chrome OS", Pattern.compile("Chome OS")),
/**
* Danger OS is a smartphone operating system. It is used on Sidekick devices, which are sold in Germany by
* T-Mobile.
*/
DANGEROS("DangerOS", Pattern.compile("DangerOS")),
/**
* Firefox OS is an open source operating system for smartphones and tablet computers being developed by Mozilla.
*/
FIREFOX_OS("Firefox OS", Pattern.compile("Firefox OS")),
/**
* HP-UX (Hewlett Packard UniX) is a commercial Unix operating system from Hewlett-Packard and is based on UNIX
* System V.
*/
HPUX("HP-UX", Pattern.compile("HP-UX")),
/**
* Haiku (formerly OpenBeOS) is an open-source project with the aim, to reprogram and expand that in 2001 abandoned
* operating system BeOS.
*/
HAIKU("Haiku OS", Pattern.compile("Haiku OS")),
/**
* IRIX is a commercial Unix operating system of the company Silicon Graphics (SGI).
*/
IRIX("IRIX", Pattern.compile("IRIX")),
/**
* Inferno is a distributed computer operating system that comes from Bell Laboratories.
*/
INFERNO_OS("Inferno OS", Pattern.compile("Inferno OS")),
/**
* The Java Virtual Machine (abbreviated Java VM or JVM) is the part of the Java Runtime Environment (JRE) for Java
* programs, which is responsible for the execution of Java bytecode.
*
* This value is not an operating system family.
*/
JVM("JVM", Pattern.compile("JVM")),
/**
* Linux or GNU/Linux are usually called free, unix-like multi-user operating systems running based on the Linux
* kernel and other GNU software.
*/
LINUX("Linux", Pattern.compile("Linux")),
/**
* Mac OS is the name of the classic operating system (1984-2001) by Apple for Macintosh computers.
*/
MAC_OS("Mac OS", Pattern.compile("Mac OS")),
/**
* Maemo is a linux based software platform for smartphones and Internet tablets.
*/
MAEMO("Maemo", Pattern.compile("Maemo")),
/**
* MeeGo was a Linux kernel-based free mobile operating system project resulting from the fusion of Intel's Moblin
* and Nokia's Maemo operating systems.
*/
MEEGO("MeeGo", Pattern.compile("MeeGo")),
/**
* Minix is a free unixoides operating system that was developed by Andrew S. Tanenbaum at the Free University of
* Amsterdam as a teaching tool.
*/
MINIX("MINIX", Pattern.compile("MINIX")),
/**
* OpenVMS (Open Virtual Memory System), previously known as VAX-11/VMS, VAX/VMS or (informally) VMS, is a computer
* server operating system that runs on VAX, Alpha and Itanium-based families of computers.
*/
OPENVMS("OpenVMS", Pattern.compile("OpenVMS")),
/**
* OS X, formerly Mac OS X, is a Unix-based operating systems developed by Apple. It is a proprietary distribution
* of the free Darwin operating system from Apple.
*/
OS_X("OS X", Pattern.compile("(Mac OS X|OS X)")),
/**
* MorphOS is an Amiga-compatible computer operating system. It is a mixed proprietary and open source OS produced
* for the Pegasos PowerPC processor based computer.
*/
MORPHOS("MorphOS", Pattern.compile("MorphOS")),
/**
* This value indicates the operating systems from Nintendo, which they developed for their devices.
*
* This value is not an operating system family.
*/
NINTENDO("Nintendo", Pattern.compile("Nintendo")),
/**
* OS/2 is a multitasking operating system for PCs. It was originally developed by IBM and Microsoft together with
* the aim to replace DOS.
*/
OS_2("OS/2", Pattern.compile("OS/2")),
/**
* Palm OS was the operating system for organizer of the Palm series (known as PDAs) and smartphones.
*/
PALM_OS("Palm OS", Pattern.compile("Palm OS")),
/**
* The PlayStation Vita system software is the official, updatable firmware and operating system for the PlayStation
* Vita.
*/
PLAYSTATION_VITA("LiveArea", Pattern.compile("LiveArea")),
/**
* QNX is a POSIX-compatible proprietary Unix-like real-time operating system that focused primarily at the embedded
* market.
*/
QNX("QNX", Pattern.compile("QNX")),
/**
* RISC OS is a computer operating system originally designed by Acorn Computers Ltd. It was specifically designed
* to run on the ARM chipset, which Acorn had designed concurrently for use in its new line of Archimedes personal
* computers.
*/
RISC_OS("RISC OS", Pattern.compile("RISC OS|RISK OS")),
/**
* Binary Runtime Environment for Wireless (Brew MP, Brew, or BREW) is an application development platform created
* by Qualcomm.
*/
BREW("Brew", Pattern.compile("Brew")),
/**
* BlackBerry OS (up to the fifth edition known as the BlackBerry Device Software, also known as Research
* In Motion OS) is a proprietary mobile operating system developed by BlackBerry Ltd for its BlackBerry line of
* smartphone handheld devices.
*/
BLACKBERRY_OS("BlackBerry OS", Pattern.compile("(RIM OS|BlackBerry OS)")),
/**
* Sailfish is a Linux-based mobile operating system developed by Jolla in cooperation with the Mer project and
* supported by the Sailfish Alliance.
*/
SAILFISH_OS("Sailfish", Pattern.compile("Sailfish")),
/**
* Solaris is the name of an operating system distribution based on SunOS and is a Unix operating system. Since the
* takeover of Sun Microsystems in 2010 Solaris is part of Oracle.
*/
SOLARIS("Solaris", Pattern.compile("Solaris")),
/**
* Syllable is a slim and fast desktop Unix-like operating system for x86 processors.
*/
SYLLABLE("Syllable", Pattern.compile("Syllable")),
/**
* The Symbian platform, simply called Symbian, is an operating system for smartphones and PDAs. The Symbian
* platform is the successor to Symbian OS
*/
SYMBIAN("Symbian OS", Pattern.compile("Symbian OS")),
/**
* Tizen is a free operating system based on Linux respectively Debian and was launched by the Linux Foundation and
* LiMo Foundation.
*/
TIZEN("Tizen", Pattern.compile("Tizen")),
/**
* The Wii Operating System is based on Nintendo’s proprietary software and runs on the Wii video game console.
*/
WII_OS("Wii OS", Pattern.compile("Nintendo Wii|Wii OS")),
/**
* Microsoft Windows is a trademark for operating systems of the Microsoft Corporation. Microsoft Windows was
* originally a graphical extension of the operating system MS-DOS.
*/
WINDOWS("Windows", Pattern.compile("Windows")),
/**
* XrossMediaBar (XMB) is the name of the graphical user interface, which are used on PlayStation 3, PlayStation
* Portable, Sony Blu-Ray players and Sony Bravia TVs. Also some special versions of the PlayStation 2, PSX, already
* using the XMB.
*/
XROSSMEDIABAR("XrossMediaBar (XMB)", Pattern.compile("XrossMediaBar (XMB)")),
/**
* iOS (until June 2010 iPhone OS) is the standard operating system of Apple products like iPhone, iPod touch, iPad,
* and the second generation of Apple TV. iOS is based on Mac OS X.
*/
IOS("iOS", Pattern.compile("iOS|iPhone OS")),
/**
* webOS is a smartphone and tablet operating system from Hewlett-Packard (formerly HP Palm). It represents the
* follower of Palm OS.
*/
WEBOS("webOS", Pattern.compile("webOS")),
/**
* Unknown operating system family
*
* This value will be returned if the operating system family cannot be determined.
*/
UNKNOWN("", Pattern.compile("^$"));
/**
* The internal family name in the UAS database.
*/
@javax.validation.constraints.NotNull
private final String name;
/**
* The regular expression which a family name must be match.
*/
@javax.validation.constraints.NotNull
private final Pattern pattern;
private OperatingSystemFamily(@javax.validation.constraints.NotNull String name, @javax.validation.constraints.NotNull Pattern pattern)
{
this.name = name;
this.pattern = pattern;
}
/**
* This method try to find by the given family name a matching enum value. The family name must match against an
* operating system entry in UAS data file.
*
* @param family
* name of an operating system family
*
* @return the matching enum value or {@code OperatingSystemFamily#UNKNOWN}
*
*
* if the given argument is {@code null}
*/
public static OperatingSystemFamily evaluate(@javax.validation.constraints.NotNull String family)
{
Check.notNull(family, "family");
OperatingSystemFamily result;
// search by name
result = evaluateByName(family);
// search by pattern
if (result == UNKNOWN)
{
result = evaluateByPattern(family);
}
return result;
}
/**
* This method try to find by the given family name a matching enum value. The family name will be evaluated against
* the stored name of an operating system entry.
*
* @param family
* name of an operating system family
*
* @return the matching enum value or {@code OperatingSystemFamily#UNKNOWN}
*
*
* if the given argument is {@code null}
*/
protected static OperatingSystemFamily evaluateByName(@javax.validation.constraints.NotNull String family)
{
Check.notNull(family, "family");
OperatingSystemFamily result = UNKNOWN;
for (OperatingSystemFamily value : values())
{
if (value.getName()
.equals(family))
{
result = value;
break;
}
}
return result;
}
/**
* This method try to find by the given family name a matching enum value. The family name will be evaluated against
* the stored regular expression of an operating system entry.
*
* @param family
* name of an operating system family
*
* @return the matching enum value or {@code OperatingSystemFamily#UNKNOWN}
*
*
* if the given argument is {@code null}
*/
protected static OperatingSystemFamily evaluateByPattern(@javax.validation.constraints.NotNull String family)
{
Check.notNull(family, "family");
OperatingSystemFamily result = UNKNOWN;
for (OperatingSystemFamily value : values())
{
Matcher m = value.getPattern()
.matcher(family);
if (m.matches())
{
result = value;
break;
}
}
return result;
}
/**
* Gets the internal family name in the UAS database.
*
* @return the internal family name
*/
@javax.validation.constraints.NotNull
public String getName()
{
return this.name;
}
/**
* Gets the regular expression which a family name must be match with.
*
* @return regular expression
*/
@javax.validation.constraints.NotNull
public Pattern getPattern()
{
return pattern;
}
}