001 package org.maltparser.core.helper; 002 003 import java.io.File; 004 import java.io.IOException; 005 import java.net.URL; 006 import java.net.URLDecoder; 007 import java.util.jar.Attributes; 008 import java.util.jar.JarFile; 009 import java.util.jar.Manifest; 010 import java.util.regex.Pattern; 011 012 import org.maltparser.core.exception.MaltChainedException; 013 import org.maltparser.core.options.OptionManager; 014 015 /** 016 * 017 * 018 * @author Johan Hall 019 */ 020 public class SystemInfo { 021 private static SystemInfo uniqueInstance = new SystemInfo(); 022 private static String version; 023 private static String buildDate; 024 private static Attributes manifestAttributes; 025 private static File maltJarPath; 026 027 private SystemInfo() { 028 Pattern MALTJAR = Pattern.compile("^.*malt[^" + File.separator 029 + "]*\\.jar$"); 030 try { 031 getManifestInfo(); 032 033 String[] jarfiles = System.getProperty("java.class.path").split( 034 File.pathSeparator); 035 for (int i = 0; i < jarfiles.length; i++) { 036 037 if (MALTJAR.matcher(jarfiles[i]).matches()) { 038 maltJarPath = new File(new File(jarfiles[i]) 039 .getAbsolutePath()); 040 } 041 } 042 } catch (MaltChainedException e) { 043 if (SystemLogger.logger().isDebugEnabled()) { 044 SystemLogger.logger().debug("", e); 045 } else { 046 SystemLogger.logger().error(e.getMessageChain()); 047 } 048 System.exit(1); 049 } 050 } 051 052 /** 053 * Returns a reference to the single instance. 054 */ 055 public static SystemInfo instance() { 056 return uniqueInstance; 057 } 058 059 /** 060 * Returns the application header 061 * 062 * @return the application header 063 */ 064 public static String header() { 065 StringBuilder sb = new StringBuilder(); 066 sb 067 .append("-----------------------------------------------------------------------------\n" 068 + " MaltParser "+ version + " \n" 069 + "-----------------------------------------------------------------------------\n" 070 + " MALT (Models and Algorithms for Language Technology) Group \n" 071 + " Vaxjo University and Uppsala University \n" 072 + " Sweden \n" 073 + "-----------------------------------------------------------------------------\n"); 074 return sb.toString(); 075 } 076 077 /** 078 * Returns a short version of the help 079 * 080 * @return a short version of the help 081 */ 082 public static String shortHelp() { 083 StringBuilder sb = new StringBuilder(); 084 sb.append("\n" 085 + "Usage: \n" 086 + " java -jar malt.jar -f <path to option file> <options>\n" 087 + " java -jar malt.jar -h for more help and options\n\n" 088 + OptionManager.instance().getOptionDescriptions() 089 .toStringOptionGroup("system") 090 + "Documentation: docs/index.html\n"); 091 return sb.toString(); 092 } 093 094 /** 095 * Returns a set of attributes present in the jar manifest file 096 * 097 * @return a set of attributes present in the jar manifest file 098 */ 099 public static Attributes getManifestAttributes() { 100 return manifestAttributes; 101 } 102 103 /** 104 * Returns the version number as string 105 * 106 * @return the version number as string 107 */ 108 public static String getVersion() { 109 return version; 110 } 111 112 /** 113 * Returns the build date 114 * 115 * @return the build date 116 */ 117 public static String getBuildDate() { 118 return buildDate; 119 } 120 121 public static File getMaltJarPath() { 122 return maltJarPath; 123 } 124 125 /** 126 * Loads the manifest attributes from the manifest in the jar-file 127 * 128 * @throws MaltChainedException 129 */ 130 private void getManifestInfo() throws MaltChainedException { 131 try { 132 URL codeBase = SystemInfo.class.getProtectionDomain() 133 .getCodeSource().getLocation(); 134 if (codeBase != null && codeBase.getPath().endsWith(".jar")) { 135 JarFile jarfile = new JarFile(URLDecoder.decode(codeBase 136 .getPath(), java.nio.charset.Charset.defaultCharset() 137 .name())); 138 Manifest manifest = jarfile.getManifest(); 139 Attributes manifestAttributes = manifest.getMainAttributes(); 140 version = manifestAttributes.getValue("Implementation-Version"); 141 buildDate = manifestAttributes.getValue("Build-Date"); 142 } 143 } catch (IOException e) { 144 version = ""; 145 buildDate = "Not available"; 146 e.printStackTrace(); 147 } 148 } 149 }