package org.tmatesoft.svn.core.wc2; import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNErrorMessage; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.wc.SVNErrorManager; import org.tmatesoft.svn.util.SVNLogType; /** * Represents set changelist operation. * * Adds/remove each path in <code>targets</code> (recursing to <code>depth</code> as * necessary) to <code>changelist</code>. If a path is already a member of * another changelist, then removes it from the other changelist and adds it * to <code>changelist</code>. (For now, a path cannot belong to two * changelists at once.) * * <p/> * <code>changelists</code> is an array of <code>String</code> changelist * names, used as a restrictive filter on items whose changelist assignments * are adjusted; that is, doesn't tweak the change set of any item unless * it's currently a member of one of those changelists. If * <code>changelists</code> is empty (or <code>null</code>), * no changelist filtering occurs. * * <p/> * Note: this metadata is purely a client-side "bookkeeping" convenience, * and is entirely managed by the working copy. * * <p/> * Note: this method does not require repository access. * * @author TMate Software Ltd. * @version 1.7 */ public class SvnSetChangelist extends SvnOperation<Void> { private String changelistName; private boolean remove; protected SvnSetChangelist(SvnOperationFactory factory) { super(factory); } /** * Returns the operation's changelist name. * * @return changelist name of the operation */ public String getChangelistName() { return changelistName; } /** * Sets the operation's changelist name. * * @param changelistName changelist name of the operation */ public void setChangelistName(String changelistName) { this.changelistName = changelistName; } /** * Returns whether <code>targets</code> should be removed from changelist. * * @return <code>true</code> if <code>targets</code> should be removed from changelist, if <code>false</code> should be added */ public boolean isRemove() { return remove; } /** * Sets whether <code>targets</code> should be removed from changelist. * * @param remove <code>true</code> if <code>targets</code> should be removed from changelist, if <code>false</code> should be added */ public void setRemove(boolean remove) { this.remove = remove; } @Override protected void ensureArgumentsAreValid() throws SVNException { super.ensureArgumentsAreValid(); if (!isRemove()) { if ("".equals(getChangelistName())) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.BAD_CHANGELIST_NAME, "Target changelist name must not be empty"); SVNErrorManager.error(err, SVNLogType.WC); } } if (hasRemoteTargets()) { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ILLEGAL_TARGET, "''{0}'' is not a local path", getFirstTarget().getURL()); SVNErrorManager.error(err, SVNLogType.WC); } } @Override protected int getMaximumTargetsCount() { return Integer.MAX_VALUE; } /** * Gets whether the operation changes working copy * @return <code>true</code> if the operation changes the working copy, otherwise <code>false</code> */ @Override public boolean isChangesWorkingCopy() { return true; } }