1 package org
.argeo
.cms
.ui
.internal
;
3 import static javax
.jcr
.nodetype
.NodeType
.NT_FILE
;
5 import java
.io
.IOException
;
6 import java
.io
.InputStream
;
9 import javax
.jcr
.Property
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.nodetype
.NodeType
;
13 import org
.apache
.commons
.io
.FilenameUtils
;
14 import org
.argeo
.cms
.ui
.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
;
21 public class JcrFileUploadReceiver
extends FileUploadReceiver
{
23 private final Node parentNode
;
24 private final String nodeName
;
25 private final CmsImageManager imageManager
;
27 /** If nodeName is null, use the uploaded file name */
28 public JcrFileUploadReceiver(Img img
, Node parentNode
, String nodeName
, CmsImageManager imageManager
) {
31 this.parentNode
= parentNode
;
32 this.nodeName
= nodeName
;
33 this.imageManager
= imageManager
;
37 public void receive(InputStream stream
, FileDetails details
) throws IOException
{
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
);
47 if (parentNode
.hasNode(fileName
)) {
48 fileNode
= parentNode
.getNode(fileName
);
49 if (!fileNode
.isNodeType(NT_FILE
))
52 fileNode
= JcrUtils
.copyStreamAsFile(parentNode
, fileName
, stream
);
54 if (contentType
!= null) {
55 fileNode
.addMixin(NodeType
.MIX_MIMETYPE
);
56 fileNode
.setProperty(Property
.JCR_MIMETYPE
, contentType
);
58 processNewFile(fileNode
);
59 fileNode
.getSession().save();
60 } catch (RepositoryException e
) {
61 throw new JcrException("Cannot receive " + details
, e
);
65 protected Boolean
isImage(String fileName
, String contentType
) {
66 String ext
= FilenameUtils
.getExtension(fileName
);
67 return ext
!= null && (ext
.equals("png") || ext
.equalsIgnoreCase("jpg"));
70 protected void processNewFile(Node node
) {