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,