Name

global.Version

Description

Compares and manipulates version strings.

Script

/**
* Compares and manipulates version strings.
* 
* @package com.snc.discovery
* @since fuji
* @author roy.laurie
*/
var Version = function(version, options) {
  
  // initialize default values
  this.delimiter = '.';
  this.segments = [];
  this.major = null;
  this.minor = null;
  this.build = null;
  this.version = null;
  
  if (typeof version == 'undefined' || version == null)
  	return;
  
  // convert java string to javascript if required
  version = '' + version;
  version.trim();
  
  if (version.length === 0)
  	return;
  
  // obtain major.minor.build version numbers (version can not be null)
  var segments = version.split(this.delimiter);	
  
  // extract version segments until an invalid segment is encountered (e.g. 1..3) or end encountered.
  for (var i = 0; i < segments.length; ++i) {
  	var segment = parseInt(segments[i]);
  	
  	// Invalid format? (e.g. implied build number is missing => '4.12.')
  	if (isNaN(segment)) {
  		// format is invalid - reset input version
  		version = null;
  		break;
  	}
  	
  	this.segments.push(segment);
  }
  
  // reset input version if format was invalid
  if (this.segments.length === 0)
  	version = null;

  this.major = ( typeof this.segments[0] !== 'undefined' ? this.segments[0] : null );
  this.minor = ( typeof this.segments[1] !== 'undefined' ? this.segments[1] : null );
  this.build = ( typeof this.segments[2] !== 'undefined' ? this.segments[2] : null );
  
  // store final input version in object property
  this.version = version;
};

Version.prototype = {
  lessThan: function(version) {
  	var rh = this._validateVersion(version);
  	if (rh === null)
  		return false;

  	var maxSegments = ( this.segments.length > rh.segments.length ? this.segments.length : rh.segments.length );
  	for (var i = 0; i < maxSegments; ++i) {
  		var segment = ( typeof this.segments[i] === 'undefined' ? 0 : this.segments[i] );
  		var rhSegment = ( typeof rh.segments[i] === 'undefined' ? 0 : rh.segments[i] );
  		
  		if (segment < rhSegment)
  			return true;
  		if (segment > rhSegment)
  			return false;
  	}
  	
  	return false;
  },
  
  greaterThan: function(version) {
  	var rh = this._validateVersion(version);
  	if (rh === null)
  		return false;

  	var maxSegments = ( this.segments.length > rh.segments.length ? this.segments.length : rh.segments.length );
  	for (var i = 0; i < maxSegments; ++i) {
  		var segment = ( typeof this.segments[i] === 'undefined' ? 0 : this.segments[i] );
  		var rhSegment = ( typeof rh.segments[i] === 'undefined' ? 0 : rh.segments[i] );
  		
  		if (segment > rhSegment)
  			return true;
  		if (segment < rhSegment)
  			return false;
  	}
  	
  	return false;
  },
  
  equals: function(version) {
  	var rh = this._validateVersion(version);
  	return rh !== null && this.version === rh.version;
  },
  
  _validateVersion: function(version) {
  	if (this.version === null)
  		return null;
  	
  	if (typeof version === 'undefined' || version === null)
  		return null;
  	
  	if (!(version instanceof Version))
  		version = new Version(version);
  	
  	if (version.version === null)
  		return null;
  	
  	return version;
  },
  
  type: 'Version',
};

Sys ID

4f5dbdf437112100dcd48c00dfbe5d02

Offical Documentation

Official Docs: