]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/JcrFileUploadReceiver.java
Introduce CMS User Admin (not yet wired)
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / JcrFileUploadReceiver.java
1 package org.argeo.cms.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.cms.CmsException;
15 import org.argeo.cms.CmsImageManager;
16 import org.argeo.cms.CmsNames;
17 import org.argeo.jcr.JcrUtils;
18 import org.eclipse.rap.addons.fileupload.FileDetails;
19 import org.eclipse.rap.addons.fileupload.FileUploadReceiver;
20
21 public class JcrFileUploadReceiver extends FileUploadReceiver implements
22 CmsNames {
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(Node parentNode, String nodeName,
29 CmsImageManager imageManager) {
30 super();
31 this.parentNode = parentNode;
32 this.nodeName = nodeName;
33 this.imageManager = imageManager;
34 }
35
36 @Override
37 public void receive(InputStream stream, FileDetails details)
38 throws IOException {
39 try {
40 String fileName = nodeName != null ? nodeName : details
41 .getFileName();
42 String contentType = details.getContentType();
43 if (isImage(details.getFileName(), contentType)) {
44 imageManager.uploadImage(parentNode, fileName, stream);
45 return;
46 // InputStream inputStream = new ByteArrayInputStream(arr);
47 // ImageData id = new ImageData(inputStream);
48 // fileNode.addMixin(CmsTypes.CMS_IMAGE);
49 // fileNode.setProperty(CMS_IMAGE_WIDTH, id.width);
50 // fileNode.setProperty(CMS_IMAGE_HEIGHT, id.height);
51 }
52
53 Node fileNode;
54 if (parentNode.hasNode(fileName)) {
55 fileNode = parentNode.getNode(fileName);
56 if (!fileNode.isNodeType(NT_FILE))
57 fileNode.remove();
58 }
59 fileNode = JcrUtils.copyStreamAsFile(parentNode, fileName, stream);
60
61 if (contentType != null) {
62 fileNode.addMixin(NodeType.MIX_MIMETYPE);
63 fileNode.setProperty(Property.JCR_MIMETYPE, contentType);
64 }
65 processNewFile(fileNode);
66 fileNode.getSession().save();
67 } catch (RepositoryException e) {
68 throw new CmsException("cannot receive " + details, e);
69 }
70 }
71
72 protected Boolean isImage(String fileName, String contentType) {
73 String ext = FilenameUtils.getExtension(fileName);
74 return ext != null
75 && (ext.equals("png") || ext.equalsIgnoreCase("jpg"));
76 }
77
78 protected void processNewFile(Node node) {
79
80 }
81
82 }