Work on image support.
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 20 Jan 2021 10:01:31 +0000 (11:01 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 20 Jan 2021 10:01:31 +0000 (11:01 +0100)
org.argeo.cms.ui/src/org/argeo/cms/ui/CmsConstants.java
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/viewers/AbstractPageViewer.java
org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java

index 304cba62711ee8ffd5a29ceb1ff77092d998bbd7..ef6fd5f2e6c72ea46f61cca2d82b1150baae36ff 100644 (file)
@@ -20,7 +20,7 @@ public interface CmsConstants {
        public final static String LOADING_IMAGE = "icons/loading.gif";
 
        public final static String NO_IMAGE = "icons/noPic-square-640px.png";
-       public final static Point NO_IMAGE_SIZE = new Point(640, 640);
+       public final static Point NO_IMAGE_SIZE = new Point(320, 320);
        public final static Float NO_IMAGE_RATIO = 1f;
        // MISCEALLENEOUS
        String DATE_TIME_FORMAT = "dd/MM/yyyy, HH:mm";
index eb9cb752d5de660688c7362127380b60c2d75b1f..b0995c74c4c75103f20593d2e0ae3904a6909b22 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) throws RepositoryException;
+       public String uploadImage(Node parentNode, String fileName, InputStream in, String contentType) throws RepositoryException;
 }
