blob: 747f0afe514410be1f8093497fb687c39f4023cc [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.wiki;
import org.apache.commons.lang.StringUtils;
/**
* Contains release and version information. You may also invoke this class directly, in which case it prints
* out the version string. This is a handy way of checking which JSPWiki version you have - just type
* from a command line:
* <pre>
* % java -cp JSPWiki.jar org.apache.wiki.Release
* 2.5.38
* </pre>
* <p>
* As a historical curiosity, this is the oldest JSPWiki file. According to the CVS history, it dates from 6.7.2001,
* and it really hasn't changed much since.
* </p>
* @since 1.0
*/
public final class Release {
private static final String VERSION_SEPARATORS = ".-";
/**
* This is the default application name.
*/
public static final String APPNAME = "JSPWiki";
/**
* This should be empty when doing a release - otherwise keep it as "cvs" so that whenever someone checks
* out the code, they know it is a bleeding-edge version. Other possible values are "alpha" and "beta" for
* alpha and beta versions, respectively.
* <p>
* If the POSTFIX is empty, it is not added to the version string.
*/
private static final String POSTFIX = "M3";
/** The JSPWiki major version. */
public static final int VERSION = 2;
/** The JSPWiki revision. */
public static final int REVISION = 11;
/** The minor revision. */
public static final int MINORREVISION = 0;
/** The build number/identifier. This is a String as opposed to an integer, just so that people can add
* other identifiers to it. The build number is incremented every time a committer checks in code, and reset
* when the a release is made.
* <p>
* If you are a person who likes to build his own releases, we recommend that you add your initials to this
* identifier (e.g. "13-jj", or 49-aj").
* <p>
* If the build identifier is empty, it is not added.
*/
public static final String BUILD = "";
/**
* This is the generic version string you should use when printing out the version. It is of
* the form "VERSION.REVISION.MINORREVISION[-POSTFIX][-BUILD]".
*/
public static final String VERSTR =
VERSION+"."+REVISION+"."+MINORREVISION+ ((POSTFIX.length() != 0 ) ? "-"+POSTFIX : "") + ((BUILD.length() != 0 ? "-"+BUILD : ""));
/**
* Private constructor prevents instantiation.
*/
private Release() {
}
/**
* This method is useful for templates, because hopefully it will
* not be inlined, and thus any change to version number does not
* need recompiling the pages.
*
* @since 2.1.26.
* @return The version string (e.g. 2.5.23).
*/
public static String getVersionString() {
return VERSTR;
}
/**
* Returns true, if this version of JSPWiki is newer or equal than what is requested.
* @param version A version parameter string (a.b.c-something). B and C are optional.
* @return A boolean value describing whether the given version is newer than the current JSPWiki.
* @since 2.4.57
* @throws IllegalArgumentException If the version string could not be parsed.
*/
public static boolean isNewerOrEqual( String version ) throws IllegalArgumentException {
if( version == null ) {
return true;
}
String[] versionComponents = StringUtils.split( version, VERSION_SEPARATORS );
int reqVersion = versionComponents.length > 0 ? Integer.parseInt( versionComponents[0] ) : Release.VERSION;
int reqRevision = versionComponents.length > 1 ? Integer.parseInt( versionComponents[1] ) : Release.REVISION;
int reqMinorRevision = versionComponents.length > 2 ? Integer.parseInt( versionComponents[2] ) : Release.MINORREVISION;
if( VERSION == reqVersion ) {
if( REVISION == reqRevision ) {
if( MINORREVISION == reqMinorRevision ) {
return true;
}
return MINORREVISION > reqMinorRevision;
}
return REVISION > reqRevision;
}
return VERSION > reqVersion;
}
/**
* Returns true, if this version of JSPWiki is older or equal than what is requested.
*
* @param version A version parameter string (a.b.c-something)
* @return A boolean value describing whether the given version is older than the current JSPWiki version
* @since 2.4.57
* @throws IllegalArgumentException If the version string could not be parsed.
*/
public static boolean isOlderOrEqual( String version ) throws IllegalArgumentException {
if( version == null ) {
return true;
}
String[] versionComponents = StringUtils.split( version, VERSION_SEPARATORS );
int reqVersion = versionComponents.length > 0 ? Integer.parseInt( versionComponents[0] ) : Release.VERSION;
int reqRevision = versionComponents.length > 1 ? Integer.parseInt( versionComponents[1] ) : Release.REVISION;
int reqMinorRevision = versionComponents.length > 2 ? Integer.parseInt( versionComponents[2] ) : Release.MINORREVISION;
if( VERSION == reqVersion ) {
if( REVISION == reqRevision ) {
if( MINORREVISION == reqMinorRevision ) {
return true;
}
return MINORREVISION < reqMinorRevision;
}
return REVISION < reqRevision;
}
return VERSION < reqVersion;
}
/**
* Executing this class directly from command line prints out the current version. It is very useful for
* things like different command line tools.
* <P>Example:
* <PRE>
* % java org.apache.wiki.Release
* 1.9.26-cvs
* </PRE>
*
* @param argv The argument string. This class takes in no arguments.
*/
public static void main( String[] argv ) {
System.out.println(VERSTR);
}
}