From: Mathieu Baudier Date: Wed, 20 Jan 2021 10:01:31 +0000 (+0100) Subject: Work on image support. X-Git-Tag: argeo-commons-2.1.91~17 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=601db57307d66b20ca3da21fabdcfd5b19d965cb Work on image support. --- diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsConstants.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsConstants.java index 304cba627..ef6fd5f2e 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsConstants.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsConstants.java @@ -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"; diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsImageManager.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsImageManager.java index eb9cb752d..b0995c74c 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsImageManager.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsImageManager.java @@ -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; } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java index 72b09e28a..1ae4bb004 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/forms/FormPageViewer.java @@ -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 diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java index 0b76a6f01..8edfb3e00 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/internal/JcrFileUploadReceiver.java @@ -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); diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java index 1c6f71984..4c1a73108 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/util/DefaultImageManager.java @@ -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 { } } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java index 004bd9435..a60c4f62e 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/viewers/AbstractPageViewer.java @@ -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); } diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java index 055fcf56f..258aa9f49 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/widgets/Img.java @@ -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);