]> git.argeo.org Git - lgpl/argeo-commons.git/blob - JcrFileUploadReceiver.java
60bb42b4686822c86dec365c4420699e47e9b915
[lgpl/argeo-commons.git] / JcrFileUploadReceiver.java
1 package org.argeo.cms.ui.internal;
2
3 import static javax.jcr.nodetype.NodeType.NT_FILE;
4
5 import java.io.IOException;
6 import java.io.InputStream;
7
8 import javax.jcr.Node;
9 import javax.jcr.Property;
10 import javax.jcr.RepositoryException;
11 import javax.jcr.nodetype.NodeType;
12
13 import org.apache.commons.io.FilenameUtils;
14 import org.argeo.api.cms.ux.CmsImageManager;
15 import org.argeo.cms.ui.widgets.Img;
16 import org.argeo.jcr.JcrException;
17 import org.argeo.jcr.JcrUtils;
18 import org.eclipse.rap.fileupload.FileDetails;
19 import org.eclipse.rap.fileupload.FileUploadReceiver;
20
21 public class JcrFileUploadReceiver extends FileUploadReceiver {
22 private Img img;
23 private final Node parentNode;
24 private final String nodeName;
25 private final CmsImageManager imageManager;
26
27 /** If nodeName is null, use the uploaded file name */
28 public JcrFileUploadReceiver(Img img, Node parentNode, String nodeName, CmsImageManager imageManager) {
29 super();
30 this.img = img;
31 this.parentNode = parentNode;
32 this.nodeName = nodeName;
33 this.imageManager = imageManager;
34 }
35
36 @Override
37 public void receive(InputStream stream, FileDetails details) throws IOException {
38 try {
39 String fileName = nodeName != null ? nodeName : details.getFileName();
40 String contentType = details.getContentType();
41 if (isImage(details.getFileName(), contentType)) {
42 imageManager.uploadImage(img.getNode(),parentNode, fileName, stream, contentType);
43 return;
44 }
45
46 Node fileNode;
47 if (parentNode.hasNode(fileName)) {
48 fileNode = parentNode.getNode(fileName);
49 if (!fileNode.isNodeType(NT_FILE))
50 fileNode.remove();
51 }
52 fileNode = JcrUtils.copyStreamAsFile(parentNode, fileName, stream);
53
54 if (contentType != null) {
55 fileNode.addMixin(NodeType.MIX_MIMETYPE);
56 fileNode.setProperty(Property.JCR_MIMETYPE, contentType);
57 }
58 processNewFile(fileNode);
59 fileNode.getSession().save();
60 } catch (RepositoryException e) {
61 throw new JcrException("Cannot receive " + details, e);
62 }
63 }
64
65 protected Boolean isImage(String fileName, String contentType) {
66 String ext = FilenameUtils.getExtension(fileName);
67 return ext != null && (ext.equals("png") || ext.equalsIgnoreCase("jpg"));
68 }
69
70 protected void processNewFile(Node node) {
71
72 }
73
74 }