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