| /******************************************************************************* |
| * Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 |
| * which accompanies this distribution. |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Version |
| * class defines OSGi-like behavior to a version object |
| * it has an identifier (Major.Minor.Micro.Qualifier) and can compare itself to others |
| * it can report its identifier, and its identifier can be set |
| * |
| * Contributors: |
| * egwin - initial conception and implementation |
| */ |
| |
| package org.eclipse.persistence.buildtools.helper; |
| |
| import java.lang.NumberFormatException; |
| |
| import org.eclipse.persistence.buildtools.helper.VersionException;; |
| |
| public class Version { |
| private String identifier = "0.0"; |
| private Integer major = 0; |
| private Integer minor = 0; |
| private Integer micro = 0; |
| private String qualifier = ""; |
| |
| private int[] indexList = {0,0,0}; //holds the indexes of the "."s in the identifier string. |
| |
| // helper |
| private String validateIdentifier(String identifier) throws VersionException{ |
| String validated=identifier; |
| boolean error=false; |
| |
| // clear leading whitespace |
| while ( validated.startsWith(" ") || validated.startsWith("\t") ) |
| validated=validated.substring(1); |
| // clear trailing whitespace |
| while ( validated.endsWith(" ") || validated.endsWith("\t") ) |
| validated=validated.substring(0,validated.length() - 1); |
| |
| if ( validated.startsWith(".") ) { |
| throw new VersionException("Initial version tokenizer found (.): Invalid version string '" + validated + "'."); |
| } |
| else { |
| if( validated.endsWith(".") ) { |
| throw new VersionException("Terminating version tokenizer found (.): Invalid version string '" + validated + "'."); |
| } |
| else { |
| int index = 0; |
| int subindex = 0; |
| int count = 0; |
| int maxindex = validated.lastIndexOf("."); |
| while( !error && ( (subindex = validated.substring(index).indexOf(".")) >0 || index<maxindex )) { |
| if(count>2 && subindex>0) |
| throw new VersionException("Maximum (4) tokens exceeded: Invalid version string '" + validated + "'."); |
| else { |
| index += subindex; |
| indexList[count] = index; |
| index++; //increment to point to char after found '.' |
| count++; |
| } |
| } |
| } |
| } |
| return validated; |
| } |
| |
| // setter |
| private void setMajor(Integer major) { |
| this.major = major; |
| } |
| private void setMinor(Integer minor) { |
| this.minor = minor; |
| } |
| private void setMicro(Integer micro) { |
| this.micro = micro; |
| } |
| private void setQualifier(String qualifier) { |
| this.qualifier = qualifier; |
| } |
| |
| private void setAll(String identifier) throws VersionException{ |
| // assumes basic validation completed |
| try { |
| if( identifier != "" ){ |
| if( indexList[0] > 0 ) { |
| setMajor(Integer.valueOf( identifier.substring(0, indexList[0]))); |
| if( indexList[1] > 0 ) { |
| setMinor(Integer.valueOf( identifier.substring(indexList[0]+1, indexList[1]))); |
| if( indexList[2] > 0 ) { |
| setMicro(Integer.valueOf( identifier.substring(indexList[1]+1, indexList[2]))); |
| setQualifier(identifier.substring(indexList[2]+1)); |
| } |
| else |
| setMicro(Integer.valueOf( identifier.substring(indexList[1]+1))); |
| } |
| else |
| setMinor(Integer.valueOf( identifier.substring(indexList[0]+1) )); |
| } |
| else |
| setMajor(Integer.valueOf(identifier)); |
| } |
| } catch ( NumberFormatException e){ |
| throw new VersionException("Major.Minor.Micro tokens expected to be numeric. One or more is invalid. " + e.getMessage() + " in \"" + identifier + "\".", e); |
| } |
| String validIdentifier = get3PartStr(); |
| if(getQualifier() != null && getQualifier() != "" ) { |
| validIdentifier+= "." + getQualifier(); |
| } |
| this.identifier = validIdentifier; |
| } |
| |
| // Public methods |
| // constructors |
| public Version() { |
| } |
| public Version(String identifier) { |
| setIdentifier(identifier); |
| } |
| |
| // getters |
| public Integer getMajorInt() { |
| return this.major; |
| } |
| public Integer getMinorInt() { |
| return this.minor; |
| } |
| // Micro also referred to as "bugfix" token of version |
| public Integer getMicroInt() { |
| return this.micro; |
| } |
| public String getMajorStr() { |
| return this.major.toString(); |
| } |
| public String getMinorStr() { |
| return this.minor.toString(); |
| } |
| public String getMicroStr() { |
| return this.micro.toString(); |
| } |
| public String get3PartStr() { |
| return getMajorStr() + "." + getMinorStr() + "." + getMicroStr(); |
| } |
| public String getQualifier() { |
| return this.qualifier; |
| } |
| public String getIdentifier() { |
| return this.identifier; |
| } |
| |
| // setters |
| public void setIdentifier(String identifier) { |
| setAll(validateIdentifier(identifier)); |
| } |
| |
| // Compare Versions |
| public boolean gt( Version comp ) { |
| boolean result=false; |
| |
| if(this.major > comp.getMajorInt()) result = true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor > comp.getMinorInt()) ) result = true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor == comp.getMinorInt()) && (this.micro > comp.getMicroInt()) ) result=true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor == comp.getMinorInt()) && (this.micro == comp.getMicroInt()) && (this.qualifier.compareTo(comp.getQualifier()) > 0) ) result=true; |
| |
| return result; |
| } |
| public boolean lt( Version comp ) { |
| boolean result=false; |
| |
| if(this.major < comp.getMajorInt()) result = true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor < comp.getMinorInt()) ) result = true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor == comp.getMinorInt()) && (this.micro < comp.getMicroInt()) ) result=true; |
| else if ( (this.major == comp.getMajorInt()) && (this.minor == comp.getMinorInt()) && (this.micro == comp.getMicroInt()) && (this.qualifier.compareTo(comp.getQualifier()) < 0) ) result=true; |
| |
| return result; |
| } |
| public boolean eq( Version comp ) { |
| boolean result=false; |
| |
| if( (this.major == comp.getMajorInt()) && (this.minor == comp.getMinorInt()) && (this.micro == comp.getMicroInt()) && (this.qualifier.compareTo(comp.getQualifier()) == 0) ) { |
| result = true; |
| } |
| return result; |
| } |
| public boolean ge( Version comp ) { |
| boolean result=false; |
| |
| if( (this.gt(comp) || this.eq(comp) ) ) result = true; |
| return result; |
| } |
| public boolean le( Version comp ) { |
| boolean result=false; |
| |
| if( (this.lt(comp) || this.eq(comp) ) ) result = true; |
| return result; |
| } |
| |
| public boolean empty() { |
| boolean result=false; |
| |
| if( (this.major == 0) && (this.minor == 0) && (this.micro == 0) && (this.qualifier.compareTo("") == 0) ) { |
| result = true; |
| } |
| return result; |
| } |
| |
| // Compare version strings |
| //public boolean gt( String comp ) { |
| // boolean result=false; |
| // |
| // if(this.identifier.compareTo(comp) > 0) { |
| // result = true; |
| // } |
| // return result; |
| //} |
| //public boolean lt( String comp ) { |
| // boolean result=false; |
| // |
| // if(this.identifier.compareTo(comp) < 0) { |
| // result = true; |
| // } |
| // return result; |
| //} |
| //public boolean ge( String comp ) { |
| // boolean result=false; |
| // |
| // if(this.identifier.compareTo(comp) >= 0) { |
| // result = true; |
| // } |
| // return result; |
| //} |
| //public boolean le( String comp ) { |
| // boolean result=false; |
| // |
| // if(this.identifier.compareTo(comp) <= 0) { |
| // result = true; |
| // } |
| // return result; |
| //} |
| //public boolean eq( String comp ) { |
| // boolean result=false; |
| // |
| // if(this.identifier.equals(comp)) { |
| // result = true; |
| // } |
| // return result; |
| //} |
| } |