/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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 org.drools.core.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Drools {
private static Pattern VERSION_PAT = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)([\\.-](.*))?");
private static String droolsFullVersion;
private static int droolsMajorVersion;
private static int droolsMinorVersion;
private static int droolsRevisionVersion;
private static String droolsRevisionClassifier;
private static boolean jmxAvailable;
private static boolean jndiAvailable;
static {
droolsFullVersion = Drools.class.getPackage().getImplementationVersion();
if (droolsFullVersion == null || droolsFullVersion.equals("0.0")) {
InputStream is = null;
try {
is = Drools.class.getClassLoader().getResourceAsStream("drools.versions.properties");
Properties properties = new Properties();
properties.load(is);
droolsFullVersion = properties.get("drools.version").toString();
is.close();
} catch ( IOException e ) {
throw new RuntimeException(e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
Matcher m = VERSION_PAT.matcher(droolsFullVersion);
if( m.matches() ) {
droolsMajorVersion = Integer.parseInt(m.group(1));
droolsMinorVersion = Integer.parseInt(m.group(2));
droolsRevisionVersion = Integer.parseInt(m.group(3));
droolsRevisionClassifier = m.group(5);
}
try {
Class.forName( "java.lang.management.ManagementFactory" );
jmxAvailable = true;
} catch (Throwable t) {
jmxAvailable = false;
}
try {
Class.forName( "javax.naming.InitialContext" );
jndiAvailable = true;
} catch (Throwable t) {
jndiAvailable = false;
}
}
public static String getFullVersion() {
return droolsFullVersion;
}
public static int getMajorVersion() {
return droolsMajorVersion;
}
public static int getMinorVersion() {
return droolsMinorVersion;
}
public static int getRevisionVersion() {
return droolsRevisionVersion;
}
public static String getRevisionClassifier() {
return droolsRevisionClassifier;
}
public static boolean isCompatible(int major, int minor, int revision) {
if (major != droolsMajorVersion) {
return false;
}
// 6.0.x and 6.1+.x aren't compatible
return minor == 0 ? droolsMinorVersion == 0 : droolsMinorVersion > 0;
}
public static boolean isJmxAvailable() {
return jmxAvailable;
}
public static boolean isJndiAvailable() {
return jndiAvailable;
}
}