index 72b09e28a6da0879a6e11dea79cb44c3a6407916..1ae4bb004d92f45e185f3d4c80258521bac4cf79 100644 (file)
@@ -449,7 +449,7 @@ public class FormPageViewer extends AbstractPageViewer {
                        cleanedName = System.currentTimeMillis() % 100000 + "_" + cleanedName;
 
                        try {
-                               imageManager().uploadImage(context, cleanedName, stream);
+                               imageManager().uploadImage(context, cleanedName, stream, details.getContentType());
                                // TODO clean refresh strategy
                                section.getDisplay().asyncExec(new Runnable() {
                                        @Override
index 0b76a6f01aabde441c20d6ce917e07027292ea3e..8edfb3e0033a870a2fd2d190c0d34399cdb48a4c 100644 (file)
@@ -36,7 +36,7 @@ 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);
+                               imageManager.uploadImage(parentNode, fileName, stream, contentType);
                                return;
                                // InputStream inputStream = new ByteArrayInputStream(arr);
                                // ImageData id = new ImageData(inputStream);
index 1c6f7198413942206a04c5694a06b5073e0036b1..4c1a731084ad87225df154133cc6158769231886 100644 (file)
@@ -118,7 +118,7 @@ public class DefaultImageManager implements CmsImageManager {
        public Point getImageSize(Node node) throws RepositoryException {
                // TODO optimise
                Image image = getSwtImage(node);
-               return new Point(image.getBounds().width,image.getBounds().height);
+               return new Point(image.getBounds().width, image.getBounds().height);
        }
 
        /** @return null if not available */
@@ -203,7 +203,8 @@ public class DefaultImageManager implements CmsImageManager {
        }
 
        @Override
-       public String uploadImage(Node parentNode, String fileName, InputStream in) throws RepositoryException {
+       public String uploadImage(Node parentNode, String fileName, InputStream in, String contentType)
+                       throws RepositoryException {
                InputStream inputStream = null;
                try {
                        String previousResourceName = null;
@@ -222,8 +223,9 @@ public class DefaultImageManager implements CmsImageManager {
                        ImageData id = new ImageData(inputStream);
                        processNewImageFile(fileNode, id);
 
-                       String mime = Files.probeContentType(Paths.get(fileName));
-                       fileNode.setProperty(Property.JCR_MIMETYPE, mime);
+                       String mime = contentType != null ? contentType : Files.probeContentType(Paths.get(fileName));
+                       if (mime != null)
+                               fileNode.setProperty(Property.JCR_MIMETYPE, mime);
                        fileNode.getSession().save();
 
                        // reset resource manager
@@ -241,7 +243,7 @@ public class DefaultImageManager implements CmsImageManager {
                }
        }
 
-       /** Does nothign by default. */
+       /** Does nothing by default. */
        protected void processNewImageFile(Node fileNode, ImageData id) throws RepositoryException, IOException {
        }
 }
index 004bd943531aa9854c318ac184cecd7a03c3f776..a60c4f62e3824cc498d2c13cf54aaecdc8a07a15 100644 (file)
@@ -120,7 +120,7 @@ public abstract class AbstractPageViewer extends ContentViewer implements Observ
                }
        }
 
-       protected void layoutPage() {
+       public void layoutPage() {
                if (page != null)
                        page.layout(true, true);
        }
index 055fcf56f2a4f11b5cc012f4b86808ffb9174846..258aa9f49eb6006086675cb5f3b6c689fce6af95 100644 (file)
@@ -3,13 +3,14 @@ package org.argeo.cms.ui.widgets;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
-import org.argeo.cms.CmsException;
 import org.argeo.cms.ui.CmsImageManager;
+import org.argeo.cms.ui.CmsView;
 import org.argeo.cms.ui.internal.JcrFileUploadReceiver;
 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.JcrException;
 import org.eclipse.rap.fileupload.FileUploadHandler;
 import org.eclipse.rap.fileupload.FileUploadListener;
 import org.eclipse.rap.fileupload.FileUploadReceiver;
@@ -32,24 +33,26 @@ public class Img extends EditableImage implements SectionPart, NodePart {
        private FileUploadHandler currentUploadHandler = null;
        private FileUploadListener fileUploadListener;
 
-       public Img(Composite parent, int swtStyle, Node imgNode,
-                       Point preferredImageSize) throws RepositoryException {
-               this(Section.findSection(parent), parent, swtStyle, imgNode,
-                               preferredImageSize);
+       public Img(Composite parent, int swtStyle, Node imgNode, Point preferredImageSize) throws RepositoryException {
+               this(Section.findSection(parent), parent, swtStyle, imgNode, preferredImageSize, null);
                setStyle(TextStyles.TEXT_IMAGE);
        }
 
-       public Img(Composite parent, int swtStyle, Node imgNode)
-                       throws RepositoryException {
-               this(Section.findSection(parent), parent, swtStyle, imgNode, null);
+       public Img(Composite parent, int swtStyle, Node imgNode) throws RepositoryException {
+               this(Section.findSection(parent), parent, swtStyle, imgNode, null, null);
                setStyle(TextStyles.TEXT_IMAGE);
        }
 
-       Img(Section section, Composite parent, int swtStyle, Node imgNode,
-                       Point preferredImageSize) throws RepositoryException {
+       public Img(Composite parent, int swtStyle, Node imgNode, CmsImageManager imageManager) throws RepositoryException {
+               this(Section.findSection(parent), parent, swtStyle, imgNode, null, imageManager);
+               setStyle(TextStyles.TEXT_IMAGE);
+       }
+
+       Img(Section section, Composite parent, int swtStyle, Node imgNode, Point preferredImageSize,
+                       CmsImageManager imageManager) throws RepositoryException {
                super(parent, swtStyle, imgNode, false, preferredImageSize);
                this.section = section;
-               imageManager = CmsUiUtils.getCmsView().getImageManager();
+               this.imageManager = imageManager != null ? imageManager : CmsView.getCmsView(section).getImageManager();
                CmsUiUtils.style(this, TextStyles.TEXT_IMG);
        }
 
@@ -59,7 +62,7 @@ public class Img extends EditableImage implements SectionPart, NodePart {
                        try {
                                return createImageChooser(box, style);
                        } catch (RepositoryException e) {
-                               throw new CmsException("Cannot create image chooser", e);
+                               throw new JcrException("Cannot create image chooser", e);
                        }
                } else {
                        return createLabel(box, style);
@@ -76,26 +79,18 @@ public class Img extends EditableImage implements SectionPart, NodePart {
        protected synchronized Boolean load(Control lbl) {
                try {
                        Node imgNode = getNode();
-                       boolean loaded = imageManager.load(imgNode, lbl,
-                                       getPreferredImageSize());
+                       boolean loaded = imageManager.load(imgNode, lbl, getPreferredImageSize());
                        // getParent().layout();
                        return loaded;
                } catch (RepositoryException e) {
-                       throw new CmsException("Cannot load " + getNodeId()
-                                       + " from image manager", e);
+                       throw new JcrException("Cannot load " + getNodeId() + " from image manager", e);
                }
        }
 
-       protected Control createImageChooser(Composite box, String style)
-                       throws RepositoryException {
-               // FileDialog fileDialog = new FileDialog(getShell());
-               // fileDialog.open();
-               // String fileName = fileDialog.getFileName();
-               CmsImageManager imageManager = CmsUiUtils.getCmsView().getImageManager();
+       protected Control createImageChooser(Composite box, String style) throws RepositoryException {
                Node node = getNode();
-               JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(
-                               node.getParent(), node.getName() + '[' + node.getIndex() + ']',
-                               imageManager);
+               JcrFileUploadReceiver receiver = new JcrFileUploadReceiver(node.getParent(),
+                               node.getName() + '[' + node.getIndex() + ']', imageManager);
                if (currentUploadHandler != null)
                        currentUploadHandler.dispose();
                currentUploadHandler = prepareUpload(receiver);