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    }