/** * Copyright 2011 the original author or authors. * * 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.bricket.web.dav; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.apache.jackrabbit.server.SessionProvider; import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet; import org.apache.wicket.Application; import org.bricket.web.BricketApplication; import brix.Brix; import brix.Plugin; import brix.SessionAwarePlugin; import brix.jcr.base.BrixSession; import brix.jcr.base.EventUtil; public class SimpleServlet extends SimpleWebdavServlet { // XXX NOTE only include leading / static final String WORKSPACE_ROOT_PATH = "/brix:root/brix:web/brix:site"; @Override public void init() throws ServletException { super.init(); setLocatorFactory(new SiteRootLocatorFactory(getPathPrefix())); } @Override public synchronized SessionProvider getSessionProvider() { final SessionProvider original = super.getSessionProvider(); return new SessionProvider() { public Session getSession(HttpServletRequest request, Repository rep, String workspace) throws 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)); } }; } private Brix getBrix() { BricketApplication app = (BricketApplication) Application.get("bricket"); return app.getBrix(); } @Override public Repository getRepository() { BricketApplication app = (BricketApplication) Application.get("bricket"); return app.getRepository(); } }