package tk.amberide.ide.os;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import javax.swing.UIManager;
/**
*
* A class to augment java.lang.System.
*
* @author Tudor
*/
public class OS {
private static boolean amberosLoaded;
public static String[] argv() {
return ManagementFactory.getRuntimeMXBean().getInputArguments().toArray(new String[0]);
}
public static void println(Object... args) {
for (Object arg : args) {
print(arg);
}
print("\n");
}
public static void print(Object... args) {
for (Object arg : args) {
System.out.print(arg);
}
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void printTrace() {
new Throwable().printStackTrace(System.out);
}
public static void newInstance(Class main, String args) throws IOException, InterruptedException {
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String path = System.getProperty("java.home") + separator + "bin" + separator + "java";
ProcessBuilder processBuilder =
new ProcessBuilder(path, "-cp",
classpath,
main.getName(), args);
Process process = processBuilder.start();
process.waitFor();
}
public static Object[] deepcopy(Object[] arr) {
Object[] cdata = new Object[arr.length];
for (int i = 0; i != cdata.length; i++) {
Object o = arr[i];
if (o instanceof Object[]) {
cdata[i] = deepcopy((Object[]) o);
} else if (o instanceof Cloneable) {
try {
cdata[i] = o.getClass().getDeclaredMethod("clone", null).invoke(o, null);
continue;
} catch (Exception ex) {
}
}
cdata[i] = o; // Shallow
}
return cdata;
}
public static String getSystemFontName() {
if (amberosLoaded) {
switch (getPlatform()) {
case WINDOWS:
return Win.getSystemFontName();
}
}
return UIManager.getString("Label.font");
}
public static Platform getPlatform() {
return Platform.getPlatform();
}
public static boolean is64Bit() {
String osArch = System.getProperty("os.arch");
return "amd64".equals(osArch) || "x86_64".equals(osArch);
}
public static void loadNativeLibraries() {
Natives.unpack();
loadAmberOS();
}
protected static void loadAmberOS() {
String path = System.getProperty("amber.os.librarypath");
if (path != null) {
try {
System.load(path);
amberosLoaded = true;
} catch (Exception e) {
System.err.println("Can't load AmberOS, OS-specific utilities will not work");
e.printStackTrace();
amberosLoaded = false;
}
} else
amberosLoaded = false;
}
public static boolean osLibrariesLoaded() {
return amberosLoaded;
}
public static enum Platform {
LINUX, WINDOWS, MAC;
public static Platform getPlatform() {
String os = System.getProperty("os.name").toLowerCase();
if (os.indexOf("win") >= 0) {
return WINDOWS;
}
if ((os.indexOf("nix") >= 0) || (os.indexOf("nux") >= 0) || (os.indexOf("aix") > 0)) {
return LINUX;
}
if (os.indexOf("mac") >= 0) {
return MAC;
}
return null;
}
}
}