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