blob: 4546997bcce392af4c76ecab7febed8f19496fb3 [file] [log] [blame]
/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
************************************************************************/
package org.odftoolkit.odfdom;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Provides metadata about the ODFDOM library as build date, version number. Its
* main() method is the start method of the library, enabling the access of
* versioning methods from command line: "java -jar odfdom.jar".
*/
public class JarManifest {
private static final String CURRENT_CLASS_RESOURCE_PATH = "org/odftoolkit/odfdom/JarManifest.class";
private static final String MANIFEST_JAR_PATH = "META-INF/MANIFEST.MF";
private static String ODFDOM_NAME;
private static String ODFDOM_VERSION;
private static String ODFDOM_WEBSITE;
private static String ODFDOM_BUILD_DATE;
private static String ODFDOM_SUPPORTED_ODF_VERSION;
static {
try {
Manifest manifest = new Manifest(getManifestAsStream());
Attributes attr = manifest.getEntries().get("ODFDOM");
ODFDOM_NAME = attr.getValue("ODFDOM-Name");
ODFDOM_VERSION = attr.getValue("ODFDOM-Version");
ODFDOM_WEBSITE = attr.getValue("ODFDOM-Website");
ODFDOM_BUILD_DATE = attr.getValue("ODFDOM-Built-Date");
ODFDOM_SUPPORTED_ODF_VERSION = attr.getValue("ODFDOM-Supported-Odf-Version");
} catch (Exception e) {
Logger.getLogger(JarManifest.class.getName()).log(Level.SEVERE, null, e);
}
}
private static InputStream getManifestAsStream() {
String versionRef = JarManifest.class.getClassLoader().getResource(CURRENT_CLASS_RESOURCE_PATH).toString();
String manifestRef = versionRef.substring(0, versionRef.lastIndexOf(CURRENT_CLASS_RESOURCE_PATH)) + MANIFEST_JAR_PATH;
URL manifestURL = null;
InputStream in = null;
try {
manifestURL = new URL(manifestRef);
} catch (MalformedURLException ex) {
Logger.getLogger(JarManifest.class.getName()).log(Level.SEVERE, null, ex);
}
try {
in = manifestURL.openStream();
} catch (IOException ex) {
Logger.getLogger(JarManifest.class.getName()).log(Level.SEVERE, null, ex);
}
return in;
}
private JarManifest() {
}
/**
* The main method is meant to be called when the JAR is being executed,
* e.g. "java -jar odfdom.jar" and provides versioning information:
*
* odfdom 0.9-SNAPSHOT (build 20100701-1729)
* from http://odftoolkit.org supporting ODF 1.2
*
* Allowing version access from the JAR without the need to unzip the JAR nor naming the JAR
* (requiring the change of classpath for every version due to JAR naming change).
*/
public static void main(String[] args) throws IOException {
System.out.println(getOdfdomTitle() + " (build " + getOdfdomBuildDate() + ')' + "\nfrom " + getOdfdomWebsite() + " supporting ODF " + getOdfdomSupportedOdfVersion());
}
/**
* Return the name of ODFDOM;
* @return the ODFDOM library name
*/
public static String getOdfdomName() {
return ODFDOM_NAME;
}
/**
* Returns the ODFDOM library title
*
* @return A string containing both the name and the version of the ODFDOM library.
*/
public static String getOdfdomTitle() {
return getOdfdomName() + ' ' + getOdfdomVersion();
}
/**
* Return the version of the ODFDOM library (ie. odfdom.jar)
* @return the ODFDOM library version
*/
public static String getOdfdomVersion() {
return ODFDOM_VERSION;
}
/**
* Return the website of the ODFDOM library (ie. odfdom.jar)
* @return the ODFDOM library website
*/
public static String getOdfdomWebsite() {
return ODFDOM_WEBSITE;
}
/**
* Return the date when ODFDOM had been build
* @return the date of the build formated as "yyyy-MM-dd'T'HH:mm:ss".
*/
public static String getOdfdomBuildDate() {
return ODFDOM_BUILD_DATE;
}
/**
* Returns the version of the OpenDocument specification covered by the ODFDOM library (ie. odfdom.jar)
* @return the supported ODF version number
*/
public static String getOdfdomSupportedOdfVersion() {
return ODFDOM_SUPPORTED_ODF_VERSION;
}
}