/*
* #!
* Ontopia Engine
* #-
* Copyright (C) 2001 - 2013 The Ontopia Project
* #-
* 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
*
* 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 net.ontopia;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Calendar;
import net.ontopia.utils.CmdlineUtils;
import net.ontopia.utils.OntopiaRuntimeException;
import net.ontopia.utils.StreamUtils;
/**
* INTERNAL: Class for representing information about a the Ontopia
* product and a method for testing if the product is correctly
* installed.</p>
*
* Information about the product release can be retrieved through the
* methods on this class. </p>
*/
public final class Ontopia {
private static String name;
private static int major_version;
private static int minor_version;
private static int micro_version;
private static int beta_version;
private static Calendar build_date;
private static String build_user;
static {
try {
InputStream i = StreamUtils.getInputStream("classpath:net/ontopia/Ontopia.info");
BufferedReader r = new BufferedReader(new InputStreamReader(i));
name = r.readLine();
String version = r.readLine();
String datetime = r.readLine();
build_user = r.readLine();
r.close();
String[] v = version.split("[\\.-]");
major_version = Integer.parseInt(v[0]);
minor_version = Integer.parseInt(v[1]);
micro_version = Integer.parseInt(v[2]);
// 3 = SNAPSHOT / ALPHA / BETA
// 4 = ALPHA / BETA version
if (v.length > 4) {
beta_version = Integer.parseInt(v[4]);
}
String[] d = datetime.split("-");
build_date = Calendar.getInstance();
build_date.set(Integer.parseInt(d[0]), Integer.parseInt(d[1]) - 1, Integer.parseInt(d[2]), Integer.parseInt(d[3]), Integer.parseInt(d[4]));
} catch (IOException ex) {
System.err.println("Build Error: could not find version file");
// fail safe
name = "Ontopia Topic Maps Engine";
major_version = 0;
minor_version = 0;
micro_version = 0;
beta_version = 0;
build_date = Calendar.getInstance();
build_user = "unknown";
}
}
private Ontopia() {
}
/**
* PUBLIC: Returns the product name.
*/
public static String getName() {
return name;
}
/**
* PUBLIC: Returns the product version. E.g. "1.0, "1.4.2" or "1.4.0 b3".
*/
public static String getVersion() {
return getMajorVersion() + "." + getMinorVersion() + "." + getMicroVersion()
+ (getBetaVersion() <= 0 ? "" : "b" + getBetaVersion())
;
}
/**
* PUBLIC: Returns the product major version number. E.g. 1 when the
* version number is 1.4.2.
*/
public static int getMajorVersion() {
return major_version;
}
/**
* PUBLIC: Returns the product minor version number. E.g. 4 when the
* version number is 1.4.2.
*/
public static int getMinorVersion() {
return minor_version;
}
/**
* PUBLIC: Returns the product micro version number. E.g. 2 when the
* version number is 1.4.2. If this version number isn't applicable
* -1 is returned.
*/
public static int getMicroVersion() {
return micro_version;
}
/**
* PUBLIC: Returns the product beta version number. E.g. 3 when the
* version number is 1.4.2 b3. If this version number isn't applicable
* -1 is returned.
*/
public static int getBetaVersion() {
return beta_version;
}
/**
* PUBLIC: Returns true if the product is a beta release.
*/
public static boolean isBeta() {
return (beta_version <= 0 ? false : true);
}
/**
* PUBLIC: Returns the time when the product was built.
*/
public static Calendar getBuildDate() {
return build_date;
}
/**
* PUBLIC: Returns the product build user.
*/
public static String getBuildUser() {
return build_user;
}
/**
* PUBLIC: Returns a formatted string with product the build date
* and build user.
*/
public static String getBuild() {
int year = getBuildDate().get(Calendar.YEAR);
int month = getBuildDate().get(Calendar.MONTH) + 1;
int day = getBuildDate().get(Calendar.DATE);
int hour = getBuildDate().get(Calendar.HOUR_OF_DAY);
int minute = getBuildDate().get(Calendar.MINUTE);
String user = getBuildUser();
return year + "-"
+ (month < 10 ? "0" + month : String.valueOf(month)) + "-"
+ (day < 10 ? "0" + day : String.valueOf(day))
+ " " + (hour < 10 ? "0" + hour : String.valueOf(hour)) + ":"
+ (minute < 10 ? "0" + minute : String.valueOf(minute))
+ (user == null ? "" : " by " + getBuildUser());
}
private static void checkClass(String class_name, String jar_file) {
try {
Class.forName(class_name);
return;
} catch (NoClassDefFoundError e) {
} catch (ClassNotFoundException e) {
}
String message = "Class '" + class_name + "' not found. Please add " + jar_file + " to your CLASSPATH.";
// System.out.println(message);
throw new OntopiaRuntimeException(message);
}
private static void checkProduct() {
System.out.println(getInfo());
try {
check();
System.out.println("Success: All required classes found.");
} catch (OntopiaRuntimeException e) {
System.err.println(e.getMessage());
}
}
/**
* INTERNAL: Check to see whether the CLASSPATH has been set up
* correctly for this product.
*/
public static void checkClasses() {
checkClass("net.ontopia.topicmaps.core.TopicMapIF", "ontopia.jar");
checkClass("org.slf4j.Logger", "slf4j-api.jar");
checkClass("org.apache.commons.collections4.map.LRUMap", "commons-collections4.jar");
checkClass("gnu.getopt.Getopt", "getopt.jar");
checkClass("antlr.Parser", "antlr.jar");
// moved to RDF module
// checkClass("com.hp.hpl.jena.graph.Node", "jena.jar");
// checkClass("com.ibm.icu.util.Calendar", "icu4j.jar");
// checkClass("com.hp.hpl.jena.iri.IRIFactory", "iri.jar");
}
/**
* INTERNAL: Check to see whether the JVM environment is correctly
* set up for this product.
*/
public static void check() {
// Check to see if required classes get imported
checkClasses();
if (System.getProperty("java.version").compareTo("1.7.0") < 0)
throw new OntopiaRuntimeException("Java 1.7 or newer needed; running " +
System.getProperty("java.version"));
}
public static String getInfo() {
return getName() + " " + getVersion() + " (" + getBuild() + ")";
}
public static void main(String argv[]) {
CmdlineUtils.initializeLogging();
Ontopia.checkProduct();
}
}