Skip to content

Commit 7a23973

Browse files
committed
CAUSEWAY-3985: [v2] Backport Table Column Sorting to be only enabled if
Comparable Task-Url: https://issues.apache.org/jira/browse/CAUSEWAY-3985
1 parent 2da0d02 commit 7a23973

4 files changed

Lines changed: 20 additions & 6 deletions

File tree

core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/ObjectSpecification.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,18 @@ default boolean isPrimitive() {
457457
default boolean isAbstract() {
458458
return getBeanSort().isAbstract();
459459
}
460+
461+
/**
462+
* Whether {@link #getCorrespondingClass()} implements {@link Comparable}
463+
* or has ordering (primitives, strings and enums).
464+
*/
465+
default boolean isComparableOrOrdered() {
466+
var cls = getCorrespondingClass();
467+
return Comparable.class.isAssignableFrom(cls)
468+
|| cls.isPrimitive()
469+
|| cls.equals(String.class)
470+
|| cls.isEnum();
471+
}
460472

461473
/**
462474
* Includes abstract types that have {@link EntityFacet}.

viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.util.List;
2222
import java.util.Objects;
23+
import java.util.Optional;
2324

2425
import org.apache.causeway.commons.internal.collections._Lists;
2526
import org.apache.causeway.core.config.CausewayConfiguration.Viewer.Wicket;
@@ -179,13 +180,16 @@ private void addPropertyColumnsIfRequired(final List<GenericColumn> columns) {
179180
private SingularColumn createSingularColumn(final OneToOneAssociation property) {
180181
val collectionModel = getModel();
181182
final String parentTypeName = property.getDeclaringType().logicalTypeName();
183+
final Optional<String> sortable = property.getElementType().isComparableOrOrdered()
184+
? Optional.of(property.getId())
185+
: Optional.empty(); /*not sortable*/
182186

183187
return new SingularColumn(
184188
collectionModel.getElementType(),
185189
collectionModel.getVariant(),
186190
Model.of(property.getCanonicalFriendlyName()),
187191
property.getId(),
188-
property.getId(),
192+
sortable,
189193
parentTypeName,
190194
property.getCanonicalDescription());
191195
}
@@ -199,7 +203,6 @@ private PluralColumn createPluralColumn(final OneToManyAssociation collection) {
199203
collectionModel.getVariant(),
200204
Model.of(collection.getCanonicalFriendlyName()),
201205
collection.getId(),
202-
collection.getId(),
203206
parentTypeName,
204207
collection.getCanonicalDescription(),
205208
// future work: can hook up with global config

viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/PluralColumn.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,11 @@ public PluralColumn(
6666
final ObjectSpecification elementType,
6767
final EntityCollectionModel.Variant collectionVariant,
6868
final IModel<String> columnNameModel,
69-
final String sortProperty,
7069
final String propertyId,
7170
final String parentTypeName,
7271
final Optional<String> describedAs,
7372
final RenderOptions opts) {
74-
super(elementType, collectionVariant, columnNameModel, sortProperty, propertyId, parentTypeName, describedAs);
73+
super(elementType, collectionVariant, columnNameModel, null /*never sortable*/, propertyId, parentTypeName, describedAs);
7574
this.opts = opts;
7675
}
7776

viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ public SingularColumn(
4040
final ObjectSpecification elementType,
4141
final EntityCollectionModel.Variant collectionVariant,
4242
final IModel<String> columnNameModel,
43-
final String sortProperty,
4443
final String propertyId,
44+
final Optional<String> sortable,
4545
final String parentTypeName,
4646
final Optional<String> describedAs) {
47-
super(elementType, collectionVariant, columnNameModel, sortProperty, propertyId, parentTypeName, describedAs);
47+
super(elementType, collectionVariant, columnNameModel, sortable.orElse(null), propertyId, parentTypeName, describedAs);
4848
}
4949

5050
@Override

0 commit comments

Comments
 (0)