All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.powerscala.Version.scala Maven / Gradle / Ivy

The newest version!
package org.powerscala

/**
 * Version represents a version numbering.
 *
 * @author Matt Hicks 
 */
case class Version(major: Int = 1, minor: Int = 0, maintenance: Int = 0, build: Int = 0, extra: String = null) extends Ordered[Version] {
  private lazy val string = {
    val b = new StringBuilder
    b.append(major)
    if (minor > 0 || maintenance > 0 || build > 0) {
      b.append('.')
      b.append(minor)
      if (maintenance > 0 || build > 0) {
        b.append('.')
        b.append(maintenance)
        if (build > 0) {
          b.append('.')
          b.append(build)
        }
      }
    }
    if (extra != null && extra.nonEmpty) {
      b.append('-')
      b.append(extra)
    }
    b.toString()
  }

  override def toString = string

  def compare(that: Version) = if (major != that.major) {
    major.compare(that.major)
  } else if (minor != that.minor) {
    minor.compare(that.minor)
  } else if (maintenance != that.maintenance) {
    maintenance.compare(that.maintenance)
  } else if (build != that.build) {
    build.compare(that.build)
  } else if (extra != that.extra && extra != null) {
    extra.compare(that.extra)
  } else if (extra != that.extra && that.extra != null) {
    -1
  } else {
    0
  }
}

object Version {
  val Matcher = """(\d+)[.]?(\d*)[.]?(\d*)[.]?(\d*)[-]?(.*)""".r

  def apply(version: String): Version = version match {
    case Matcher(major, minor, maintenance, build, other) => {
      Version(n(major), n(minor), n(maintenance), n(build), other)
    }
  }

  private def n(s: String) = s match {
    case "" => 0
    case _ => s.toInt
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy