This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/v4 by this push:
new 9fc9af1314c CAUSEWAY-3889: makes ObjectIcon a record
9fc9af1314c is described below
commit 9fc9af1314c3e568b10dc400a3b54d9a7e4fe952
Author: a.huber <[email protected]>
AuthorDate: Mon Aug 18 07:17:37 2025 +0200
CAUSEWAY-3889: makes ObjectIcon a record
also doing some method renaming around mime support
---
.../org/apache/causeway/applib/value/Blob.java | 4 +-
.../org/apache/causeway/applib/value/Clob.java | 6 +--
.../org/apache/causeway/applib/value/Markup.java | 2 +-
.../causeway/applib/value/NamedWithMimeType.java | 10 ++--
.../commons/internal/base/_StableValue.java | 9 +++-
.../metamodel/facets/object/icon/ObjectIcon.java | 57 ++++++++++-----------
.../services/grid/GridLoaderServiceDefault.java | 7 +--
.../services/layout/LayoutServiceDefault.java | 5 +-
.../BufferedImageValueSemantics.java | 3 +-
.../CausewayModuleCoreRuntimeServices.java | 4 +-
.../icons/ObjectIconServiceDefault.java | 58 +++++++++-------------
.../resources/DomainObjectResourceServerside.java | 2 +-
.../export/CollectionContentsAsExportFactory.java | 2 +-
.../apache/causeway/viewer/wicket/ui/util/Wkt.java | 5 +-
.../services/ImageResourceCacheClassPath.java | 8 +--
15 files changed, 89 insertions(+), 93 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java
b/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java
index b40fd201ff1..b55f040ee66 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Blob.java
@@ -104,8 +104,8 @@ public record Blob(
* @return new {@link Blob}
*/
public static Blob of(final String name, final CommonMimeType mimeType,
final byte[] content) {
- var fileName = _Strings.asFileNameWithExtension(name,
mimeType.getProposedFileExtensions());
- return new Blob(fileName, mimeType.getMimeType(), content);
+ var fileName = _Strings.asFileNameWithExtension(name,
mimeType.proposedFileExtensions());
+ return new Blob(fileName, mimeType.baseType(), content);
}
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java
b/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java
index 469d3c69a35..f8bd0ae16ce 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Clob.java
@@ -38,6 +38,7 @@
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.CausewayModuleApplib;
@@ -47,7 +48,6 @@
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.commons.io.DataSource;
-import org.jspecify.annotations.NonNull;
import lombok.SneakyThrows;
/**
@@ -97,8 +97,8 @@ public record Clob(
* @return new {@link Clob}
*/
public static Clob of(final String name, final CommonMimeType mimeType,
final CharSequence content) {
- var fileName = _Strings.asFileNameWithExtension(name,
mimeType.getProposedFileExtensions());
- return new Clob(fileName, mimeType.getMimeType(), content);
+ var fileName = _Strings.asFileNameWithExtension(name,
mimeType.proposedFileExtensions());
+ return new Clob(fileName, mimeType.mimeType(), content);
}
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
b/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
index 0e21a70cfcc..b680487a0e0 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/value/Markup.java
@@ -64,7 +64,7 @@ public static Markup embeddedImage(final @Nullable DataUri
dataUri) {
public static Markup embeddedImage(final ImageType imageType, byte[]
imageData) {
Objects.requireNonNull(imageType);
Objects.requireNonNull(imageData);
- return embeddedImage(new DataUri(imageType.mimeType().getBaseType(),
null, Encoding.BASE64, imageData));
+ return embeddedImage(new DataUri(imageType.mimeType().baseType(),
null, Encoding.BASE64, imageData));
}
// -- CONSTRUCTION
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/value/NamedWithMimeType.java
b/api/applib/src/main/java/org/apache/causeway/applib/value/NamedWithMimeType.java
index 7b9fb036811..b26f1644c9f 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/value/NamedWithMimeType.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/value/NamedWithMimeType.java
@@ -201,11 +201,11 @@ private CommonMimeType(final String primaryType, final
String ... proposedFileEx
: Can.ofSingleton(name().toLowerCase()); // default
}
- @Getter final MimeType mimeType;
- @Getter final Can<String> proposedFileExtensions;
+ @Getter @Accessors(fluent=true) final MimeType mimeType;
+ @Getter @Accessors(fluent=true) final Can<String>
proposedFileExtensions;
- public String getBaseType() {
- return getMimeType().getBaseType();
+ public String baseType() {
+ return mimeType().getBaseType();
}
static MimeType newMimeType(final String primaryType, final String
subtype) {
@@ -237,7 +237,7 @@ public static Optional<CommonMimeType>
valueOfFileExtension(final @Nullable Stri
}
var fileExtLower = fileExt.toLowerCase();
return Stream.of(CommonMimeType.values())
-
.filter(mime->mime.getProposedFileExtensions().contains(fileExtLower))
+
.filter(mime->mime.proposedFileExtensions().contains(fileExtLower))
.findFirst();
}
diff --git
a/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
b/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
index e72f76e244d..d43c6d36cc1 100644
---
a/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
+++
b/commons/src/main/java/org/apache/causeway/commons/internal/base/_StableValue.java
@@ -18,6 +18,7 @@
*/
package org.apache.causeway.commons.internal.base;
+import java.io.Serializable;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
@@ -35,8 +36,11 @@
* @param <T> the type of the value to be held
* @since 4.0
*/
-public class _StableValue<T> {
- private final AtomicReference<T> ref = new AtomicReference<>();
+public record _StableValue<T>(AtomicReference<T> ref) implements Serializable {
+
+ public _StableValue() {
+ this(new AtomicReference<>());
+ }
/**
* Returns the current value if already set, or sets it using the provided
supplier
@@ -82,4 +86,5 @@ public T get() {
}
return value;
}
+
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/ObjectIcon.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/ObjectIcon.java
index 87e277ee968..09656132270 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/ObjectIcon.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/icon/ObjectIcon.java
@@ -21,32 +21,29 @@
import java.io.InputStream;
import java.io.Serializable;
import java.net.URL;
+import java.util.Objects;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Bytes;
+import org.apache.causeway.commons.internal.base._StableValue;
import org.apache.causeway.commons.internal.base._Strings;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.Synchronized;
-import lombok.ToString;
-
/**
* Icon image data class-path resource reference.
*
* @see ObjectIconService
* @since 2.0
*/
-@RequiredArgsConstructor
-@ToString
-@EqualsAndHashCode
-public class ObjectIcon
-implements Serializable {
+public record ObjectIcon(
+ String shortName,
+ URL url,
+ CommonMimeType mimeType,
+ String identifier,
+ _StableValue<byte[]> iconData
+ ) implements Serializable {
- private static final long serialVersionUID = 1L;
+ // -- FACTORIES
/**
* Create an ObjectIcon and eagerly read in image data from
@@ -57,7 +54,7 @@ public static ObjectIcon eager(
final URL url,
final CommonMimeType mimeType) {
var id = _Strings.base64UrlEncode(url.getPath());
- var objectIcon = new ObjectIcon(shortName, url, mimeType, id);
+ var objectIcon = new ObjectIcon(shortName, url, mimeType, id, new
_StableValue<>());
objectIcon.asBytes(); // memoize
return objectIcon;
}
@@ -71,30 +68,30 @@ public static ObjectIcon lazy(
final URL url,
final CommonMimeType mimeType) {
var id = _Strings.base64UrlEncode(url.getPath());
- return new ObjectIcon(shortName, url, mimeType, id);
+ return new ObjectIcon(shortName, url, mimeType, id, new
_StableValue<>());
}
- @Getter private @NonNull String shortName;
- @Getter private @NonNull URL url;
- @Getter private @NonNull CommonMimeType mimeType;
- @Getter private @NonNull String identifier;
+ // -- EQUALITY
- @ToString.Exclude
- @EqualsAndHashCode.Exclude
- private transient byte[] iconData;
+ @Override
+ public final boolean equals(Object o) {
+ if(this == o) return true;
+ return o instanceof ObjectIcon other
+ ? Objects.equals(this.shortName, other.shortName)
+ && Objects.equals(this.url, other.url)
+ && Objects.equals(this.mimeType, other.mimeType)
+ && Objects.equals(this.identifier, other.identifier)
+ : false;
+ }
- @Synchronized
public byte[] asBytes() {
-
- if(iconData==null) {
+ return iconData.orElseSet(()->{
try(final InputStream is = url.openStream()){
- iconData = _Bytes.of(is);
+ return _Bytes.of(is);
} catch (Exception e) {
- iconData = _Constants.emptyBytes;
+ return _Constants.emptyBytes;
}
- }
-
- return iconData;
+ });
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridLoaderServiceDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridLoaderServiceDefault.java
index 068b2a0e04f..ff695e04027 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -30,8 +30,10 @@
import jakarta.inject.Inject;
import jakarta.inject.Named;
-import org.springframework.beans.factory.annotation.Qualifier;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
+
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -51,7 +53,6 @@
import
org.apache.causeway.core.metamodel.services.grid.spi.LayoutResourceLoader;
import lombok.Getter;
-import org.jspecify.annotations.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
@@ -212,7 +213,7 @@ private Stream<String> streamResourceNameCandidatesFor(
final @NonNull Class<?> domainClass,
final @Nullable String layoutIfAny,
final @NonNull CommonMimeType format) {
- return format.getProposedFileExtensions().stream()
+ return format.proposedFileExtensions().stream()
.flatMap(fileExtension->streamResourceNameCandidatesFor(domainClass,
layoutIfAny, fileExtension));
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/layout/LayoutServiceDefault.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/layout/LayoutServiceDefault.java
index c70ec092256..01640bdc3c0 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/layout/LayoutServiceDefault.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/layout/LayoutServiceDefault.java
@@ -25,8 +25,9 @@
import jakarta.inject.Inject;
import jakarta.inject.Named;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.jspecify.annotations.Nullable;
+
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -141,7 +142,7 @@ private static String zipEntryNameFor(
final String fqn = objectSpec.getFullIdentifier();
return fqn.replace(".", File.separator)
+ ".layout."
- + format.getProposedFileExtensions().getFirstElseFail();
+ + format.proposedFileExtensions().getFirstElseFail();
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
index ec2534fa0d5..dfa77b18983 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
@@ -25,6 +25,7 @@
import jakarta.inject.Named;
import org.jspecify.annotations.Nullable;
+
import org.springframework.stereotype.Component;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -100,7 +101,7 @@ private BufferedImage fromBlobDto(final BlobDto blobDto) {
private Blob toBlob(final BufferedImage img) {
return img!=null
// arbitrary name and mimetype - not used when recovering the
image
- ? new Blob("image", CommonMimeType.PNG.getBaseType(),
_Images.toBytes(img))
+ ? new Blob("image", CommonMimeType.PNG.baseType(),
_Images.toBytes(img))
: null;
}
diff --git
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
index e6203862006..fc5ab2910ea 100644
---
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
+++
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/CausewayModuleCoreRuntimeServices.java
@@ -19,6 +19,7 @@
package org.apache.causeway.core.runtimeservices;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.OrderComparator;
@@ -102,7 +103,7 @@
MenuBarsMarshallerServiceBootstrap.class,
MenuBarsServiceBootstrap.class,
MessageServiceDefault.class,
-// ObjectIconServiceDefault.class, // no longer public, but discovered
anyway
+// ObjectIconServiceDefault.class, // no longer public, added to
ComponentScan below
ObjectLifecyclePublisherDefault.class,
PlaceholderRenderServiceDefault.class,
LifecycleCallbackNotifier.class,
@@ -129,6 +130,7 @@
ExceptionRecognizerForDataAccessException.class,
})
+@ComponentScan(basePackages = "org.apache.causeway.core.runtimeservices.icons")
public class CausewayModuleCoreRuntimeServices {
public static final String NAMESPACE = "causeway.runtimeservices";
diff --git
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/icons/ObjectIconServiceDefault.java
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/icons/ObjectIconServiceDefault.java
index 12bd8592f46..720abe71b3e 100644
---
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/icons/ObjectIconServiceDefault.java
+++
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/icons/ObjectIconServiceDefault.java
@@ -22,7 +22,6 @@
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Stream;
import jakarta.annotation.Priority;
import jakarta.inject.Inject;
@@ -36,9 +35,7 @@
import org.springframework.stereotype.Service;
import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.NamedWithMimeType;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
-import org.apache.causeway.applib.value.NamedWithMimeType.ImageType;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._StableValue;
import org.apache.causeway.commons.internal.base._Strings;
@@ -66,10 +63,12 @@ record ObjectIconServiceDefault(
implements ObjectIconService {
private static final String DEFAULT_IMAGE_RESOURCE_PATH =
"classpath:images";
- private static final Can<CommonMimeType> IMAGE_TYPES =
- Stream.of(NamedWithMimeType.ImageType.values())
- .map(ImageType::mimeType)
- .collect(Can.toCan());
+ /* this is only a subset of NamedWithMimeType.ImageType */
+ private static final Can<CommonMimeType> IMAGE_TYPES = Can.of(
+ CommonMimeType.PNG,
+ CommonMimeType.GIF,
+ CommonMimeType.JPEG,
+ CommonMimeType.SVG);
// non-canonical constructor
@Inject
@@ -90,19 +89,16 @@ public ObjectIcon getObjectIcon(
// also memoize unsuccessful icon lookups (as fallback), so we don't
search repeatedly
var cachedIcon = iconByKey.get(iconResourceKey);
- if(cachedIcon!=null) {
- return cachedIcon;
- }
+ if(cachedIcon!=null) return cachedIcon;
var icon = findIcon(spec, iconNameModifier);
+ //NOTE: cannot use computeIfAbsent, as it does not support recursive
update
+ // return iconByKey.computeIfAbsent(iconResourceKey, key->
+ // findIcon(spec, iconNameModifier));
iconByKey.put(iconResourceKey, icon);
return icon;
-
- //XXX cannot use computeIfAbsent, as it does not support recursive
update
- // return iconByKey.computeIfAbsent(iconResourceKey, key->
- // findIcon(spec, iconNameModifier));
}
//@Override
@@ -131,7 +127,7 @@ private ObjectIcon findIcon(
for(var imageType : IMAGE_TYPES) {
var objectIcon = imageType
- .getProposedFileExtensions()
+ .proposedFileExtensions()
.stream()
.map(suffix->iconResourceNameNoExt + "." + suffix)
.map(iconResourceName->
@@ -144,10 +140,7 @@ private ObjectIcon findIcon(
.map(Optional::get)
.findFirst();
- if(objectIcon.isPresent()) {
- return objectIcon.get(); // short-circuit if found
- }
-
+ if(objectIcon.isPresent()) return objectIcon.get(); //
short-circuit if found
}
// also search the default image resource path
@@ -155,7 +148,7 @@ private ObjectIcon findIcon(
for(var imageType : IMAGE_TYPES) {
var objectIcon = imageType
- .getProposedFileExtensions()
+ .proposedFileExtensions()
.stream()
.map(suffix->DEFAULT_IMAGE_RESOURCE_PATH + "/" +
iconResourceNameNoExt + "." + suffix)
.map(iconResourcePath->
@@ -168,19 +161,16 @@ private ObjectIcon findIcon(
.map(Optional::get)
.findFirst();
- if(objectIcon.isPresent()) {
- return objectIcon.get(); // short-circuit if found
- }
-
+ if(objectIcon.isPresent()) return objectIcon.get(); //
short-circuit if found
}
return spec.superclass()!=null
- // continue search in super spec
- ? getObjectIcon(spec.superclass(), iconNameModifier) //
memoizes as a side-effect
- : _Strings.isNotEmpty(iconNameModifier)
- // also do a more generic search, skipping the modifier
- ? getObjectIcon(spec, null) // memoizes as a
side-effect
- : getObjectFallbackIcon();
+ // continue search in super spec
+ ? getObjectIcon(spec.superclass(), iconNameModifier) // memoizes
as a side-effect
+ : _Strings.isNotEmpty(iconNameModifier)
+ // also do a more generic search, skipping the modifier
+ ? getObjectIcon(spec, null) // memoizes as a side-effect
+ : getObjectFallbackIcon();
}
// -- HELPER
@@ -190,12 +180,12 @@ private Optional<URL> classPathResource(
final @NonNull String absoluteResourceName) {
if(!absoluteResourceName.startsWith("classpath:")) {
throw _Exceptions
- .illegalArgument("invalid absolute resourceName %s",
absoluteResourceName);
+ .illegalArgument("invalid absolute resourceName %s",
absoluteResourceName);
}
var resource = resourceLoader.getResource(absoluteResourceName);
return resource.exists()
- ? Optional.ofNullable(resource.getURL())
- : Optional.empty();
+ ? Optional.ofNullable(resource.getURL())
+ : Optional.empty();
}
private static Optional<URL> classPathResource(
@@ -203,7 +193,7 @@ private static Optional<URL> classPathResource(
final @NonNull String relativeResourceName) {
if(relativeResourceName.startsWith("/")) {
throw _Exceptions
- .illegalArgument("invalid relative resourceName %s",
relativeResourceName);
+ .illegalArgument("invalid relative resourceName %s",
relativeResourceName);
}
var resourceUrl = _Resources.getResourceUrl(contextClass,
relativeResourceName);
return Optional.ofNullable(resourceUrl);
diff --git
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index ee85948cf39..2b5a1600e1d 100644
---
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -223,7 +223,7 @@ public ResponseEntity<Object> image(
return _EndpointLogging.response(log, "GET
/objects/{}/{}/object-icon", domainType, instanceId,
responseFactory.ok(
objectIcon.asBytes(),
-
MediaType.parseMediaType(objectIcon.getMimeType().getBaseType())));
+
MediaType.parseMediaType(objectIcon.mimeType().baseType())));
}
@Override
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collection/export/CollectionContentsAsExportFactory.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collection/export/CollectionContentsAsExportFactory.java
index 927019a1601..27042f82eaa 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collection/export/CollectionContentsAsExportFactory.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collection/export/CollectionContentsAsExportFactory.java
@@ -69,7 +69,7 @@ public ApplicationAdvice appliesTo(final IModel<?> model) {
public Component createComponent(final String id, final IModel<?> model) {
var collectionModel = (CollectionModel) model;
var mimeType = tabularExporter.getMimeType();
- var ext = mimeType.getProposedFileExtensions().getFirstElseFail();
+ var ext = mimeType.proposedFileExtensions().getFirstElseFail();
var fileName = collectionModel.getName().replaceAll(" ", "") + "." +
ext;
var link = new FileDownloadLink(id,
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
index f22d785d376..699b18d5c43 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/util/Wkt.java
@@ -97,7 +97,7 @@
import org.danekja.java.util.function.serializable.SerializableBiConsumer;
import org.danekja.java.util.function.serializable.SerializableBooleanSupplier;
import org.danekja.java.util.function.serializable.SerializableConsumer;
-
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.Identifier;
@@ -125,7 +125,6 @@
import org.apache.causeway.viewer.wicket.ui.panels.PanelUtil;
import
org.apache.causeway.viewer.wicket.ui.util.BootstrapConstants.ButtonSemantics;
-import org.jspecify.annotations.NonNull;
import lombok.experimental.UtilityClass;
import
de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
@@ -696,7 +695,7 @@ private FileResourceStream fileResourceStream(final File
file, final CommonMimeT
new org.apache.wicket.util.file.File(file)) {
private static final long serialVersionUID = 1L;
@Override public String getContentType() {
- return mime.getBaseType();
+ return mime.baseType();
}
};
}
diff --git
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
index 8a70f7a193b..b21ce1176ff 100644
---
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
+++
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/services/ImageResourceCacheClassPath.java
@@ -28,6 +28,7 @@
import org.apache.wicket.request.resource.IResource;
import org.apache.wicket.request.resource.PartWriterCallback;
import org.apache.wicket.request.resource.ResourceReference;
+import org.jspecify.annotations.NonNull;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
@@ -39,7 +40,6 @@
import org.apache.causeway.viewer.wicket.model.models.ImageResourceCache;
import
org.apache.causeway.viewer.wicket.viewer.CausewayModuleViewerWicketViewer;
-import org.jspecify.annotations.NonNull;
import lombok.RequiredArgsConstructor;
/**
@@ -81,7 +81,7 @@ private static class ObjectIconResourceReference
private final @NonNull ObjectIconResource objectIconResource;
public ObjectIconResourceReference(final ObjectIcon objectIcon) {
- super(new Key(Application.class.getName(),
objectIcon.getIdentifier(), null, null, null));
+ super(new Key(Application.class.getName(),
objectIcon.identifier(), null, null, null));
this.objectIconResource = new ObjectIconResource(objectIcon);
}
@@ -106,10 +106,10 @@ protected ResourceResponse newResourceResponse(final
Attributes attributes) {
var imageDataBytes = objectIcon.asBytes();
final long size = imageDataBytes.length;
ResourceResponse resourceResponse = new ResourceResponse();
-
resourceResponse.setContentType(objectIcon.getMimeType().getBaseType());
+ resourceResponse.setContentType(objectIcon.mimeType().baseType());
resourceResponse.setAcceptRange(ContentRangeType.BYTES);
resourceResponse.setContentLength(size);
- resourceResponse.setFileName(objectIcon.getShortName());
+ resourceResponse.setFileName(objectIcon.shortName());
RequestCycle cycle = RequestCycle.get();
Long startbyte = cycle.getMetaData(CONTENT_RANGE_STARTBYTE);
Long endbyte = cycle.getMetaData(CONTENT_RANGE_ENDBYTE);