Index: contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
===================================================================
--- contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java (revision 189734)
+++ contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java (working copy)
@@ -107,9 +107,16 @@
*
* @return the session provider
*/
- abstract public DavSessionProvider getSessionProvider();
+ abstract public DavSessionProvider getDavSessionProvider();
/**
+ * Returns the DavSessionProvider.
+ *
+ * @param davSessionProvider
+ */
+ abstract public void setDavSessionProvider(DavSessionProvider davSessionProvider);
+
+ /**
* Returns the DavLocatorFactory.
*
* @return the locator factory
@@ -117,6 +124,13 @@
abstract public DavLocatorFactory getLocatorFactory();
/**
+ * Sets the DavLocatorFactory.
+ *
+ * @param locatorFactory
+ */
+ abstract public void setLocatorFactory(DavLocatorFactory locatorFactory);
+
+ /**
* Returns the DavResourceFactory.
*
* @return the resource factory
@@ -124,6 +138,13 @@
abstract public DavResourceFactory getResourceFactory();
/**
+ * Sets the DavResourceFactory.
+ *
+ * @param resourceFactory
+ */
+ abstract public void setResourceFactory(DavResourceFactory resourceFactory);
+
+ /**
* Returns the value of the 'WWW-Authenticate' header, that is returned in
* case of 401 error.
*
@@ -146,7 +167,7 @@
WebdavResponse webdavResponse = new WebdavResponseImpl(response);
try {
// make sure there is a authenticated user
- if (!getSessionProvider().attachSession(webdavRequest)) {
+ if (!getDavSessionProvider().attachSession(webdavRequest)) {
return;
}
@@ -170,7 +191,7 @@
webdavResponse.sendErrorResponse(e);
}
} finally {
- getSessionProvider().releaseSession(webdavRequest);
+ getDavSessionProvider().releaseSession(webdavRequest);
}
}
Index: contrib/jcr-server/webapp/project.xml
===================================================================
--- contrib/jcr-server/webapp/project.xml (revision 189734)
+++ contrib/jcr-server/webapp/project.xml (working copy)
@@ -68,14 +68,23 @@
jsr170
jcr
${jackrabbit.build.version.jcr}
+
+ true
+
jackrabbit
${jackrabbit.build.version.jackrabbit}
+
+ true
+
jcr-rmi
${jackrabbit.build.version.jcr.rmi}
+
+ true
+
@@ -100,14 +109,23 @@
commons-chain
1.0
+
+ true
+
commons-digester
1.6
+
+ true
+
commons-beanutils
1.7.0
+
+ true
+
@@ -180,6 +198,7 @@
true
+
servletapi
Index: contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java
===================================================================
--- contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java (revision 189734)
+++ contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java (working copy)
@@ -47,6 +47,7 @@
*/
public static final String INIT_PARAM_PREFIX = "resource-path-prefix";
+ private String pathPrefix;
private JCRWebdavServer server;
private DavResourceFactory resourceFactory;
private DavLocatorFactory locatorFactory;
@@ -66,7 +67,7 @@
super.init();
// set resource path prefix
- String pathPrefix = getInitParameter(INIT_PARAM_PREFIX);
+ pathPrefix = getInitParameter(INIT_PARAM_PREFIX);
log.debug(INIT_PARAM_PREFIX + " = " + pathPrefix);
Repository repository = RepositoryAccessServlet.getRepository();
@@ -89,10 +90,14 @@
}
/**
+ * Returns true if the preconditions are met. This includes validation of
+ * {@link WebdavRequest#matchesIfHeader(DavResource) If header} and validation
+ * of {@link org.apache.jackrabbit.webdav.transaction.TransactionConstants#HEADER_TRANSACTIONID
+ * TransactionId header}. This method will also return false if the requested
+ * resource lays within a differenct workspace as is assigned to the repository
+ * session attached to the given request.
*
- * @param request
- * @param resource
- * @return
+ * @see AbstractWebdavServlet#isPreconditionValid(WebdavRequest, DavResource)
*/
protected boolean isPreconditionValid(WebdavRequest request, DavResource resource) {
// first check matching If header
@@ -117,27 +122,67 @@
}
/**
- * {@inheritDoc}
+ * Returns the DavSessionProvider
+ *
+ * @return server
+ * @see AbstractWebdavServlet#getDavSessionProvider()
*/
- public DavSessionProvider getSessionProvider() {
+ public DavSessionProvider getDavSessionProvider() {
return server;
}
/**
- * {@inheritDoc}
+ * Throws UnsupportedOperationException.
+ *
+ * @see AbstractWebdavServlet#setDavSessionProvider(DavSessionProvider)
*/
+ public void setDavSessionProvider(DavSessionProvider davSessionProvider) {
+ throw new UnsupportedOperationException("Not implemented. DavSession(s) are provided by the 'JCRWebdavServer'");
+ }
+
+ /**
+ * Returns the DavLocatorFactory
+ *
+ * @see AbstractWebdavServlet#getLocatorFactory()
+ */
public DavLocatorFactory getLocatorFactory() {
+ if (locatorFactory == null) {
+ locatorFactory = new DavLocatorFactoryImpl(pathPrefix);
+ }
return locatorFactory;
}
/**
- * {@inheritDoc}
+ * Sets the DavLocatorFactory
+ *
+ * @see AbstractWebdavServlet#setLocatorFactory(DavLocatorFactory)
*/
+ public void setLocatorFactory(DavLocatorFactory locatorFactory) {
+ this.locatorFactory = locatorFactory;
+ }
+
+ /**
+ * Returns the DavResourceFactory.
+ *
+ * @see AbstractWebdavServlet#getResourceFactory()
+ */
public DavResourceFactory getResourceFactory() {
+ if (resourceFactory == null) {
+ resourceFactory = new DavResourceFactoryImpl(txMgr, subscriptionMgr);
+ }
return resourceFactory;
}
/**
+ * Sets the DavResourceFactory.
+ *
+ * @see AbstractWebdavServlet#setResourceFactory(org.apache.jackrabbit.webdav.DavResourceFactory)
+ */
+ public void setResourceFactory(DavResourceFactory resourceFactory) {
+ this.resourceFactory = resourceFactory;
+ }
+
+ /**
* Returns {@link #DEFAULT_AUTHENTICATE_HEADER}.
*
* @return {@link #DEFAULT_AUTHENTICATE_HEADER}.
Index: contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java
===================================================================
--- contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java (revision 189734)
+++ contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java (working copy)
@@ -118,12 +118,12 @@
private Repository repository;
/**
- * the session provider
+ * the webdav session provider
*/
private DavSessionProvider davSessionProvider;
/**
- * the session provider
+ * the repository session provider
*/
private SessionProvider sessionProvider;
@@ -145,11 +145,6 @@
}
log.info(INIT_PARAM_RESOURCE_PATH_PREFIX + " = '" + resourcePathPrefix + "'");
- // init repository
- repository = RepositoryAccessServlet.getRepository();
- if (repository == null) {
- throw new ServletException("Repository could not be retrieved. Check config of 'RepositoryAccessServlet'.");
- }
try {
String chain = getInitParameter(INIT_PARAM_CHAIN_CATALOG);
URL chainUrl = getServletContext().getResource(chain);
@@ -276,6 +271,7 @@
* returned.
*
* @return the locator factory
+ * @see AbstractWebdavServlet#getLocatorFactory()
*/
public DavLocatorFactory getLocatorFactory() {
if (locatorFactory == null) {
@@ -285,6 +281,16 @@
}
/**
+ * Sets the DavLocatorFactory.
+ *
+ * @param locatorFactory
+ * @see AbstractWebdavServlet#setLocatorFactory(DavLocatorFactory)
+ */
+ public void setLocatorFactory(DavLocatorFactory locatorFactory) {
+ this.locatorFactory = locatorFactory;
+ }
+
+ /**
* Returns the LockManager. If no lock manager has
* been set or created a new instance of {@link SimpleLockManager} is
* returned.
@@ -299,11 +305,21 @@
}
/**
+ * Sets the LockManager.
+ *
+ * @param lockManager
+ */
+ public void setLockManager(LockManager lockManager) {
+ this.lockManager = lockManager;
+ }
+
+ /**
* Returns the DavResourceFactory. If no request factory has
* been set or created a new instance of {@link ResourceFactoryImpl} is
* returned.
*
* @return the resource factory
+ * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getResourceFactory()
*/
public DavResourceFactory getResourceFactory() {
if (resourceFactory == null) {
@@ -313,23 +329,25 @@
}
/**
- * Returns the header value retrieved from the {@link #INIT_PARAM_AUTHENTICATE_HEADER}
- * init parameter. If the parameter is missing, the value defaults to
- * {@link #DEFAULT_AUTHENTICATE_HEADER}.
+ * Sets the DavResourceFactory.
*
- * @return the header value retrieved from the corresponding init parameter
- * or {@link #DEFAULT_AUTHENTICATE_HEADER}.
+ * @param resourceFactory
+ * @see AbstractWebdavServlet#setResourceFactory(org.apache.jackrabbit.webdav.DavResourceFactory)
*/
- public String getAuthenticateHeaderValue() {
- return authenticate_header;
+ public void setResourceFactory(DavResourceFactory resourceFactory) {
+ this.resourceFactory = resourceFactory;
}
/**
- * Returns the DavSessionProvider.
+ * Returns the SessionProvider. If no session provider has been
+ * set or created a new instance of {@link SessionProviderImpl} that extracts
+ * credentials from the request's Authorization header is
+ * returned.
*
* @return the session provider
+ * @see RepositoryAccessServlet#getCredentialsFromHeader(String)
*/
- public synchronized SessionProvider getRepositorySessionProvider() {
+ public synchronized SessionProvider getSessionProvider() {
if (sessionProvider == null) {
CredentialsProvider cp = new CredentialsProvider() {
public Credentials getCredentials(HttpServletRequest request) throws LoginException, ServletException {
@@ -342,16 +360,77 @@
}
/**
- * Returns the DavSessionProvider.
+ * Sets the SessionProvider.
*
+ * @param sessionProvider
+ */
+ public synchronized void setSessionProvider(SessionProvider sessionProvider) {
+ this.sessionProvider = sessionProvider;
+ }
+
+ /**
+ * Returns the DavSessionProvider. If no session provider has
+ * been set or created a new instance of {@link DavSessionProviderImpl}
+ * is returned.
+ *
* @return the session provider
+ * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getDavSessionProvider()
*/
- public synchronized DavSessionProvider getSessionProvider() {
+ public synchronized DavSessionProvider getDavSessionProvider() {
if (davSessionProvider == null) {
davSessionProvider =
- new DavSessionProviderImpl(repository, getRepositorySessionProvider());
+ new DavSessionProviderImpl(getRepository(), getSessionProvider());
}
return davSessionProvider;
}
+ /**
+ * Sets the DavSessionProvider.
+ *
+ * @param sessionProvider
+ * @see AbstractWebdavServlet#setDavSessionProvider(org.apache.jackrabbit.webdav.DavSessionProvider)
+ */
+ public synchronized void setDavSessionProvider(DavSessionProvider sessionProvider) {
+ this.davSessionProvider = sessionProvider;
+ }
+
+ /**
+ * Returns the header value retrieved from the {@link #INIT_PARAM_AUTHENTICATE_HEADER}
+ * init parameter. If the parameter is missing, the value defaults to
+ * {@link #DEFAULT_AUTHENTICATE_HEADER}.
+ *
+ * @return the header value retrieved from the corresponding init parameter
+ * or {@link #DEFAULT_AUTHENTICATE_HEADER}.
+ * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getAuthenticateHeaderValue()
+ */
+ public String getAuthenticateHeaderValue() {
+ return authenticate_header;
+ }
+
+ /**
+ * Returns the Repository. If no repository has been set or
+ * created the repository initialized by RepositoryAccessServlet
+ * is returned.
+ *
+ * @return repository
+ * @see RepositoryAccessServlet#getRepository()
+ */
+ public Repository getRepository() {
+ if (repository == null) {
+ repository = RepositoryAccessServlet.getRepository();
+ if (repository == null) {
+ throw new IllegalStateException("Repository could not be retrieved. Check config of 'RepositoryAccessServlet'.");
+ }
+ }
+ return repository;
+ }
+
+ /**
+ * Sets the Repository.
+ *
+ * @param repository
+ */
+ public void setRepository(Repository repository) {
+ this.repository = repository;
+ }
}
Index: src/java/org/apache/jackrabbit/core/query/QueryConstants.java
===================================================================
--- src/java/org/apache/jackrabbit/core/query/QueryConstants.java (revision 189735)
+++ src/java/org/apache/jackrabbit/core/query/QueryConstants.java (working copy)
@@ -18,6 +18,7 @@
import org.apache.jackrabbit.core.QName;
import org.apache.jackrabbit.core.NamespaceRegistryImpl;
+import org.apache.jackrabbit.core.Constants;
/**
* This interface defines constants for data types and operation types
@@ -28,22 +29,22 @@
/**
* QName for jcr:score
*/
- QName JCR_SCORE = new QName(NamespaceRegistryImpl.NS_JCR_URI, "score");
+ QName JCR_SCORE = new QName(Constants.NS_JCR_URI, "score");
/**
* QName for jcr:path
*/
- QName JCR_PATH = new QName(NamespaceRegistryImpl.NS_JCR_URI, "path");
+ QName JCR_PATH = new QName(Constants.NS_JCR_URI, "path");
/**
* QName for jcr:statement
*/
- QName JCR_STATEMENT = new QName(NamespaceRegistryImpl.NS_JCR_URI, "statement");
+ QName JCR_STATEMENT = new QName(Constants.NS_JCR_URI, "statement");
/**
* QName for jcr:language
*/
- QName JCR_LANGUAGE = new QName(NamespaceRegistryImpl.NS_JCR_URI, "language");
+ QName JCR_LANGUAGE = new QName(Constants.NS_JCR_URI, "language");
/**
* long data type