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",