/* * ==================================================================== * 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.internal.io.dav; import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNErrorMessage; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNProperties; import org.tmatesoft.svn.core.SVNProperty; import org.tmatesoft.svn.core.SVNPropertyValue; import org.tmatesoft.svn.core.internal.util.SVNEncodingUtil; import org.tmatesoft.svn.core.internal.util.SVNPathUtil; import org.tmatesoft.svn.core.internal.wc.SVNErrorManager; import org.tmatesoft.svn.core.io.ISVNWorkspaceMediator; import org.tmatesoft.svn.util.SVNLogType; /** * @version 1.3 * @author TMate Software Ltd. */ class DAVResource { private String myWURL; private String myVURL; private String myURL; private String myPath; private ISVNWorkspaceMediator myMediator; private long myRevision; private boolean myIsCopy; private DAVConnection myConnection; private SVNProperties myProperties; private boolean myIsAdded; public DAVResource(ISVNWorkspaceMediator mediator, DAVConnection connection, String path, long revision) { this(mediator, connection, path, revision, false); } public DAVResource(ISVNWorkspaceMediator mediator, DAVConnection connection, String path, long revision, boolean isCopy) { myPath = path; myMediator = mediator; String locationPath = SVNEncodingUtil.uriEncode(connection.getLocation().getPath()); myURL = SVNPathUtil.append(locationPath, path); myRevision = revision; myConnection = connection; myIsCopy = isCopy; } public void setAdded(boolean added) { myIsAdded = added; } public boolean isAdded() { return myIsAdded; } public boolean isCopy() { return myIsCopy; } public String getURL() { return myURL; } public String getPath() { return myPath; } public String getVersionURL() { return myVURL; } public void fetchVersionURL(DAVResource parent, boolean force) throws SVNException { if (!force && getVersionURL() != null) { return; } if (!force) { if (myMediator != null && DAVUtil.isUseDAVWCURL()) { SVNPropertyValue value = myMediator.getWorkspaceProperty(SVNEncodingUtil.uriDecode(myPath), SVNProperty.WC_URL); myVURL = value == null ? null : value.getString(); if ("".equals(myVURL)) { myMediator.setWorkspaceProperty(SVNEncodingUtil.uriDecode(myPath), SVNProperty.WC_URL, null); myVURL = null; } if (myVURL != null) { return; } } if (parent != null && parent.getVersionURL() != null && parent.myRevision == myRevision) { myVURL = SVNPathUtil.append(parent.getVersionURL(), SVNPathUtil.tail(myPath)); return; } } // now from server. String path = myURL; if (myRevision >= 0) { // get baseline collection url for revision from public url. DAVBaselineInfo info = DAVUtil.getBaselineInfo(myConnection, null, path, myRevision, false, false, null); path = SVNPathUtil.append(info.baselineBase, info.baselinePath); } // get "checked-in" property from baseline collection or from HEAD, this will be vURL. // this shouldn't be called for copied urls. try { myVURL = DAVUtil.getPropertyValue(myConnection, path, null, DAVElement.CHECKED_IN); } catch (SVNException e) { if (e.getErrorMessage().getErrorCode() == SVNErrorCode.RA_DAV_PROPS_NOT_FOUND){ SVNErrorMessage error = SVNErrorMessage.create(SVNErrorCode.PROPERTY_NOT_FOUND, "Could not fetch the Version Resource URL (needed during an import or when it is missing from the local, cached props)"); SVNErrorManager.error(error, e, SVNLogType.NETWORK); } throw e; } if (myMediator != null) { SVNPropertyValue urlPropertyValue = DAVUtil.isUseDAVWCURL() ? SVNPropertyValue.create(myVURL) : null; myMediator.setWorkspaceProperty(SVNEncodingUtil.uriDecode(myPath), SVNProperty.WC_URL, urlPropertyValue); } } public String getWorkingURL() { return myWURL; } public void dispose() { myProperties = null; } public void setWorkingURL(String location) { myWURL = location; } public void putProperty(String name, String value) { if (myProperties == null) { myProperties = new SVNProperties(); } myProperties.put(name, value); } public void putProperty(String name, SVNPropertyValue value) { if (myProperties == null) { myProperties = new SVNProperties(); } myProperties.put(name, value); } public SVNProperties getProperties() { return myProperties; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("["); sb.append(myURL); sb.append("]["); sb.append(myVURL); sb.append("]["); sb.append(myWURL); sb.append("]["); sb.append(myPath); sb.append("]"); return sb.toString(); } }