/**
* 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();
}
}