org.tigris.subversion.javahl.Revision Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javasvn Show documentation
Show all versions of javasvn Show documentation
The only pure Java Subversion library in the world
/**
* @copyright
* ====================================================================
* Copyright (c) 2003-2004 CollabNet. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://subversion.tigris.org/license-1.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
*
* This software consists of voluntary contributions made by many
* individuals. For exact contribution history, see the revision
* history and logs, available at http://subversion.tigris.org/.
* ====================================================================
* @endcopyright
*/
package org.tigris.subversion.javahl;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Class to specify a revision in a svn command.
*/
public class Revision
{
/**
* kind of revision specified
*/
protected int revKind;
/**
* Create a new revision
* @deprecated
* @param kind kind of revision
*/
public Revision(int kind)
{
if(kind < RevisionKind.unspecified || kind > RevisionKind.head)
throw new IllegalArgumentException(
kind+" is not a legel revision kind");
revKind = kind;
}
/**
* Internally create a new revision
* @param kind kind of revision
* @param marker marker to differtiate from the public deprecated version
*/
protected Revision(int kind, boolean marker)
{
if(kind < RevisionKind.unspecified || kind > RevisionKind.head)
throw new IllegalArgumentException(
kind+" is not a legel revision kind");
revKind = kind;
}
/**
* Returns the kind of the Revsion
* @return kind
*/
public int getKind()
{
return revKind;
}
/**
* return the textual representation of the revision
* @return english text
*/
public String toString()
{
switch(revKind) {
case Kind.base : return "BASE";
case Kind.committed : return "COMMITTED";
case Kind.head : return "HEAD";
case Kind.previous : return "PREV";
case Kind.working : return "WORKING";
}
return super.toString();
}
/**
* compare to revision objects
* @param target
* @return if both object have equal content
*/
public boolean equals(Object target) {
if (this == target)
return true;
if (!(target instanceof Revision))
return false;
return ((Revision)target).revKind == revKind;
}
/**
* Creates a Revision.Number object
* @param revisionNumber the revision number of the new object
* @return the new object
* @throws IllegalArgumentException If the specified revision
* number is invalid.
*/
public static Revision getInstance(long revisionNumber)
{
return new Revision.Number(revisionNumber);
}
/**
* Factory which creates {@link #Number} objects for valid
* revision numbers only (those greater than zero). For internal
* usage to avoid an IllegalArgumentException, where no external
* consumer of the javahl API passed an invalid revision number.
*
* @param revNumber The revision number to create an object for.
* @return An object representing revNumber
, or
* null
if the revision number was invalid.
* @since 1.2
*/
static Number createNumber(long revNumber)
{
return (revNumber < 0 ? null : new Number(revNumber));
}
/**
* Creates a Revision.DateSpec objet
* @param revisionDate the date of the new object
* @return the new object
*/
public static Revision getInstance(Date revisionDate)
{
return new Revision.DateSpec(revisionDate);
}
/**
* last commited revision
*/
public static final Revision HEAD = new Revision(Kind.head, true);
/**
* first existing revision
*/
public static final Revision START = new Revision(Kind.unspecified, true);
/**
* last committed revision, needs working copy
*/
public static final Revision COMMITTED = new Revision(Kind.committed, true);
/**
* previous committed revision, needs working copy
*/
public static final Revision PREVIOUS = new Revision(Kind.previous, true);
/**
* base revision of working copy
*/
public static final Revision BASE = new Revision(Kind.base, true);
/**
* working version in working copy
*/
public static final Revision WORKING = new Revision(Kind.working, true);
/**
* Marker revision number for no real revision
*/
public static final int SVN_INVALID_REVNUM = -1;
/**
* class to specify a Revision by number
*/
public static class Number extends Revision
{
/**
* the revision number
*/
protected long revNumber;
/**
* create a revision by number object
* @param number the number
* @throws IllegalArgumentException If the specified revision
* number is invalid.
*/
public Number(long number)
{
super(Kind.number, true);
if(number < 0)
throw new IllegalArgumentException(
"negative revision numbers are not allowed");
revNumber = number;
}
/**
* Returns the revision number
* @return number
*/
public long getNumber()
{
return revNumber;
}
/**
* return the textual representation of the revision
* @return english text
*/
public String toString() {
return Long.toString(revNumber);
}
/**
* compare to revision objects
* @param target
* @return if both object have equal content
*/
public boolean equals(Object target) {
if (!super.equals(target))
return false;
return ((Revision.Number)target).revNumber == revNumber;
}
}
/**
* class to specify a revision by a date
*/
public static class DateSpec extends Revision
{
/**
* the date
*/
protected Date revDate;
/**
* create a revision by date object
* @param date
*/
public DateSpec(Date date)
{
super(Kind.date, true);
if(date == null)
throw new IllegalArgumentException("a date must be specified");
revDate = date;
}
/**
* Returns the date of the revision
* @return the date
*/
public Date getDate()
{
return revDate;
}
/**
* return the textual representation of the revision
* @return english text
*/
public String toString() {
SimpleDateFormat dateFormat =
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z",
Locale.US);
return '{'+dateFormat.format(revDate)+'}';
}
/**
* compare to revision objects
* @param target
* @return if both object have equal content
*/
public boolean equals(Object target) {
if (!super.equals(target))
return false;
return ((Revision.DateSpec)target).revDate.equals(revDate);
}
}
/**
* Various ways of specifying revisions.
*
* Note:
* In contexts where local mods are relevant, the `working' kind
* refers to the uncommitted "working" revision, which may be modified
* with respect to its base revision. In other contexts, `working'
* should behave the same as `committed' or `current'.
*
* the values are defined in RevisionKind because of building reasons
*/
public static final class Kind implements RevisionKind
{
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy