public Image getSwtImage(Node node) throws RepositoryException;
/** @return URL */
- public String uploadImage(Node parentNode, String fileName, InputStream in, String contentType) throws RepositoryException;
+ public String uploadImage(Node context,Node uploadFolder, String fileName, InputStream in, String contentType) throws RepositoryException;
}
cleanedName = System.currentTimeMillis() % 100000 + "_" + cleanedName;
try {
- imageManager().uploadImage(context, cleanedName, stream, details.getContentType());
+ imageManager().uploadImage(context, context, cleanedName, stream, details.getContentType());
// TODO clean refresh strategy
section.getDisplay().asyncExec(new Runnable() {
@Override
import javax.jcr.nodetype.NodeType;
import org.apache.commons.io.FilenameUtils;
-import org.argeo.cms.CmsException;
import org.argeo.cms.ui.CmsImageManager;
+import org.argeo.cms.ui.widgets.Img;
+import org.argeo.jcr.JcrException;
import org.argeo.jcr.JcrUtils;
import org.eclipse.rap.fileupload.FileDetails;
import org.eclipse.rap.fileupload.FileUploadReceiver;
public class JcrFileUploadReceiver extends FileUploadReceiver {
+ private Img img;
private final Node parentNode;
private final String nodeName;
private final CmsImageManager imageManager;
/** If nodeName is null, use the uploaded file name */
- public JcrFileUploadReceiver(Node parentNode, String nodeName, CmsImageManager imageManager) {
+ public JcrFileUploadReceiver(Img img, Node parentNode, String nodeName, CmsImageManager imageManager) {
super();
+ this.img = img;
this.parentNode = parentNode;
this.nodeName = nodeName;
this.imageManager = imageManager;
String fileName = nodeName != null ? nodeName : details.getFileName();
String contentType = details.getContentType();
if (isImage(details.getFileName(), contentType)) {
- imageManager.uploadImage(parentNode, fileName, stream, contentType);
+ imageManager.uploadImage(img.getNode(),parentNode, fileName, stream, contentType);
return;
- // InputStream inputStream = new ByteArrayInputStream(arr);
- // ImageData id = new ImageData(inputStream);
- // fileNode.addMixin(CmsTypes.CMS_IMAGE);
- // fileNode.setProperty(CMS_IMAGE_WIDTH, id.width);
- // fileNode.setProperty(CMS_IMAGE_HEIGHT, id.height);
}
Node fileNode;
processNewFile(fileNode);
fileNode.getSession().save();
} catch (RepositoryException e) {
- throw new CmsException("cannot receive " + details, e);
+ throw new JcrException("Cannot receive " + details, e);
}
}
@Override
public String getImageUrl(Node node) throws RepositoryException {
return CmsUiUtils.getDataPath(node);
- // String name = getResourceName(node);
- // ResourceManager resourceManager = RWT.getResourceManager();
- // if (!resourceManager.isRegistered(name)) {
- // InputStream inputStream = null;
- // Binary binary = getImageBinary(node);
- // if (binary == null)
- // return null;
- // try {
- // inputStream = binary.getStream();
- // resourceManager.register(name, inputStream);
- // } finally {
- // IOUtils.closeQuietly(inputStream);
- // JcrUtils.closeQuietly(binary);
- // }
- // if (log.isTraceEnabled())
- // log.trace("Registered image " + name);
- // }
- // return resourceManager.getLocation(name);
}
protected String getResourceName(Node node) throws RepositoryException {
}
@Override
- public String uploadImage(Node parentNode, String fileName, InputStream in, String contentType)
+ public String uploadImage(Node context, Node parentNode, String fileName, InputStream in, String contentType)
throws RepositoryException {
InputStream inputStream = null;
try {
Node fileNode = JcrUtils.copyBytesAsFile(parentNode, fileName, arr);
inputStream = new ByteArrayInputStream(arr);
ImageData id = new ImageData(inputStream);
- processNewImageFile(fileNode, id);
+ processNewImageFile(context, fileNode, id);
String mime = contentType != null ? contentType : Files.probeContentType(Paths.get(fileName));
- if (mime != null)
- fileNode.setProperty(Property.JCR_MIMETYPE, mime);
+ if (mime != null) {
+ fileNode.getNode(JCR_CONTENT).setProperty(Property.JCR_MIMETYPE, mime);
+ }
fileNode.getSession().save();
// reset resource manager
}
/** Does nothing by default. */
- protected void processNewImageFile(Node fileNode, ImageData id) throws RepositoryException, IOException {
+ protected void processNewImageFile(Node context, Node fileNode, ImageData id)
+ throws RepositoryException, IOException {
}
}
import org.argeo.cms.ui.viewers.NodePart;
import org.argeo.cms.ui.viewers.Section;
import org.argeo.cms.ui.viewers.SectionPart;
+import org.argeo.jcr.Jcr;
import org.argeo.jcr.JcrException;
import org.eclipse.rap.fileupload.FileUploadHandler;
import org.eclipse.rap.fileupload.FileUploadListener;
}
}
- protected Control createImageChooser(Composite box, String style) throws RepositoryException {
+ protected Node getUploadFolder() {
+ return Jcr.getParent(getNode());
+ }
+
+ protected String getUploadName() {
Node node = getNode();
- JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(node.getParent(),
- node.getName() + '[' + node.getIndex() + ']', imageManager);
+ return Jcr.getName(node) + '[' + Jcr.getIndex(node) + ']';
+ }
+
+ protected CmsImageManager getImageManager() {
+ return imageManager;
+ }
+
+ protected Control createImageChooser(Composite box, String style) throws RepositoryException {
+ JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(this, getUploadFolder(), getUploadName(),
+ imageManager);
if (currentUploadHandler != null)
currentUploadHandler.dispose();
currentUploadHandler = prepareUpload(receiver);
}
}
+ /**
+ * @see Node#getIndex()
+ * @throws JcrException caused by {@link RepositoryException}
+ */
+ public static int getIndex(Node node) {
+ try {
+ return node.getIndex();
+ } catch (RepositoryException e) {
+ throw new JcrException("Cannot get index of " + node, e);
+ }
+ }
+
/**
* If node has mixin {@link NodeType#MIX_TITLE}, return
* {@link Property#JCR_TITLE}, otherwise return {@link #getName(Node)}.