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 2021/11/23 14:24:11 UTC

[isis] branch master updated: ISIS-2877: implement OrderRelation semantics for images

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 c8429f7  ISIS-2877: implement OrderRelation semantics for images
c8429f7 is described below

commit c8429f729c1628b4989b718d9e4b5430af672464
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Nov 23 15:24:00 2021 +0100

    ISIS-2877: implement OrderRelation semantics for images
---
 .../isis/commons/internal/image/_Images.java       | 23 +++++++++++++++++++++-
 .../BufferedImageValueSemantics.java               | 21 ++++++++++++++++++++
 .../isis/testdomain/value/ValueSemanticsTest.java  |  9 +--------
 .../testdomain/value/ValueSemanticsTester.java     | 14 +------------
 4 files changed, 45 insertions(+), 22 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/internal/image/_Images.java b/commons/src/main/java/org/apache/isis/commons/internal/image/_Images.java
index 879133a..69261f8 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/image/_Images.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/image/_Images.java
@@ -28,9 +28,10 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.nio.charset.StandardCharsets;
 
-import org.springframework.lang.Nullable;
 import javax.imageio.ImageIO;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.primitives._Ints;
@@ -156,6 +157,26 @@ public class _Images {
             0xff<<24,
     };
 
+    public static int compare(final BufferedImage a, final BufferedImage b) {
+        int c = Integer.compare(a.getWidth(), b.getWidth());
+        if(c!=0) {
+            return c;
+        }
+        c = Integer.compare(a.getHeight(), b.getHeight());
+        if(c!=0) {
+            return c;
+        }
+        for (int x = 0; x < a.getWidth(); x++) {
+            for (int y = 0; y < a.getHeight(); y++) {
+                c = Integer.compare(a.getRGB(x, y), b.getRGB(x, y));
+                if(c!=0) {
+                    return c;
+                }
+            }
+        }
+        return 0;
+    }
+
 //    public static void draw(BufferedImage image, BufferedImage virtualImage) {
 //        Graphics2D g2d = virtualImage.createGraphics();
 //        g2d.drawImage(image, 0, 0, null);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BufferedImageValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
index e2aceec..53b2f9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
@@ -27,6 +27,7 @@ import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.value.semantics.EncoderDecoder;
+import org.apache.isis.applib.value.semantics.OrderRelation;
 import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.image._Images;
@@ -40,6 +41,7 @@ public class BufferedImageValueSemantics
 extends ValueSemanticsAbstract<BufferedImage>
 implements
     ImageValueSemantics,
+    OrderRelation<BufferedImage, Void>,
     EncoderDecoder<BufferedImage> {
 
     @Override
@@ -52,6 +54,23 @@ implements
         return UNREPRESENTED;
     }
 
+    // -- ORDER RELATION
+
+    @Override
+    public Void epsilon() {
+        return null; // not used
+    }
+
+    @Override
+    public int compare(final BufferedImage a, final BufferedImage b, final Void epsilon) {
+        return _Images.compare(a, b);
+    }
+
+    @Override
+    public boolean equals(final BufferedImage a, final BufferedImage b, final Void epsilon) {
+        return compare(a, b, epsilon) == 0;
+    }
+
     // -- ENCODER DECODER
 
     @Override
@@ -101,4 +120,6 @@ implements
     }
 
 
+
+
 }
diff --git a/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTest.java b/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTest.java
index 7561856..0a0b96e 100644
--- a/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTest.java
+++ b/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.testdomain.value;
 
-import java.io.Serializable;
 import java.util.Locale;
 import java.util.stream.Stream;
 
@@ -69,7 +68,7 @@ class ValueSemanticsTest {
 
     @ParameterizedTest(name = "{index} {0}")
     @MethodSource("provideValueTypeExamples")
-    <T extends Serializable> void valueTypes(
+    <T> void valueTypes(
             final String name,
             final Class<T> valueType,
             final ValueTypeExample<T> example) {
@@ -83,11 +82,6 @@ class ValueSemanticsTest {
                 managedProp->example.getUpdateValue(),
                 (context, codec)->{
 
-                    // TODO skip tests, because some value-types are not serializable
-                    if(!(example.getValue() instanceof Serializable)) {
-                        return;
-                    }
-
                     // CoderDecoder round-trip test
                     val serialized = codec.toEncodedString(example.getValue());
 
@@ -103,7 +97,6 @@ class ValueSemanticsTest {
                     val stringified = parser.parseableTextRepresentation(context, example.getValue());
 
                     if(valueType.equals(Password.class)) {
-
                         val recoveredValue = (Password)parser.parseTextRepresentation(context, stringified);
                         assertTrue(recoveredValue.checkPassword("*"));
 
diff --git a/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTester.java b/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTester.java
index 8e0bb46..088b467 100644
--- a/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTester.java
+++ b/regressiontests/stable-value/src/test/java/org/apache/isis/testdomain/value/ValueSemanticsTester.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.testdomain.value;
 
-import java.io.Serializable;
 import java.util.Optional;
 import java.util.function.Function;
 
@@ -55,7 +54,7 @@ import lombok.NonNull;
 import lombok.SneakyThrows;
 import lombok.val;
 
-public class ValueSemanticsTester<T extends Serializable> {
+public class ValueSemanticsTester<T> {
 
     @Inject InteractionService interactionService;
     @Inject SpecificationLoader specLoader;
@@ -130,17 +129,6 @@ public class ValueSemanticsTester<T extends Serializable> {
 
         val b = _Casts.<T>uncheckedCast(_b);
 
-        if(valueType.equals(java.util.Date.class)
-                || valueType.getPackageName().equals("java.sql")
-                || valueType.getPackageName().equals("java.time")
-                || valueType.getPackageName().equals("org.joda.time")
-                ) {
-
-            //TODO implement based on OrderRelation<T>
-            //assertEquals(a, b, message);
-            //return;
-        }
-
         if(currentOrderRelation.isPresent()) {
             assertTrue(currentOrderRelation.get().equals(a, b), ()->
                 String.format("%s ==> expected: %s but was: %s",