/*
* ====================================================================
* Copyright (c) 2004-2008 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.server.dav;
import javax.servlet.http.HttpServletResponse;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.io.fs.FSFS;
import org.tmatesoft.svn.core.internal.io.fs.FSRoot;
import org.tmatesoft.svn.core.wc.SVNRevision;
/**
* @version 1.2.0
* @author TMate Software Ltd.
*/
public class DAVVersionResourceHelper extends DAVResourceHelper {
protected void prepare(DAVResource resource) throws DAVException {
if (!SVNRevision.isValidRevisionNumber(resource.getRevision())) {
try {
resource.setRevision(resource.getLatestRevision());
} catch (SVNException e) {
throw DAVException.convertError(e.getErrorMessage(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Could not fetch 'youngest' revision to enable accessing the latest baseline resource.", null);
}
}
FSRoot root = resource.getRoot();
FSFS fsfs = resource.getFSFS();
if (root == null) {
try {
root = fsfs.createRevisionRoot(resource.getRevision());
} catch (SVNException svne) {
throw DAVException.convertError(svne.getErrorMessage(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Could not open a revision root.", null);
}
resource.setRoot(root);
}
resource.getResourceURI().setURI(DAVPathUtil.buildURI(null, DAVResourceKind.BASELINE, resource.getRevision(), null, false));
resource.setExists(true);
}
protected DAVResource getParentResource(DAVResource resource) throws DAVException {
DAVResourceHelper.throwIllegalGetParentResourceError(resource);
return null;
}
public static DAVResource createVersionResource(DAVResource resource, String uri) throws DAVException {
DAVResourceURI regularResourceURI = null;
try {
regularResourceURI = new DAVResourceURI(resource.getResourceURI().getContext(), uri, null, false);
} catch (SVNException svne) {
throw DAVException.convertError(svne.getErrorMessage(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Could not parse version resource uri.", null);
}
return new DAVResource(resource.getRepository(), resource.getRepositoryManager(), regularResourceURI, resource.isSVNClient(),
resource.getDeltaBase(), resource.getVersion(), resource.getClientOptions(), resource.getBaseChecksum(),
resource.getResultChecksum(), resource.getUserName(), resource.getActivitiesDB(), resource.getLockTokens(),
resource.getClientCapabilities());
}
}