Make CMS image framework more extensible.
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 23 Jan 2021 09:43:00 +0000 (10:43 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 23 Jan 2021 09:43:00 +0000 (10:43 +0100)
org.argeo.cms.ui/src/org/argeo/cms/ui/CmsImageManager.java
org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java
org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java
org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java
org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java
org.argeo.jcr/src/org/argeo/jcr/Jcr.java

index b0995c74c4c75103f20593d2e0ae3904a6909b22..9ac58fac2367952953313657ab993adf8f043d7d 100644 (file)
@@ -44,5 +44,5 @@ public interface CmsImageManager {
        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;
 }
index 1ae4bb004d92f45e185f3d4c80258521bac4cf79..981f6efc5aafba314d0cab21c28f6b712d8cbc24 100644 (file)
@@ -449,7 +449,7 @@ public class FormPageViewer extends AbstractPageViewer {
                        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
index 8edfb3e0033a870a2fd2d190c0d34399cdb48a4c..c2399968b0372b11ce547a7f2cc518faa1d2f855 100644 (file)
@@ -11,20 +11,23 @@ import javax.jcr.RepositoryException;
 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;
@@ -36,13 +39,8 @@ public class JcrFileUploadReceiver extends FileUploadReceiver {
                        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;
@@ -60,7 +58,7 @@ public class JcrFileUploadReceiver extends FileUploadReceiver {
                        processNewFile(fileNode);
                        fileNode.getSession().save();
                } catch (RepositoryException e) {
-                       throw new CmsException("cannot receive " + details, e);
+                       throw new JcrException("Cannot receive " + details, e);
                }
        }
 
index 4c1a731084ad87225df154133cc6158769231886..477d65be7894f8bc092f1dffd68fd72fe87f6ad1 100644 (file)
@@ -152,24 +152,6 @@ public class DefaultImageManager implements CmsImageManager {
        @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 {
@@ -203,7 +185,7 @@ public class DefaultImageManager implements CmsImageManager {
        }
 
        @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 {
@@ -221,11 +203,12 @@ public class DefaultImageManager implements CmsImageManager {
                        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
@@ -244,6 +227,7 @@ public class DefaultImageManager implements CmsImageManager {
        }
 
        /** 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 {
        }
 }
index 258aa9f49eb6006086675cb5f3b6c689fce6af95..fb1091a028e49d6e5c1e76b37f58795399e8becc 100644 (file)
@@ -10,6 +10,7 @@ import org.argeo.cms.ui.util.CmsUiUtils;
 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;
@@ -87,10 +88,22 @@ public class Img extends EditableImage implements SectionPart, NodePart {
                }
        }
 
-       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);
index c447a17328ca49d39bfdbdc43a799d0b168d5695..974ee02df30e338215c202d7c0b76a0c45e3f2b3 100644 (file)
@@ -203,6 +203,18 @@ public class Jcr {
                }
        }
 
+       /**
+        * @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)}.