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