package com.kokakiwi.mclauncher.utils;
import java.io.File;
public class SystemUtils
{
public static OS getSystemOS()
{
return OS.getOSFromString(System.getProperty("os.name"));
}
public static Arch getSystemArch()
{
return Arch.getArchFromString(System.getProperty("os.arch"));
}
public static String getSystemVersion()
{
return System.getProperty("os.version");
}
public static File getExecDirectory()
{
return new File(getExecDirectoryPath());
}
public static String getExecDirectoryPath()
{
String name = SystemUtils.class.getName().replace('.', '/');
name = SystemUtils.class.getResource("/" + name + ".class").toString();
if (name.contains(".jar"))
{
name = name.substring(0, name.indexOf(".jar"));
name = name.substring(name.lastIndexOf(':') + 1,
name.lastIndexOf('/') + 1).replace('%', ' ');
String s = "";
for (int i = 0; i < name.length(); i++)
{
s += name.charAt(i);
if (name.charAt(i) == ' ')
{
i += 2;
}
}
return s.replace('/', File.separatorChar);
}
else
{
name = SystemUtils.class.getProtectionDomain().getCodeSource()
.getLocation().getPath();
name = name.replace('%', ' ');
String s = "";
for (int i = 0; i < name.length(); i++)
{
s += name.charAt(i);
if (name.charAt(i) == ' ')
{
i += 2;
}
}
return s.replace('/', File.separatorChar);
}
}
public enum OS
{
windows("Windows", "\r\n", "win"), linux("Linux", "\n", "linux"), macosx(
"Mac OS", "\n", "mac"), solaris("Solaris", "\n", "sunos",
"solaris"), unknown;
private final String name;
private final String[] labels;
private final String lineSeparator;
OS()
{
this("Unknown");
}
OS(String name)
{
this(name, "\n");
}
OS(String name, String lineSeparator, String... strings)
{
this.name = name;
this.lineSeparator = lineSeparator;
labels = strings;
}
public String getName()
{
return name;
}
public String getLineSeparator()
{
return lineSeparator;
}
public static OS getOSFromString(String name)
{
for (final OS os : values())
{
for (final String label : os.labels)
{
if (name.toLowerCase().contains(label.toLowerCase()))
{
return os;
}
}
}
return unknown;
}
}
public enum Arch
{
x86("x86"), amd64("amd64"), unknown;
private final String[] labels;
Arch(String... strings)
{
labels = strings;
}
public String getName()
{
return name();
}
public static Arch getArchFromString(String name)
{
for (final Arch os : values())
{
for (final String label : os.labels)
{
if (name.toLowerCase().contains(label.toLowerCase()))
{
return os;
}
}
}
return unknown;
}
}
}