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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new e35f8bf139 CAUSEWAY-3797: offer column sorting only if underlying
class is comparable
e35f8bf139 is described below
commit e35f8bf13993c06750d58e6dcd8d02111c606f5e
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 27 06:29:06 2024 +0200
CAUSEWAY-3797: offer column sorting only if underlying class is
comparable
---
.../causeway/core/metamodel/spec/ObjectSpecification.java | 7 +++++++
.../ajaxtable/CollectionContentsAsAjaxTablePanel.java | 7 +++++--
.../ajaxtable/columns/AssociationColumnAbstract.java | 10 ++++++++--
.../collectioncontents/ajaxtable/columns/PluralColumn.java | 6 ++++--
.../collectioncontents/ajaxtable/columns/SingularColumn.java | 2 +-
5 files changed, 25 insertions(+), 7 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
index 01acac6fa5..c86a8f95b6 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java
@@ -458,6 +458,13 @@ extends
return getBeanSort().isAbstract();
}
+ /**
+ * Whether {@link #getCorrespondingClass()} implements {@link Comparable}.
+ */
+ default boolean isComparable() {
+ return Comparable.class.isAssignableFrom(getCorrespondingClass());
+ }
+
/**
* Includes abstract types that have {@link EntityFacet}.
*/
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index bb6687ec82..c55bb2a34d 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -19,6 +19,7 @@
package
org.apache.causeway.viewer.wicket.ui.components.collectioncontents.ajaxtable;
import java.util.List;
+import java.util.Optional;
import org.apache.wicket.Component;
import
org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
@@ -203,11 +204,14 @@ implements CollectionCountProvider {
private SingularColumn createSingularColumn(final OneToOneAssociation
property) {
val collectionModel = getModel();
final String parentTypeName =
property.getDeclaringType().getLogicalTypeName();
+ final Optional<String> sortability =
property.getElementType().isComparable()
+ ? Optional.of(property.getId())
+ : Optional.empty();
return new SingularColumn(
collectionModel.getVariant(),
Model.of(property.getCanonicalFriendlyName()),
- property.getId(),
+ sortability,
property.getId(),
parentTypeName,
property.getCanonicalDescription());
@@ -221,7 +225,6 @@ implements CollectionCountProvider {
collectionModel.getVariant(),
Model.of(collection.getCanonicalFriendlyName()),
collection.getId(),
- collection.getId(),
parentTypeName,
collection.getCanonicalDescription(),
// future work: can hook up with global config
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/AssociationColumnAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/AssociationColumnAbstract.java
index 9d8da5a4fc..1f273d0411 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/AssociationColumnAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/AssociationColumnAbstract.java
@@ -55,12 +55,18 @@ extends GenericColumnAbstract {
public AssociationColumnAbstract(
final EntityCollectionModel.Variant collectionVariant,
final IModel<String> columnNameModel,
- final String sortProperty,
+ /**
+ * If empty, sorting is disabled for this column.
+ * <p>
+ * Not every column (e.g. as mapped to on association) is sortable.
+ * The referenced type must implement {@link Comparable}.
+ */
+ final Optional<String> sortProperty,
final String memberId,
final String parentTypeName,
final Optional<String> describedAs) {
- super(columnNameModel, sortProperty);
+ super(columnNameModel, sortProperty.orElse(null));
this.collectionVariant = collectionVariant;
this.memberId = memberId;
this.parentTypeName = parentTypeName;
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/PluralColumn.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/PluralColumn.java
index f989d86fc8..bbcbb1164f 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/PluralColumn.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/PluralColumn.java
@@ -64,12 +64,14 @@ extends AssociationColumnAbstract {
public PluralColumn(
final EntityCollectionModel.Variant collectionVariant,
final IModel<String> columnNameModel,
- final String sortProperty,
final String propertyId,
final String parentTypeName,
final Optional<String> describedAs,
final RenderOptions opts) {
- super(collectionVariant, columnNameModel, sortProperty, propertyId,
parentTypeName, describedAs);
+ super(collectionVariant, columnNameModel,
+ null // sortProperty .. never sortable
+ ,
+ propertyId, parentTypeName, describedAs);
this.opts = opts;
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
index 0135a4c0d5..9f730538ed 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
@@ -39,7 +39,7 @@ extends AssociationColumnAbstract {
public SingularColumn(
final EntityCollectionModel.Variant collectionVariant,
final IModel<String> columnNameModel,
- final String sortProperty,
+ final Optional<String> sortProperty,
final String propertyId,
final String parentTypeName,
final Optional<String> describedAs) {