1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.modeshape.web.jcr.webdav;
25
26 import java.io.File;
27 import java.io.IOException;
28 import javax.servlet.ServletException;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import net.sf.webdav.IWebdavStore;
32 import net.sf.webdav.WebdavServlet;
33
34
35
36
37
38
39 public class ModeShapeWebdavServlet extends WebdavServlet {
40
41 private static final long serialVersionUID = 1L;
42
43 public static final String INIT_REQUEST_RESOLVER_CLASS_NAME = "org.modeshape.web.jcr.webdav.REQUEST_RESOLVER_CLASS_NAME";
44
45 public static final String INIT_CONTENT_PRIMARY_TYPE_NAMES = "org.modeshape.web.jcr.webdav.CONTENT_PRIMARY_TYPE_NAMES";
46 public static final String INIT_RESOURCE_PRIMARY_TYPES_NAMES = "org.modeshape.web.jcr.webdav.RESOURCE_PRIMARY_TYPE_NAMES";
47 public static final String INIT_NEW_FOLDER_PRIMARY_TYPE_NAME = "org.modeshape.web.jcr.webdav.NEW_FOLDER_PRIMARY_TYPE_NAME";
48 public static final String INIT_NEW_RESOURCE_PRIMARY_TYPE_NAME = "org.modeshape.web.jcr.webdav.NEW_RESOURCE_PRIMARY_TYPE_NAME";
49 public static final String INIT_NEW_CONTENT_PRIMARY_TYPE_NAME = "org.modeshape.web.jcr.webdav.NEW_CONTENT_PRIMARY_TYPE_NAME";
50
51 private RequestResolver requestResolver;
52
53
54
55
56 @Override
57 protected IWebdavStore constructStore( String clazzName,
58 File root ) {
59 return new ModeShapeWebdavStore(getInitParameter(INIT_CONTENT_PRIMARY_TYPE_NAMES),
60 getInitParameter(INIT_RESOURCE_PRIMARY_TYPES_NAMES),
61 getInitParameter(INIT_NEW_FOLDER_PRIMARY_TYPE_NAME),
62 getInitParameter(INIT_NEW_RESOURCE_PRIMARY_TYPE_NAME),
63 getInitParameter(INIT_NEW_CONTENT_PRIMARY_TYPE_NAME), requestResolver);
64 }
65
66
67
68
69 private void constructRequestResolver() {
70
71 String requestResolverClassName = getInitParameter(INIT_REQUEST_RESOLVER_CLASS_NAME);
72 if (requestResolverClassName == null) {
73 this.requestResolver = new DefaultRequestResolver();
74 } else {
75 try {
76 Class<? extends RequestResolver> clazz = Class.forName(requestResolverClassName).asSubclass(RequestResolver.class);
77 this.requestResolver = clazz.newInstance();
78 } catch (Exception ex) {
79 throw new IllegalStateException(ex);
80 }
81 }
82
83 this.requestResolver.initialize(getServletContext());
84 }
85
86 @Override
87 public void init() throws ServletException {
88 constructRequestResolver();
89
90 super.init();
91 }
92
93
94
95
96
97
98
99 @Override
100 protected void service( HttpServletRequest req,
101 HttpServletResponse resp ) throws ServletException, IOException {
102 ModeShapeWebdavStore.setRequest(req);
103 try {
104 super.service(req, resp);
105 } finally {
106 ModeShapeWebdavStore.setRequest(null);
107 }
108 }
109 }