]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java
Improve JCR mapper
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / server / jcr / mvc / JcrManagerController.java
1 package org.argeo.server.jcr.mvc;
2
3 import java.util.List;
4 import java.util.StringTokenizer;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import org.apache.commons.fileupload.FileItem;
10 import org.apache.commons.fileupload.FileItemFactory;
11 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
12 import org.apache.commons.fileupload.servlet.ServletFileUpload;
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15 import org.argeo.server.ServerAnswer;
16 import org.argeo.server.jcr.JcrResourceAdapter;
17 import org.argeo.server.mvc.MvcConstants;
18 import org.springframework.core.io.ByteArrayResource;
19 import org.springframework.stereotype.Controller;
20 import org.springframework.web.bind.annotation.ModelAttribute;
21 import org.springframework.web.bind.annotation.RequestMapping;
22
23 @Controller
24 public class JcrManagerController implements MvcConstants {
25 private final static Log log = LogFactory
26 .getLog(JcrManagerController.class);
27
28 private JcrResourceAdapter resourceAdapter;
29
30 // Create a factory for disk-based file items
31 private FileItemFactory factory = new DiskFileItemFactory();
32
33 // Create a new file upload handler
34 private ServletFileUpload upload = new ServletFileUpload(factory);
35
36 @SuppressWarnings("unchecked")
37 @RequestMapping("/upload/**")
38 @ModelAttribute(ANSWER_MODEL_KEY_AS_HTML)
39 public ServerAnswer upload(HttpServletRequest request,
40 HttpServletResponse response) throws Exception {
41 // Parse the request
42 List<FileItem> items = upload.parseRequest(request);
43
44 byte[] arr = null;
45 for (FileItem item : items) {
46 if (!item.isFormField()) {
47 arr = item.get();
48 break;
49 }
50 }
51
52 ByteArrayResource res = new ByteArrayResource(arr);
53 // String pathInfo = request.getPathInfo();
54
55 StringBuffer path = new StringBuffer("/");
56 StringTokenizer st = new StringTokenizer(request.getPathInfo(), "/");
57 st.nextToken();// skip /upload/
58 while (st.hasMoreTokens()) {
59 String token = st.nextToken();
60 if (!st.hasMoreTokens()) {
61 resourceAdapter.mkdirs(path.toString());
62 path.append(token);
63 } else {
64 path.append(token).append('/');
65 }
66 }
67 // String path = '/' + pathInfo.substring(1).substring(
68 // pathInfo.indexOf('/'));
69 if (log.isDebugEnabled())
70 log.debug("Upload to " + path);
71 resourceAdapter.update(path.toString(), res);
72 return ServerAnswer.ok("File " + path + " imported");
73 }
74
75 public void setResourceAdapter(JcrResourceAdapter resourceAdapter) {
76 this.resourceAdapter = resourceAdapter;
77 }
78
79 }