/* * Copyright 2009-2010 * Richard Eckart de Castilho * * 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 de.tudarmstadt.ukp.dkpro.core.api.resources; import java.nio.ByteOrder; /** * Detect platform information and normalize it. * */ public class PlatformDetector { public static String OS_WINDOWS = "windows"; public static String OS_OSX = "osx"; public static String OS_SOLARIS = "solaris"; public static String OS_LINUX = "linux"; public static String ARCH_PPC = "ppc"; public static String ARCH_X86_32 = "x86_32"; public static String ARCH_X86_64 = "x86_64"; public static String ARCH_SPARC = "sparc"; private String _arch = ""; private String _os = ""; private String _executableSuffix = ""; private ByteOrder _byteOrder = ByteOrder.nativeOrder(); private String[] _chmodCmd; { updatePlatform( System.getProperties().getProperty("os.name"), System.getProperties().getProperty("os.arch"), ByteOrder.nativeOrder()); } /** * Override the operating system name. * This should only be used in test cases. * * @param aOs an OS name as could be found in the os.name system * property. */ public void setOs( final String aOs) { updatePlatform(aOs, _arch, _byteOrder); } /** * Get the operating system. * * @return {@literal "windows"}, {@literal "osx"}, {@literal "linux"} or * {@literal "solaris"}. */ public String getOs() { return _os; } /** * Override the architecture. * This should only be used in test cases. * * @param aArch {@literal "big-endian"} for PowerPC or Sparc systems or * {@literal "little-endian"} for x86 systems. */ public void setArch( final String aArch) { updatePlatform(_os, aArch, _byteOrder); } /** * Get the platform architecture. * * @return {@literal "ppc"}, {@literal "x86_32"}, {@literal "x86_64"} or * {"amd64"} */ public String getArch() { return _arch; } /** * Set the byte order. TreeTagger models are sensitive to the byte order. * This should only be used in test cases. * * @param aByteOrder the byte order. */ public void setByteOrder( final ByteOrder aByteOrder) { updatePlatform(_os, _arch, aByteOrder); } /** * Get the file suffix used for executable files on the currently configured * platform. * * @return the file suffix used for executable files. */ public String getExecutableSuffix() { return _executableSuffix; } /** * Get the byte order. * * @return the byte order. */ public String getByteOrder() { return _byteOrder.toString().replace("_", "-").toLowerCase(); } /** * Get the platform ID which is {@link #getOs()} and {@link #getArch()} * separated by a {@literal "-"} (dash). * * @return the platform ID. */ public String getPlatformId() { return _os+"-"+_arch; } /** * Updates the platform-specific settings and normalizes them. * * @param aOs the operating system string. * @param aArch the architecture string. * @param aByteOrder the byte-order string. */ public void updatePlatform( final String aOs, final String aArch, final ByteOrder aByteOrder) { _os = aOs.toLowerCase(); _arch = aArch.toLowerCase(); String[] chmod = { "chmod", "755", null }; // Resolve arch "synonyms" if ( _arch.equals("x86") || _arch.equals("i386") || _arch.equals("i486") || _arch.equals("i586") || _arch.equals("i686") ) { _arch = ARCH_X86_32; } if ( _arch.equals("amd64") ) { _arch = ARCH_X86_64; } if (_arch.equals("powerpc")) { _arch = ARCH_PPC; } // Resolve name "synonyms" if (_os.startsWith("windows")) { _os = OS_WINDOWS; _executableSuffix = ".exe"; chmod = null; } if (_os.startsWith("mac")) { _os = OS_OSX; } if (_os.startsWith("linux")) { _os = OS_LINUX; } if (_os.startsWith("sun")) { _os = OS_SOLARIS; } _chmodCmd = chmod; _byteOrder = aByteOrder; } /** * Get the {@literal chmod} (change permissions) command for the current * platform (if one is necessary). * * @return the name of the {@literal chmod} command. */ public String[] getChmodCmd() { return _chmodCmd; } }