package org.tmatesoft.svn.core.wc2; import org.tmatesoft.svn.core.SVNCommitInfo; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.SVNPropertyValue; import org.tmatesoft.svn.core.wc2.hooks.ISvnCommitHandler; /** * Base class for operations that change repository. * The <b>AbstractSvnCommit</b> class provides methods to perform operations that * relate to committing changes to an SVN repository. These operations are * similar to respective commands of the native SVN command line client and * include ones which operate on working copy items as well as ones that operate * only on a repository: commit, import, remote copy, remote delete, remote make directory, remote set property. * * <p/> * {@link #run()} method returns {@link SVNCommitInfo} information on a new revision as the result of the commit. * * @author TMate Software Ltd. * @version 1.7 * @see SvnCommit * @see SvnImport * @see SvnRemoteCopy * @see SvnRemoteDelete * @see SvnRemoteMkDir * @see SvnRemoteSetProperty */ public abstract class AbstractSvnCommit extends SvnReceivingOperation<SVNCommitInfo> { private String commitMessage; private SVNProperties revisionProperties; private ISvnCommitHandler commitHandler; protected AbstractSvnCommit(SvnOperationFactory factory) { super(factory); setRevisionProperties(new SVNProperties()); } /** * Gets custom revision properties for the operation. * If non-<code>null</code>, <code>revisionProperties</code> * holds additional, custom revision properties (<code>String</code> names * mapped to {@link SVNPropertyValue} values) to be set on the new revision. * This table cannot contain any standard Subversion properties. * * @return custom revision properties */ public SVNProperties getRevisionProperties() { return revisionProperties; } /** * Sets custom revision properties for the operation. * If non-<code>null</code>, <code>revisionProperties</code> * holds additional, custom revision properties (<code>String</code> names * mapped to {@link SVNPropertyValue} values) to be set on the new revision. * This table cannot contain any standard Subversion properties. * * @param revisionProperties custom revision properties */ public void setRevisionProperties(SVNProperties revisionProperties) { this.revisionProperties = revisionProperties; } /** * Gets commit log message. * * @return commit log message */ public String getCommitMessage() { return commitMessage; } /** * Sets commit log message. * * @param commitMessage commit log message */ public void setCommitMessage(String commitMessage) { this.commitMessage = commitMessage; } /** * Adds custom revision properties for the operation. * See {@link #setRevisionProperties(SVNProperties)} * * @param name name of custom revision property * @param value value of custom revision property */ public void setRevisionProperty(String name, SVNPropertyValue value) { if (value != null) { getRevisionProperties().put(name, value); } else { getRevisionProperties().remove(name); } } /** * Gets the commit handler for the operation. * * @return commit handler */ public ISvnCommitHandler getCommitHandler() { if (commitHandler == null) { commitHandler = new ISvnCommitHandler() { public SVNProperties getRevisionProperties(String message, SvnCommitItem[] commitables, SVNProperties revisionProperties) throws SVNException { return revisionProperties == null ? new SVNProperties() : revisionProperties; } public String getCommitMessage(String message, SvnCommitItem[] commitables) throws SVNException { return message == null ? "" : message; } }; } return commitHandler; } /** * Sets the commit handler for the operation. * * @param commitHandler commit handler */ public void setCommitHandler(ISvnCommitHandler commitHandler) { this.commitHandler = commitHandler; } }