Index: contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/dav/DavResourceImpl.java =================================================================== --- contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/dav/DavResourceImpl.java (revision 160087) +++ contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/dav/DavResourceImpl.java (working copy) @@ -353,8 +353,9 @@ * @throws RepositoryException * @throws IOException */ - private void importXml(Node parentNode, InputStream in, String contentType) - throws RepositoryException, IOException { + protected void importXml(Node parentNode, InputStream in, + String contentType) + throws RepositoryException, IOException { Node content = parentNode.addNode("jcr:content", "nt:unstructured"); content.setProperty("jcr:mimeType", contentType); content.setProperty("jcr:lastModified", Calendar.getInstance()); @@ -369,8 +370,9 @@ * @param contentType * @throws RepositoryException */ - private void importFile(Node parentNode, InputStream in, String contentType) - throws RepositoryException { + protected void importFile(Node parentNode, InputStream in, + String contentType) + throws RepositoryException { Node content = parentNode.addNode("jcr:content", "nt:resource"); content.setProperty("jcr:mimeType", contentType); content.setProperty("jcr:encoding", ""); Index: contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java =================================================================== --- contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java (revision 160087) +++ contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/simple/WebdavServlet.java (working copy) @@ -27,6 +27,7 @@ import org.apache.log4j.Logger; import org.apache.jackrabbit.server.AbstractWebdavServlet; import org.apache.jackrabbit.webdav.*; +import org.apache.jackrabbit.webdav.lock.LockManager; /** * WebdavServlet provides webdav support (level 1 and 2 complient) for repository @@ -46,7 +47,7 @@ * This is needed because some clients rely on a successful locking * mechanism in order to perform properly (e.g. mac OSX built-in dav client) */ - private SimpleLockManager lockManager; + private LockManager lockManager; /** the resource factory */ private DavResourceFactory resourceFactory; @@ -77,10 +78,6 @@ resourcePathPrefix = resourcePathPrefix.substring(0, resourcePathPrefix.length()-1); } log.info(INIT_PARAM_RESOURCE_PATH_PREFIX + " = '" + resourcePathPrefix + "'"); - - lockManager = new SimpleLockManager(); - resourceFactory = new ResourceFactoryImpl(lockManager); - locatorFactory = new LocatorFactoryImpl(resourcePathPrefix); } /** @@ -95,11 +92,12 @@ throws ServletException, IOException { try { - WebdavRequest webdavRequest = new WebdavRequestImpl(request, locatorFactory); + WebdavRequest webdavRequest = + new WebdavRequestImpl(request, getLocatorFactory()); WebdavResponse webdavResponse = new WebdavResponseImpl(response); // make sure there is a authenticated user - getDavSessionProvider().acquireSession(webdavRequest); + getSessionProvider().acquireSession(webdavRequest); if (webdavRequest.getDavSession() == null) { return; } @@ -156,7 +154,7 @@ // GET, HEAD, TRACE...... super.service(request, response); } - getDavSessionProvider().releaseSession(webdavRequest); + getSessionProvider().releaseSession(webdavRequest); } catch (DavException e) { // special handling for unauthorized, should be done nicer @@ -192,7 +190,7 @@ */ protected DavResource createResource(DavResourceLocator locator, WebdavRequest request, WebdavResponse response) throws DavException { - return resourceFactory.createResource(locator, request, response); + return getResourceFactory().createResource(locator, request, response); } /** @@ -206,13 +204,82 @@ } /** + * Returns the DavLocatorFactory. If no locator factory has + * been set or created a new instance of {@link LocatorFactoryImpl} is + * returned. + * + * @return the locator factory + */ + public DavLocatorFactory getLocatorFactory() { + if (locatorFactory == null) { + locatorFactory = new LocatorFactoryImpl(resourcePathPrefix); + } + return locatorFactory; + } + + /** + * Set the locator factory + * + * @param locatorFactory + */ + 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. + * + * @return the lock manager + */ + public LockManager getLockManager() { + if (lockManager == null) { + lockManager = new SimpleLockManager(); + } + return lockManager; + } + + /** + * Set the lock manager + * + * @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 + */ + public DavResourceFactory getResourceFactory() { + if (resourceFactory == null) { + resourceFactory = new ResourceFactoryImpl(lockManager); + } + return resourceFactory; + } + + /** + * Set the resource factory + * + * @param resourceFactory + */ + public void setResourceFactory(DavResourceFactory resourceFactory) { + this.resourceFactory = resourceFactory; + } + + /** * Returns the DavSessionProvider. If no session provider has * been set or created a new instance of {@link DavSessionProviderImpl} is - * return. + * returned. * * @return the session provider */ - public DavSessionProvider getDavSessionProvider() { + public DavSessionProvider getSessionProvider() { if (sessionProvider == null) { sessionProvider = new DavSessionProviderImpl(); } @@ -224,7 +291,7 @@ * * @param sessionProvider */ - public void setDavSessionProvider(DavSessionProvider sessionProvider) { + public void setSessionProvider(DavSessionProvider sessionProvider) { this.sessionProvider = sessionProvider; } }