blob: 0bb236d43ecb56f43215334a531b99b3680e54a8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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 org.apache.geode.internal;
import static org.apache.geode.internal.VersionDescription.BUILD_ID;
import static org.apache.geode.internal.VersionDescription.BUILD_JAVA_VERSION;
import static org.apache.geode.internal.VersionDescription.BUILD_PLATFORM;
import static org.apache.geode.internal.VersionDescription.PRODUCT_NAME;
import static org.apache.geode.internal.VersionDescription.PRODUCT_VERSION;
import static org.apache.geode.internal.VersionDescription.RESOURCE_NAME;
import static org.apache.geode.internal.VersionDescription.SOURCE_DATE;
import static org.apache.geode.internal.VersionDescription.SOURCE_REPOSITORY;
import static org.apache.geode.internal.VersionDescription.SOURCE_REVISION;
import static org.apache.geode.internal.lang.SystemUtils.getBootClassPath;
import static org.apache.geode.internal.lang.SystemUtils.getClassPath;
import java.io.File;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.StringTokenizer;
import org.apache.geode.annotations.Immutable;
/**
* This class provides build and version information about GemFire. It gathers this information from
* the resource property file for this class.
*/
public class GemFireVersion {
@Immutable
private static final VersionDescription description = createDescription();
private GemFireVersion() {}
private static VersionDescription createDescription() {
String name =
GemFireVersion.class.getPackage().getName().replace('.', '/') + "/" + RESOURCE_NAME;
return new VersionDescription(name);
}
private static VersionDescription getDescription() {
return description;
}
public static String getProductName() {
return getDescription().getProperty(PRODUCT_NAME);
}
public static String getGemFireVersion() {
return getDescription().getProperty(PRODUCT_VERSION);
}
public static String getSourceDate() {
return getDescription().getProperty(SOURCE_DATE);
}
public static String getSourceRepository() {
return getDescription().getProperty(SOURCE_REPOSITORY);
}
public static String getSourceRevision() {
return getDescription().getProperty(SOURCE_REVISION);
}
public static String getBuildId() {
return getDescription().getProperty(BUILD_ID);
}
public static String getBuildPlatform() {
return getDescription().getProperty(BUILD_PLATFORM);
}
public static String getBuildJavaVersion() {
return getDescription().getProperty(BUILD_JAVA_VERSION);
}
public static String getGemFireJarFileName() {
return "geode-core-" + GemFireVersion.getGemFireVersion() + ".jar";
}
public static void print(PrintWriter pw) {
getDescription().print(pw);
}
public static void print(PrintStream ps) {
print(new PrintWriter(ps, true));
}
public static String asString() {
StringWriter sw = new StringWriter(256);
PrintWriter pw = new PrintWriter(sw);
print(pw);
pw.flush();
return sw.toString();
}
/** Public method that returns the URL of the gemfire jar file */
public static URL getJarURL() {
java.security.CodeSource cs = GemFireVersion.class.getProtectionDomain().getCodeSource();
if (cs != null) {
return cs.getLocation();
}
// fix for bug 33274 - null CodeSource from protection domain in Sybase
URL csLoc = null;
StringTokenizer tokenizer = new StringTokenizer(getClassPath(), File.pathSeparator);
while (tokenizer.hasMoreTokens()) {
String jar = tokenizer.nextToken();
if (jar.contains(getGemFireJarFileName())) {
File gemfireJar = new File(jar);
try {
csLoc = gemfireJar.toURI().toURL();
} catch (Exception ignored) {
}
break;
}
}
if (csLoc != null) {
return csLoc;
}
// try the boot class path to fix bug 37394
tokenizer = new StringTokenizer(getBootClassPath(), File.pathSeparator);
while (tokenizer.hasMoreTokens()) {
String jar = tokenizer.nextToken();
if (jar.contains(getGemFireJarFileName())) {
File gemfireJar = new File(jar);
try {
csLoc = gemfireJar.toURI().toURL();
} catch (Exception ignored) {
}
break;
}
}
return csLoc;
}
}