jnr.constants.Platform Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jnr-constants Show documentation
Show all versions of jnr-constants Show documentation
A set of platform constants (e.g. errno values)
/*
* 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 jnr.constants;
import java.nio.ByteOrder;
import java.util.HashMap;
import java.util.Map;
/**
* Platform specific constants.
*/
public final class Platform {
private static final Platform INSTANCE = new Platform();
public static Platform getPlatform() {
return INSTANCE;
}
private static final class PackageNameResolver {
public static final String PACKAGE_NAME = new PackageNameResolver().inferPackageName();
private String inferPackageName() {
try {
Class cls = getClass();
Package pkg = cls.getPackage();
return pkg != null ? pkg.getName(): cls.getName().substring(0, cls.getName().lastIndexOf('.'));
} catch (NullPointerException npe) {
return "jnr.constants";
}
}
}
private Platform() { }
private static String getConstantsPackageName() {
return PackageNameResolver.PACKAGE_NAME;
}
public String[] getPackagePrefixes() {
return new String[] {
getArchPackageName(),
getOSPackageName(),
getFakePackageName(),
};
}
public String getArchPackageName() {
return String.format("%s.platform.%s.%s", getConstantsPackageName(), OS, ARCH);
}
public String getOSPackageName() {
return String.format("%s.platform.%s", getConstantsPackageName(), OS);
}
public String getFakePackageName() {
return String.format("%s.platform.fake", getConstantsPackageName());
}
public static final Map OS_NAMES = new HashMap() {{
put("Mac OS X", "darwin");
}
public static final long serialVersionUID = 1L;
};
public static final Map ARCH_NAMES = new HashMap() {{
put("x86", "i386");
}
public static final long serialVersionUID = 1L;
};
private static String initOperatingSystem() {
String osname = getProperty("os.name", "unknown").toLowerCase();
for (String s : OS_NAMES.keySet()) {
if (s.equalsIgnoreCase(osname)) {
return OS_NAMES.get(s);
}
}
if (osname.startsWith("windows")) {
return "windows";
}
return osname;
}
private static final String initArchitecture() {
String arch = getProperty("os.arch", "unknown").toLowerCase();
for (String s : ARCH_NAMES.keySet()) {
if (s.equalsIgnoreCase(arch)) {
return ARCH_NAMES.get(s);
}
}
return arch;
}
public static final String ARCH = initArchitecture();
public static final String OS = initOperatingSystem();
public static final String NAME = String.format("%s-%s", ARCH, OS);
public static final int BIG_ENDIAN = 4321;
public static final int LITTLE_ENDIAN = 1234;
public static final int BYTE_ORDER = ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN) ? BIG_ENDIAN : LITTLE_ENDIAN;
private static String getProperty(String property, String defValue) {
try {
return System.getProperty(property, defValue);
} catch (SecurityException se) {
return defValue;
}
}
}