/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.brixcms.demo.web.dav; import org.apache.jackrabbit.server.SessionProvider; import org.apache.jackrabbit.webdav.AbstractLocatorFactory; import org.apache.jackrabbit.webdav.DavLocatorFactory; import org.apache.jackrabbit.webdav.server.AbstractWebdavServlet; import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet; import org.apache.wicket.Application; import org.brixcms.Brix; import org.brixcms.Plugin; import org.brixcms.SessionAwarePlugin; import org.brixcms.demo.web.WicketApplication; import org.brixcms.jcr.base.BrixSession; import org.brixcms.jcr.base.EventUtil; import javax.jcr.LoginException; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; public class SimpleServlet extends SimpleWebdavServlet { // XXX NOTE only include leading / static final String WORKSPACE_ROOT_PATH = "/brix:root/brix:web/brix:site"; private AbstractLocatorFactory locatorFactory; /** * Constructor */ public SimpleServlet() { } /** * Returns the <code>DavLocatorFactory</code>. If no locator factory has been set or created a new instance of * {@link org.apache.jackrabbit.webdav.simple.LocatorFactoryImpl} is returned. * * @return the locator factory * @see AbstractWebdavServlet#getLocatorFactory() */ public DavLocatorFactory getLocatorFactory() { if (locatorFactory == null) { locatorFactory = new SiteRootLocatorFactory(this, getPathPrefix()); } return locatorFactory; } private Brix getBrix() { WicketApplication app = (WicketApplication) Application.get("wicket.brix-demo"); return app.getBrix(); } @Override public Repository getRepository() { WicketApplication app = (WicketApplication) Application.get("wicket.brix-demo"); return app.getRepository(); } @Override public synchronized SessionProvider getSessionProvider() { final SessionProvider original = super.getSessionProvider(); return new SessionProvider() { public Session getSession(HttpServletRequest request, Repository rep, String workspace) throws LoginException, ServletException, RepositoryException { final String key = Brix.NS_PREFIX + "jcr-session"; BrixSession s = (BrixSession) request.getAttribute(key); if (s == null) { s = EventUtil.wrapSession(original.getSession(request, rep, workspace)); for (Plugin p : getBrix().getPlugins()) { if (p instanceof SessionAwarePlugin) { ((SessionAwarePlugin) p).onWebDavSession(s); } } request.setAttribute(key, s); } return s; } public void releaseSession(Session session) { original.releaseSession(EventUtil.unwrapSession(session)); } }; } }