package org.maltparser.core.helper; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLDecoder; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.regex.Pattern; import org.maltparser.core.exception.MaltChainedException; import org.maltparser.core.options.OptionManager; /** * * * @author Johan Hall */ public class SystemInfo { private static SystemInfo uniqueInstance = new SystemInfo(); private static String version; private static String buildDate; private static Attributes manifestAttributes; private static File maltJarPath; private SystemInfo() { String separator = File.separator; if (separator.equals("\\")) { separator = "\\\\"; } try { getManifestInfo(); String maltJarSimpleName = "malt.jar"; String maltJarVersionName = (version != null && version.length() > 0) ? "malt-" + version + ".jar" : ""; Pattern MALTJAR = Pattern.compile("^.*malt[^" + separator + "]*\\.jar$"); String[] jarfiles = System.getProperty("java.class.path").split(File.pathSeparator); for (int i = 0; i < jarfiles.length; i++) { if (jarfiles[i].endsWith(maltJarSimpleName) || jarfiles[i].endsWith(maltJarVersionName)) { maltJarPath = new File(new File(jarfiles[i]).getAbsolutePath()); } } if (maltJarPath == null || maltJarPath.length() == 0) { for (int i = 0; i < jarfiles.length; i++) { if (MALTJAR.matcher(jarfiles[i]).matches()) { maltJarPath = new File(new File(jarfiles[i]).getAbsolutePath()); } } } if (maltJarPath == null || maltJarPath.length() == 0) { String codeBasePath = SystemInfo.class.getProtectionDomain().getCodeSource().getLocation().getPath(); if (codeBasePath.endsWith(maltJarSimpleName) || codeBasePath.endsWith(maltJarVersionName)) { maltJarPath = new File(new File(codeBasePath).getAbsolutePath()); } if (maltJarPath == null || maltJarPath.length() == 0) { if (MALTJAR.matcher(codeBasePath).matches()) { maltJarPath = new File(new File(codeBasePath).getAbsolutePath()); } } } } catch (MaltChainedException e) { if (SystemLogger.logger().isDebugEnabled()) { SystemLogger.logger().debug("", e); } else { SystemLogger.logger().error(e.getMessageChain()); } System.exit(1); } } /** * Returns a reference to the single instance. */ public static SystemInfo instance() { return uniqueInstance; } /** * Returns the application header * * @return the application header */ public static String header() { StringBuilder sb = new StringBuilder(); sb.append("-----------------------------------------------------------------------------\n") .append(" MaltParser ").append(version).append(" \n") .append("-----------------------------------------------------------------------------\n") .append(" MALT (Models and Algorithms for Language Technology) Group \n") .append(" Vaxjo University and Uppsala University \n") .append(" Sweden \n") .append("-----------------------------------------------------------------------------\n"); return sb.toString(); } /** * Returns a short version of the help * * @return a short version of the help */ public static String shortHelp() { StringBuilder sb = new StringBuilder(); sb.append("\n") .append("Usage: \n") .append(" java -jar maltparser-").append(version).append(".jar -f <path to option file> <options>\n") .append(" java -jar maltparser-").append(version).append(".jar -h for more help and options\n\n") .append(OptionManager.instance().getOptionDescriptions().toStringOptionGroup("system")) .append("Documentation: docs/index.html\n"); return sb.toString(); } /** * Returns a set of attributes present in the jar manifest file * * @return a set of attributes present in the jar manifest file */ public static Attributes getManifestAttributes() { return manifestAttributes; } /** * Returns the version number as string * * @return the version number as string */ public static String getVersion() { return version; } /** * Returns the build date * * @return the build date */ public static String getBuildDate() { return buildDate; } public static File getMaltJarPath() { return maltJarPath; } /** * Loads the manifest attributes from the manifest in the jar-file * * @throws MaltChainedException */ private void getManifestInfo() throws MaltChainedException { try { URL codeBase = SystemInfo.class.getProtectionDomain().getCodeSource().getLocation(); if (codeBase != null && codeBase.getPath().endsWith(".jar")) { JarFile jarfile = new JarFile(URLDecoder.decode(codeBase.getPath(), java.nio.charset.Charset.defaultCharset().name())); Manifest manifest = jarfile.getManifest(); Attributes manifestAttributes = manifest.getMainAttributes(); version = manifestAttributes.getValue("Implementation-Version"); buildDate = manifestAttributes.getValue("Build-Date"); } } catch (IOException e) { version = ""; buildDate = "Not available"; e.printStackTrace(); } } }