You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/10/21 20:46:55 UTC

[isis] branch master updated: ISIS-2412: simplifies the ImageValueFacet

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 08562a5  ISIS-2412: simplifies the ImageValueFacet
08562a5 is described below

commit 08562a5d90c58ad264aec3a5a60a2cda98806661
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 21 22:46:41 2020 +0200

    ISIS-2412: simplifies the ImageValueFacet
---
 .../java/org/apache/isis/applib/value/Image.java   |  2 +-
 .../facets/value/image/ImageValueFacet.java        |  8 ++--
 .../value/image/ImageValueSemanticsProvider.java   | 14 +++---
 .../JavaAwtImageValueSemanticsProvider.java        | 12 ++---
 .../scalars/image/JavaAwtImageDynamicResource.java | 55 +++++++++-------------
 .../scalars/image/JavaAwtImagePanel.java           | 10 ++--
 6 files changed, 38 insertions(+), 63 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Image.java b/api/applib/src/main/java/org/apache/isis/applib/value/Image.java
index 9374bcf..4c4da7d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Image.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Image.java
@@ -71,7 +71,7 @@ public class Image implements Serializable {
     /**
      * @return 2 dim array of pixels defining this image, 
      *      where each pixel is a 32 bit ARGB color value,
-     *      with {@literal A} the alpha value as highest significant 8 bits
+     *      with {@code A} the alpha value as highest significant 8 bits
      *      followed by {@code R} the red value and so on
      */
     @Nullable
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueFacet.java
index 0ea4268..dca2873 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueFacet.java
@@ -19,18 +19,16 @@
 
 package org.apache.isis.core.metamodel.facets.value.image;
 
-import java.awt.image.BufferedImage;
+import java.awt.Graphics2D;
 
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 public interface ImageValueFacet extends Facet {
 
-    ManagedObject createValue(BufferedImage image);
-
-    BufferedImage getImage(ManagedObject object);
-
     int getHeight(ManagedObject object);
 
     int getWidth(ManagedObject object);
+    
+    void render(ManagedObject object, Graphics2D graphics);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProvider.java
index bd1e37e..05962eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/image/ImageValueSemanticsProvider.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.value.image;
 
-import java.awt.image.BufferedImage;
+import java.awt.Graphics2D;
 
 import org.apache.isis.applib.value.Image;
 import org.apache.isis.commons.internal.image._Images;
@@ -27,6 +27,8 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
+import lombok.val;
+
 
 public class ImageValueSemanticsProvider 
 extends ImageValueSemanticsProviderAbstract<Image> {
@@ -46,8 +48,9 @@ extends ImageValueSemanticsProviderAbstract<Image> {
     }
     
     @Override
-    public BufferedImage getImage(final ManagedObject object) {
-        return _Images.fromPixels(unwrap(object).getPixels());
+    public void render(ManagedObject object, Graphics2D graphics) {
+        val bufferedImage = _Images.fromPixels(unwrap(object).getPixels());
+        graphics.drawImage(bufferedImage, 0, 0, null);
     }
     
     @Override
@@ -59,11 +62,6 @@ extends ImageValueSemanticsProviderAbstract<Image> {
     protected Image doRestore(String base64ImageData) {
         return new Image(_Images.toPixels(_Images.fromBase64(base64ImageData)));
     }
-    
-    @Override
-    public ManagedObject createValue(BufferedImage image) {
-        return getObjectManager().adapt(new Image(_Images.toPixels(image)));
-    }
 
     @Override
     public Facet getUnderlyingFacet() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
index bbe558e..b3b071f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.value.imageawt;
 
+import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 
 import org.apache.isis.commons.internal.image._Images;
@@ -42,10 +43,10 @@ extends ImageValueSemanticsProviderAbstract<BufferedImage> {
     public int getHeight(final ManagedObject object) {
         return unwrap(object).getHeight();
     }
-
+    
     @Override
-    public BufferedImage getImage(final ManagedObject object) {
-        return unwrap(object);
+    public void render(ManagedObject object, Graphics2D graphics) {
+        graphics.drawImage(unwrap(object), 0, 0, null);
     }
 
     @Override
@@ -67,11 +68,6 @@ extends ImageValueSemanticsProviderAbstract<BufferedImage> {
     public String toString() {
         return "JavaAwtImageValueSemanticsProvider: ";
     }
-
-    @Override
-    public ManagedObject createValue(final BufferedImage image) {
-        return getObjectManager().adapt(image);
-    }
     
     // -- HELPER
     
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImageDynamicResource.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImageDynamicResource.java
index 26d235f..05cbdd2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImageDynamicResource.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImageDynamicResource.java
@@ -19,55 +19,42 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.image;
 
 import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
 
 import org.apache.wicket.markup.html.image.resource.RenderedDynamicImageResource;
 
-import org.apache.isis.commons.internal.image._Images;
+import org.apache.isis.core.metamodel.facets.value.image.ImageValueFacet;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.NonNull;
-import lombok.extern.log4j.Log4j2;
+import lombok.val;
 
-@Log4j2
+//@Log4j2
 final class JavaAwtImageDynamicResource extends RenderedDynamicImageResource {
     
     private static final long serialVersionUID = 1L;
     
-    private transient BufferedImage bufferedImage = null;
-    private byte[] imageData;
+    private ScalarModel model;
     
-    public JavaAwtImageDynamicResource(@NonNull BufferedImage image) {
-        super(image.getWidth(), image.getHeight());
-        
-        try {
-            this.bufferedImage = image;    
-            this.imageData = _Images.toBytes(image);      
-        } catch (Exception e) {
-            this.bufferedImage = null;
-        }
+    public static JavaAwtImageDynamicResource of(@NonNull ScalarModel model) {
+        val imageValueFacet = model.getTypeOfSpecification().getFacet(ImageValueFacet.class);
+        val adapter = model.getObject();
+        return new JavaAwtImageDynamicResource(
+                model, 
+                imageValueFacet.getWidth(adapter), 
+                imageValueFacet.getHeight(adapter));
+    }
+
+    private JavaAwtImageDynamicResource(ScalarModel model, int width, int height) {
+        super(width, height);
+        this.model = model;
     }
 
     @Override
-    protected boolean render(final Graphics2D graphics, Attributes attributes) {
-        graphics.drawImage(getBufferedImage(), 0, 0, null);
+    protected boolean render(final Graphics2D graphics, final Attributes attributes) {
+        val imageValueFacet = model.getTypeOfSpecification().getFacet(ImageValueFacet.class);
+        val adapter = model.getObject();
+        imageValueFacet.render(adapter, graphics);
         return true;
     }
     
-    // -- HELPER
-    
-    private BufferedImage getBufferedImage() {
-        if(bufferedImage == null
-                && imageData!=null) {
-            
-            try {
-                bufferedImage = _Images.fromBytes(imageData);    
-            } catch (Exception e) {
-                log.error("failed to deserialize image from previously serilaized image data", e);
-                this.bufferedImage = null;
-                this.imageData=null; // so we don't hit this issue again
-            }
-            
-        }
-        return bufferedImage;
-    }
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
index 3e2175d..dd8d69a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
@@ -23,7 +23,6 @@ import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
 
-import org.apache.isis.core.metamodel.facets.value.image.ImageValueFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -55,13 +54,10 @@ public class JavaAwtImagePanel extends PanelAbstract<ScalarModel> {
             permanentlyHide(ID_SCALAR_VALUE, ID_FEEDBACK);
             return;
         }
-            
-        val imageValueFacet = getModel().getTypeOfSpecification().getFacet(ImageValueFacet.class);
-        
-        val awtImageInstance = imageValueFacet.getImage(adapter);
-        val dynamicImageResource = new JavaAwtImageDynamicResource(awtImageInstance);
-        
+                    
+        val dynamicImageResource = JavaAwtImageDynamicResource.of(getModel());
         val wicketImageComponent = new Image(ID_SCALAR_VALUE, dynamicImageResource);
+        
         addOrReplace(wicketImageComponent);
         addOrReplace(new NotificationPanel(
                 ID_FEEDBACK,