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 e6cb30941a3 CAUSEWAY-3889: IconUiEvent construction fix
e6cb30941a3 is described below
commit e6cb30941a30de343948a1a816a921f4456467f0
Author: Andi Huber <[email protected]>
AuthorDate: Fri Aug 29 10:26:03 2025 +0200
CAUSEWAY-3889: IconUiEvent construction fix
---
.../causeway/applib/events/EventObjectBase.java | 35 +++--------------
.../causeway/applib/events/ui/IconUiEvent.java | 15 ++------
...mainObjectLayoutAnnotationUsingIconUiEvent.java | 4 +-
.../causeway/viewer/wicket/ui/exec/Mediator.java | 45 ++++++++++------------
4 files changed, 31 insertions(+), 68 deletions(-)
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/events/EventObjectBase.java
b/api/applib/src/main/java/org/apache/causeway/applib/events/EventObjectBase.java
index 1bff7ae3f27..3b7b3eef7ef 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/events/EventObjectBase.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/events/EventObjectBase.java
@@ -18,18 +18,18 @@
*/
package org.apache.causeway.applib.events;
-import java.util.Arrays;
import java.util.Optional;
import java.util.function.Supplier;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.functional.Try;
+import org.apache.causeway.commons.internal._Constants;
import org.apache.causeway.commons.internal.base._Casts;
+import org.apache.causeway.commons.internal.reflection._ClassCache;
+import
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedConstructor;
import org.apache.causeway.commons.internal.reflection._Reflect;
-import static
org.apache.causeway.commons.internal.reflection._Reflect.predicates.paramCount;
-
/**
* @since 2.0 {@index}
*/
@@ -56,9 +56,9 @@ public static <T, E extends EventObjectBase<T>> Optional<E>
getInstanceWithSourc
*/
public static <T, E extends EventObjectBase<T>> Optional<E>
getInstanceWithSourceSupplier(
final Class<E> eventType, final @Nullable Supplier<T>
eventSourceSupplier) {
- return _Reflect.getPublicConstructors(eventType)
- .filter(paramCount(0))
- .getFirst()
+ return _ClassCache.getInstance()
+ .lookupPublicConstructor(eventType, _Constants.emptyClasses)
+ .map(ResolvedConstructor::constructor)
.map(_Reflect::invokeConstructor)
.flatMap(Try::getValue)
.map(evnt->{
@@ -68,29 +68,6 @@ public static <T, E extends EventObjectBase<T>> Optional<E>
getInstanceWithSourc
});
}
- /**
- * Variant with additional constructor argument
- */
- public static <T, E extends EventObjectBase<T>, A> Optional<E>
getInstanceWithSourceSupplier(
- final Class<E> eventType, final @Nullable Supplier<T>
eventSourceSupplier,
- final Class<A> constructorArgType,
- final A constructorArg) {
-
- var parameterTypes = new Class[] {constructorArgType};
-
- return _Reflect.getPublicConstructors(eventType)
- .filter(paramCount(1))
-
.filter(constructor->Arrays.equals(constructor.getParameterTypes(),
parameterTypes))
- .getFirst()
- .map(constructor->_Reflect.invokeConstructor(constructor,
constructorArg))
- .flatMap(Try::getValue)
- .map(evnt->_Casts.<E>uncheckedCast(evnt))
- .map((E event)->{
- event.sourceSupplier = eventSourceSupplier;
- return event;
- });
- }
-
// --
/**
diff --git
a/api/applib/src/main/java/org/apache/causeway/applib/events/ui/IconUiEvent.java
b/api/applib/src/main/java/org/apache/causeway/applib/events/ui/IconUiEvent.java
index eb7b6aec956..5cc0242c6db 100644
---
a/api/applib/src/main/java/org/apache/causeway/applib/events/ui/IconUiEvent.java
+++
b/api/applib/src/main/java/org/apache/causeway/applib/events/ui/IconUiEvent.java
@@ -51,20 +51,11 @@ public abstract class IconUiEvent<S> extends
AbstractUiEvent<S> {
* <p>Because the {@link EventObject} superclass prohibits a null source,
a dummy value is temporarily used.
*/
protected IconUiEvent() {
- this(null, null);
+ super(null);
}
- public IconUiEvent(ObjectSupport.IconWhere iconWhere) {
- this(null, iconWhere);
- }
-
- public IconUiEvent(final S source, ObjectSupport.IconWhere iconWhere) {
- super(source);
- this.iconWhere = iconWhere;
- }
-
- @Getter @Accessors(fluent = true)
- private final ObjectSupport.IconWhere iconWhere;
+ @Getter @Setter @Accessors(fluent = true)
+ private ObjectSupport.IconWhere iconWhere;
/**
* Icon resource for corresponding domain object,
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
index 152d0d43ee5..e2dc74d72cb 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
@@ -96,9 +96,9 @@ public void visitAttributes(final BiConsumer<String, Object>
visitor) {
}
private IconUiEvent<Object> newIconUiEvent(final ManagedObject
owningAdapter, ObjectSupport.IconWhere iconWhere) {
- return EventObjectBase.getInstanceWithSourceSupplier(iconUiEventClass,
owningAdapter::getPojo,
- ObjectSupport.IconWhere.class, iconWhere)
+ var iconUiEvent =
EventObjectBase.getInstanceWithSourceSupplier(iconUiEventClass,
owningAdapter::getPojo)
.orElseThrow();
+ return iconUiEvent.iconWhere(iconWhere);
}
private Optional<IconFacet> underlyingIconFacet() {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/exec/Mediator.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/exec/Mediator.java
index 98b5225364b..b708cd3f019 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/exec/Mediator.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/exec/Mediator.java
@@ -134,31 +134,26 @@ void handle() {
// non-Ajax request => just stream the Lob to the browser
// or if this is a no-arg action, there also will be no
parent for the component
requestCycle.scheduleRequestHandlerAfterCurrent(handler());
+ return;
+ }
+ // otherwise,
+ // Ajax request => respond with a redirect to be able to
stream the Lob to the client
+ final IRequestHandler requestHandler = handler();
+ if(requestHandler instanceof ResourceStreamRequestHandler
scheduledHandler) {
+ var streamingBehavior = new
StreamAfterAjaxResponseBehavior(scheduledHandler);
+ ajaxTarget.getPage().add(streamingBehavior);
+ scheduleJs(ajaxTarget,
javascriptFor_sameWindow(streamingBehavior.getCallbackUrl()), 100);
+ } else if(requestHandler instanceof
RedirectRequestHandlerWithOpenUrlStrategy redirectHandler) {
+ var fullUrl = expanded(requestCycle,
redirectHandler.getRedirectUrl());
+ var js = redirectHandler.getOpenUrlStrategy().isNewWindow()
+ ? javascriptFor_newWindow(fullUrl)
+ : javascriptFor_sameWindow(fullUrl);
+
+ scheduleJs(ajaxTarget, js, 100);
} else {
- // otherwise,
- // Ajax request => respond with a redirect to be able to
stream the Lob to the client
- final IRequestHandler requestHandler = handler();
- if(requestHandler instanceof ResourceStreamRequestHandler
scheduledHandler) {
- var streamingBehavior = new
StreamAfterAjaxResponseBehavior(scheduledHandler);
- var page = ajaxTarget.getPage();
- page.add(streamingBehavior);
- CharSequence callbackUrl =
streamingBehavior.getCallbackUrl();
- scheduleJs(ajaxTarget,
javascriptFor_sameWindow(callbackUrl), 10);
- } else if(requestHandler instanceof
RedirectRequestHandlerWithOpenUrlStrategy redirectHandler) {
-
- final String url = redirectHandler.getRedirectUrl();
- final String fullUrl = expanded(requestCycle, url);
-
- if(redirectHandler.getOpenUrlStrategy().isNewWindow())
{
- scheduleJs(ajaxTarget,
javascriptFor_newWindow(fullUrl), 100);
- } else {
- scheduleJs(ajaxTarget,
javascriptFor_sameWindow(fullUrl), 100);
- }
- } else {
- throw _Exceptions.unrecoverable(
- "no logic implemented to handle
IRequestHandler of type %s",
- requestHandler.getClass().getName());
- }
+ throw _Exceptions.unrecoverable(
+ "no logic implemented to handle IRequestHandler of
type %s",
+ requestHandler.getClass().getName());
}
}
}
@@ -195,7 +190,7 @@ private static String javascriptFor_sameWindow(final
CharSequence url) {
private static void scheduleJs(final AjaxRequestTarget target, final
String js, final int millis) {
// the timeout is needed to let Wicket release the channel
- target.appendJavaScript(String.format("setTimeout(%s, %d);", js,
millis));
+ target.appendJavaScript("setTimeout(%s, %d);".formatted(js, millis));
}
/**