/*******************************************************************************
* Copyright (c) 2014 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH
*******************************************************************************/
package org.eclipse.jubula.client.core.model;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* This is a representation of an project version which includes
* major, minor, micro and qualifier
* @author BREDEX GmbH
*
*/
public class ProjectVersion {
/** The major version number of this project */
private Integer m_majorNumber = null;
/** The minor version number for this project */
private Integer m_minorNumber = null;
/** The micro version number for this project */
private Integer m_microNumber = null;
/** The version for this project */
private String m_qualifier = null;
/**
* creates a project version which has only a qualifier, everything else is null
* @param qualifier the qualifier version
*/
public ProjectVersion(String qualifier) {
m_qualifier = qualifier;
}
/**
* creates a project version which has only version numbers
* @param majorVersion major version of the project
* @param minorVersion minor version of the project could be null
* @param microVersion micro version of the project could be null
*/
public ProjectVersion(Integer majorVersion, Integer minorVersion,
Integer microVersion) {
m_majorNumber = majorVersion;
m_minorNumber = minorVersion;
m_microNumber = microVersion;
}
/**
* creates a complete project version with numbers and qualifier.
* Either at least <b>majorVersion</b> or <b>qualifier</b> should be given
* @param majorVersion major version of the project could be null
* @param minorVersion minor version of the project could be null
* @param microVersion micro version of the project could be null
* @param qualifier version qualifier of the project could be null
*/
public ProjectVersion(Integer majorVersion, Integer minorVersion,
Integer microVersion, String qualifier) {
this(majorVersion, minorVersion, microVersion);
m_qualifier = qualifier;
}
/**
* @return the major version number
*/
public Integer getMajorNumber() {
return m_majorNumber;
}
/**
* @return the minor version number
*/
public Integer getMinorNumber() {
return m_minorNumber;
}
/**
* @return the micro version number
*/
public Integer getMicroNumber() {
return m_microNumber;
}
/**
* @return the version qualifier
*/
public String getVersionQualifier() {
return m_qualifier;
}
/**
* {@inheritDoc}
*/
public int hashCode() {
return new HashCodeBuilder().append(m_majorNumber)
.append(m_minorNumber).append(m_microNumber)
.append(m_qualifier).toHashCode();
}
/**
* {@inheritDoc}
*/
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if ((obj instanceof ProjectVersion)) {
ProjectVersion version = (ProjectVersion) obj;
return new EqualsBuilder()
.append(m_majorNumber, version.getMajorNumber())
.append(m_minorNumber, version.getMinorNumber())
.append(m_microNumber, version.getMicroNumber())
.append(m_qualifier, version.getVersionQualifier()).isEquals();
}
return false;
}
/**
* {@inheritDoc}
*/
public String toString() {
StringBuffer sb = new StringBuffer();
if (getMajorNumber() != null) {
sb.append(getMajorNumber());
}
if (getMinorNumber() != null) {
sb.append(IProjectPO.VERSION_SEPARATOR);
sb.append(getMinorNumber());
}
if (getMicroNumber() != null) {
sb.append(IProjectPO.VERSION_SEPARATOR);
sb.append(getMicroNumber());
}
if (getVersionQualifier() != null) {
if (getMajorNumber() != null) {
sb.append(IProjectPO.NAME_SEPARATOR);
}
sb.append(getVersionQualifier());
}
return sb.toString();
}
/**
* @param version is a project version
* @return return less then 0 if this version is older then the argument version,
* 0 if this version is equal with argument version,
* greater then 0 if this version is newer then the argument version.
*/
public int compareTo(ProjectVersion version) {
int result = 0;
if (m_majorNumber != null && version.m_majorNumber != null) {
result = m_majorNumber.compareTo(version.m_majorNumber);
if (result != 0) {
return result;
}
}
if (m_microNumber != null && version.m_microNumber != null) {
result = m_microNumber.compareTo(version.m_microNumber);
if (result != 0) {
return result;
}
}
if (m_minorNumber != null && version.m_minorNumber != null) {
result = m_minorNumber.compareTo(version.m_minorNumber);
if (result != 0) {
return result;
}
}
if (m_qualifier != null && version.m_qualifier != null) {
result = m_qualifier.compareTo(version.m_qualifier);
}
return result;
}
}