/* * ==================================================================== * 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; import java.io.File; import java.util.Map; import org.tmatesoft.svn.core.SVNNodeKind; import org.tmatesoft.svn.core.SVNPropertyValue; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.util.SVNHashMap; import org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess; /** * The <b>SVNCommitItem</b> represents a versioned item that is to be committed * to a repository. * * <p> * Used to wrap information about a versioned item into a single object. A * commit item can represent either a Working Copy item (speaking of committing * local changes in WC files and directories) or one that is located in a * repository (for example, when deleting a file/directory right from a * repository). * * <p> * When you call <b>SVNCommitClient</b>'s * {@link SVNCommitClient#doCollectCommitItems(File[], boolean, boolean, org.tmatesoft.svn.core.SVNDepth, boolean, String[]) * doCollectCommitItems()} this methods processes the specified paths and * collects information on items to be committed in <b>SVNCommitItem</b> objects * which are packed into a single <b>SVNCommitPacket</b> object. This object is * returned by the method to the caller. * * @version 1.3 * @author TMate Software Ltd. * @since 1.2 * @see SVNCommitPacket */ public class SVNCommitItem { private SVNRevision myRevision; private File myFile; private SVNURL myURL; private SVNURL myCopyFromURL; private SVNNodeKind myKind; private boolean myIsAdded; private boolean myIsDeleted; private boolean myIsPropertiesModified; private boolean myIsContentsModified; private boolean myIsCopied; private boolean myIsLocked; private String myPath; private SVNWCAccess myWCAccess; private SVNRevision myCopyFromRevision; private Map myOutgoingProperties; private Map myIncomingProperties; /** * Constructs and initializes an <b>SVNCommitItem</b> object. * * @param file * a WC item's location * @param URL * the item's repository location * @param copyFromURL * the repository location of the item's ancestor (if the item * was or to be copied) * @param kind * the item's node kind * @param revision * the item's revision * @param copyFromRevision * the revision of the item's ancestor it's copied from * @param isAdded * <span class="javakeyword">true</span> if the item is to be * added to version control, otherwise <span * class="javakeyword">false</span> * @param isDeleted * <span class="javakeyword">true</span> if the item is to be * deleted from version control, otherwise <span * class="javakeyword">false</span> * @param isPropertiesModified * <span class="javakeyword">true</span> if the item's properties * have local changes, otherwise <span * class="javakeyword">false</span> * @param isContentsModified * <span class="javakeyword">true</span> if the item's contents * (file contents or directory entries) have local changes, * otherwise <span class="javakeyword">false</span> * @param isCopied * <span class="javakeyword">true</span> if the item is to be * added to version control with history, otherwise <span * class="javakeyword">false</span> * @param locked * <span class="javakeyword">true</span> if the item is to be * locked, otherwise <span class="javakeyword">false</span> */ public SVNCommitItem(File file, SVNURL URL, SVNURL copyFromURL, SVNNodeKind kind, SVNRevision revision, SVNRevision copyFromRevision, boolean isAdded, boolean isDeleted, boolean isPropertiesModified, boolean isContentsModified, boolean isCopied, boolean locked) { myRevision = revision == null ? SVNRevision.UNDEFINED : revision; myCopyFromRevision = copyFromRevision == null ? SVNRevision.UNDEFINED : copyFromRevision; myFile = file; myURL = URL; myCopyFromURL = copyFromURL; myKind = kind; myIsAdded = isAdded; myIsDeleted = isDeleted; myIsPropertiesModified = isPropertiesModified; myIsContentsModified = isContentsModified; myIsCopied = isCopied; myIsLocked = locked; } /** * Gets the revision of the versioned item . For a WC item it is the current * working revision. * * @return the revision of the item to be committed */ public SVNRevision getRevision() { return myRevision; } /** * Gets the revision of the versioned item's ancestor from which the item * was copied. * * @return the revision the item was copied from */ public SVNRevision getCopyFromRevision() { return myCopyFromRevision; } /** * Gets the location of the Working Copy item. * * @return the item's local path */ public File getFile() { return myFile; } /** * Gets the versioned item's repository location. * * @return the item's URL pointing to its repository location */ public SVNURL getURL() { return myURL; } /** * Gets the repository location of the versioned item's ancestor from which * the item was copied. * * @return the URL of the copy source in an * {@link org.tmatesoft.svn.core.SVNURL} representation */ public SVNURL getCopyFromURL() { return myCopyFromURL; } /** * Gets the node kind of the versioned item. * * @return the item's node kind */ public SVNNodeKind getKind() { return myKind; } /** * Determines if the item is to be added to version control. * * @return <span class="javakeyword">true</span> if added, otherwise <span * class="javakeyword">false</span> */ public boolean isAdded() { return myIsAdded; } /** * Determines if the item is to be deleted from version control. * * @return <span class="javakeyword">true</span> if deleted, otherwise <span * class="javakeyword">false</span> */ public boolean isDeleted() { return myIsDeleted; } /** * Determines if the Working Copy item has local edits to properties. * * @return <span class="javakeyword">true</span> if the properties have * local changes, otherwise <span class="javakeyword">false</span> */ public boolean isPropertiesModified() { return myIsPropertiesModified; } /** * Determines if the Working Copy item has local edits to its contents. If * the item is a file - that is the file contents, a directory - the * directory contents (meaning entries). * * @return <span class="javakeyword">true</span> if the contents have local * changes, otherwise <span class="javakeyword">false</span> */ public boolean isContentsModified() { return myIsContentsModified; } /** * Determines if the item is to be added to version control with history. * * @return <span class="javakeyword">true</span> if added with history * (copied in other words), otherwise <span * class="javakeyword">false</span> */ public boolean isCopied() { return myIsCopied; } /** * Determines whether the item needs to be locked. * * @return <span class="javakeyword">true</span> if locked, otherwise <span * class="javakeyword">false</span> */ public boolean isLocked() { return myIsLocked; } /** * Gets the item's relevant path. The path is relevant to the Working Copy * root. * * @return the item's relevant path */ // TODO get rid of this. always use getURL or getFile instead. public String getPath() { return myPath; } /** * Sets the item's relevant path. * * @param path * the item's path relevant to the Working Copy root */ public void setPath(String path) { myPath = path; } /** * This method is not intended for users (from an API point of view). * * @return wc access object */ public SVNWCAccess getWCAccess() { return myWCAccess; } /** * Returns properties to commit. * * @return properties to commit */ public Map getOutgoingProperties() { return myOutgoingProperties; } public void setWCAccess(SVNWCAccess wcAccess) { myWCAccess = wcAccess; } public void setProperty(String propertyName, SVNPropertyValue propertyValue) { myIsPropertiesModified = true; Map props = getProperties(); props.put(propertyName, propertyValue); } private Map getProperties() { if (myOutgoingProperties == null) { myOutgoingProperties = new SVNHashMap(); } return myOutgoingProperties; } public void setContentsModified(boolean modified) { myIsContentsModified = modified; } public void setPropertiesModified(boolean modified) { myIsPropertiesModified = modified; } public void setIncomingProperty(String propertyName, SVNPropertyValue propertyValue) { getIncomingProperties().put(propertyName, propertyValue); } public Map getIncomingProperties() { if (myIncomingProperties == null) { myIncomingProperties = new SVNHashMap(); } return myIncomingProperties; } }