View Javadoc
1   /***
2    * Copyright (C) 2008 Jeremy Thomerson (jthomerson@users.sourceforge.net)
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package net.sf.vcaperture.util;
18  
19  import java.io.FileInputStream;
20  import java.io.InputStream;
21  import java.util.Properties;
22  import java.util.jar.Manifest;
23  import java.util.regex.Matcher;
24  import java.util.regex.Pattern;
25  
26  import net.sf.vcaperture.web.ApertureWebApp;
27  
28  public class Version {
29  
30      private static String VERSION = null;
31      
32      public static String getVersion() {
33          if (VERSION == null) {
34              try {
35                  InputStream in = ((ApertureWebApp) ApertureWebApp.get()).getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
36                  Manifest man = new Manifest(in);
37                  VERSION = man.getMainAttributes().getValue("Implementation-Version");
38                  System.out.println("LOADED APP VERSION FROM /META-INF/MANIFEST.MF");
39              } catch (Exception ex1) {
40                  System.err.println("Error loading version from manifest: " + ex1.getMessage());
41                  try {
42                      InputStream in = ((ApertureWebApp) ApertureWebApp.get()).getServletContext().getResourceAsStream("/META-INF/maven/net.sf.vcaperture/vcaperture/pom.properties");
43                      Properties props = new Properties();
44                      props.load(in);
45                      VERSION = props.getProperty("version");
46                      System.out.println("LOADED APP VERSION FROM /META-INF/maven/net.sf.vcaperture/vcaperture/pom.properties");
47                  } catch(Exception ex2) {
48                      System.err.println("Error loading version from pom.properties: " + ex2.getMessage());
49                      try {
50                          String dir = System.getProperty("user.dir");
51                          InputStream in = new FileInputStream(dir + "/pom.xml");
52                          StringBuffer out = new StringBuffer();
53                          byte[] b = new byte[4096];
54                          for (int n; (n = in.read(b)) != -1;) {
55                              out.append(new String(b, 0, n));
56                          }
57                          Pattern patt = Pattern.compile("<version>(.*)</version>");
58                          Matcher matcher = patt.matcher(out.toString());
59                          matcher.find();
60                          VERSION = matcher.group(1);
61                          System.out.println("LOADED APP VERSION FROM pom.xml");
62                      } catch(Exception ex3) {
63                          System.err.println("Error loading version from pom.xml: " + ex3.getMessage());
64                          ex3.printStackTrace();
65                          VERSION = "UNKNOWN";
66                      }
67                  }
68              }
69              System.out.println("LOADED APPLICATION VERSION: " + VERSION);
70          }
71          return VERSION;
72      }
73  }