/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. 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://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.wc.admin;
import java.io.File;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNLock;
/**
* The <b>SVNAdminEvent</b> is a type of an event used to notify callers' handlers
* in several methods of <b>SVNAdminClient</b>.
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
*/
public class SVNAdminEvent {
private String myTxnName;
private File myTxnDir;
private long myShard;
private long myRevision;
private long myOriginalRevision;
private long myDroppedRevisionsCount;
private int myDroppedNodesCount;
private SVNAdminEventAction myAction;
private String myPath;
private String myMessage;
private SVNLock myLock;
private SVNErrorMessage myError;
/**
* Creates a new event.
*
* @param revision a new committed revision
* @param originalRevision the original revision
* @param action an event action
* @param message event description message
*/
public SVNAdminEvent(long revision, long originalRevision, SVNAdminEventAction action, String message) {
myRevision = revision;
myOriginalRevision = originalRevision;
myAction = action;
myMessage = message;
}
/**
* Creates a new event to notify about a next path being changed
* withing the revision being currently loaded.
*
* @param action a path change action
* @param path repository path being changed
* @param message
*/
public SVNAdminEvent(SVNAdminEventAction action, String path, String message) {
myAction = action;
myPath = path;
if (myPath != null && myPath.startsWith("/")) {
myPath = myPath.substring("/".length());
}
myMessage = message;
}
/**
* Creates a new event to notify about a next shard being packed.
*
* @param action pack start\end action
* @param shard number of the shard being packed
* @since 1.3
* @see SVNAdminClient#doPack(File)
*/
public SVNAdminEvent(SVNAdminEventAction action, long shard) {
myAction = action;
myShard = shard;
}
/**
* Creates a new event.
*
* @param revision a revision number
* @param action an event action
* @param message an event description message
*/
public SVNAdminEvent(long revision, SVNAdminEventAction action, String message) {
myOriginalRevision = -1;
myRevision = -1;
myMessage = message;
if (action == SVNAdminEventAction.REVISION_LOAD) {
myOriginalRevision = revision;
} else {
myRevision = revision;
}
myAction = action;
}
/**
* Creates a new event.
*
* @param txnName a transaction name
* @param txnDir a transaction directory location
* @param action an event action
*/
public SVNAdminEvent(String txnName, File txnDir, SVNAdminEventAction action) {
myTxnName = txnName;
myTxnDir = txnDir;
myRevision = -1;
myOriginalRevision = -1;
myAction = action;
}
/**
* Creates a new event.
*
* @param action an event action
* @param lock lock info
* @param error an error message (if an error occurred)
* @param message an event description message
* @since 1.2.0
*/
public SVNAdminEvent(SVNAdminEventAction action, SVNLock lock, SVNErrorMessage error, String message) {
myError = error;
myMessage = message;
myAction = action;
myLock = lock;
}
/**
* Creates a new event.
*
* @param action an event action
* @param message an event description message
* @since 1.2.0
*/
public SVNAdminEvent(SVNAdminEventAction action, String message) {
myAction = action;
myMessage = message;
}
/**
* Creates a new event.
*
* @param action an event action
* @since 1.2.0
*/
public SVNAdminEvent(SVNAdminEventAction action) {
this(action, null);
}
/**
* Returns the type of an action this event is fired for.
*
* @return event action
*/
public SVNAdminEventAction getAction() {
return myAction;
}
/**
* Returns an event description message.
* If no message was provided, returns just an empty string.
*
* @return event description message
* @since 1.2.0
*/
public String getMessage() {
return myMessage == null ? "" : myMessage;
}
/**
* Returns the original revision from which a {@link #getRevision() new one}
* is loaded.
*
* @return an original revision number met in a dumpfile
*/
public long getOriginalRevision() {
return myOriginalRevision;
}
/**
* Returns a revision.
*
* <p>
* For {@link SVNAdminClient#doDump(File, java.io.OutputStream, org.tmatesoft.svn.core.wc.SVNRevision, org.tmatesoft.svn.core.wc.SVNRevision, boolean, boolean) dump}
* operations it means a next dumped revision. For {@link SVNAdminClient#doLoad(File, java.io.InputStream, boolean, boolean, SVNUUIDAction, String) load}
* operations it means a new committed revision.
*
* @return a revision number
*/
public long getRevision() {
return myRevision;
}
/**
* Returns a transaction directory
*
* <p>
* Relevant for both {@link SVNAdminClient#doListTransactions(File) SVNAdminClient.doListTransactions()}
* and {@link SVNAdminClient#doRemoveTransactions(File, String[]) SVNAdminClient.doRemoveTransactions()}
* operations.
*
* @return txn directory
*/
public File getTxnDir() {
return myTxnDir;
}
/**
* Returns a transaction name.
*
* <p>
* Relevant for both {@link SVNAdminClient#doListTransactions(File) SVNAdminClient.doListTransactions()}
* and {@link SVNAdminClient#doRemoveTransactions(File, String[]) SVNAdminClient.doRemoveTransactions()}
* operations.
*
* @return txn name
*/
public String getTxnName() {
return myTxnName;
}
/**
* Returns an absolute repository path being changed within
* the current revision load iteration.
*
* @return repository path
*/
public String getPath() {
return myPath;
}
/**
* Returns the lock information.
*
* @return lock info
* @since 1.2.0
*/
public SVNLock getLock() {
return myLock;
}
/**
* Returns the error message describing the error occurred while performing an operation.
*
* @return error message
* @since 1.2.0
*/
public SVNErrorMessage getError() {
return myError;
}
/**
* Returns the total number of revisions dropped during dumpfiltering.
*
* @return number of dropped revisions
* @since 1.2.0
*/
public long getDroppedRevisionsCount() {
return myDroppedRevisionsCount;
}
/**
* Returns the total number of nodes dropped during dumpfiltering.
*
* @return number of dropped nodes
* @since 1.2.0
*/
public int getDroppedNodesCount() {
return myDroppedNodesCount;
}
/**
* Sets the total number of revisions dropped during dumpfiltering.
*
* <p/>
* This method is not intended for API users.
*
* @param droppedRevisionsCount number of dropped revisions
* @since 1.2.0
*/
public void setDroppedRevisionsCount(long droppedRevisionsCount) {
myDroppedRevisionsCount = droppedRevisionsCount;
}
/**
* Sets the total number of nodes dropped during dumpfiltering.
*
* <p/>
* This method is not intended for API users.
*
* @param droppedNodesCount number of dropped nodes
* @since 1.2.0
*/
public void setDroppedNodesCount(int droppedNodesCount) {
myDroppedNodesCount = droppedNodesCount;
}
/**
* Returns the number of the shard packed.
*
* @return shard number
* @since 1.3
*/
public long getShard() {
return myShard;
}
}