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 }