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 9310225b82 ISIS-3335: purge UiObjectWkt's getLayoutData
9310225b82 is described below
commit 9310225b82c56ae257389176379e93539c8d9faa
Author: Andi Huber <[email protected]>
AuthorDate: Tue Jan 24 08:30:41 2023 +0100
ISIS-3335: purge UiObjectWkt's getLayoutData
---
.../models/EntityCollectionModelParented.java | 32 ++++++--------
.../viewer/wicket/model/models/UiObjectWkt.java | 4 --
.../entity/collection/EntityCollectionPanel.java | 10 +++--
.../collection/EntityCollectionPanelFactory.java | 33 +++++++++++++-
.../wicket/ui/components/layout/bs/col/Col.java | 51 +++++++++-------------
5 files changed, 70 insertions(+), 60 deletions(-)
diff --git
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelParented.java
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelParented.java
index f3bf57eeca..009bf32af1 100644
---
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelParented.java
+++
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EntityCollectionModelParented.java
@@ -18,13 +18,10 @@
*/
package org.apache.causeway.viewer.wicket.model.models;
-import java.util.Optional;
-
import org.apache.wicket.Component;
import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.causeway.viewer.wicket.model.hints.UiHintContainer;
import
org.apache.causeway.viewer.wicket.model.models.interaction.coll.DataTableModelWkt;
@@ -43,34 +40,35 @@ implements
// TODO parent object model, maybe should not be exposed
// maybe could be resolved in the process of decoupling the ActionModel
from Wicket
@Getter private final @NonNull UiObjectWkt entityModel;
+ @Getter private final @NonNull CollectionLayoutData layoutData;
// -- FACTORIES
public static EntityCollectionModelParented forParentObjectModel(
- final @NonNull UiObjectWkt entityModel) {
+ final @NonNull UiObjectWkt entityModel, final @NonNull
CollectionLayoutData layoutData) {
- val collMetaModel =
- Optional.ofNullable(entityModel.getCollectionLayoutData())
- .map(collectionLayoutData->
- entityModel
+ val coll = entityModel
.getTypeOfSpecification()
- .getCollectionElseFail(collectionLayoutData.getId()))
- .orElseThrow(()->_Exceptions
- .illegalArgument("EntityModel must have
CollectionLayoutMetadata"));
+ .getCollectionElseFail(layoutData.getId()); //
collection's member-id
+
+ val dataTableModel = DataTableModelWkt
+ .forCollection(entityModel.bookmarkedObjectModel(), coll);
return new EntityCollectionModelParented(
- DataTableModelWkt
- .forCollection(entityModel.bookmarkedObjectModel(),
collMetaModel),
- entityModel);
+ dataTableModel,
+ entityModel,
+ layoutData);
}
// -- CONSTRUCTOR
protected EntityCollectionModelParented(
final @NonNull DataTableModelWkt delegate,
- final @NonNull UiObjectWkt parentObjectModel) { //TODO maybe
instead use the delegate (?)
+ final @NonNull UiObjectWkt parentObjectModel, //TODO maybe
instead use the delegate (?)
+ final @NonNull CollectionLayoutData layoutData) {
super(delegate, Variant.PARENTED);
this.entityModel = parentObjectModel;
+ this.layoutData = layoutData;
}
// -- UI HINT CONTAINER
@@ -97,10 +95,6 @@ implements
return (OneToManyAssociation) super.getMetaModel();
}
- public CollectionLayoutData getLayoutData() {
- return entityModel.getCollectionLayoutData();
- }
-
public Bookmark asHintingBookmark() {
return entityModel.getOwnerBookmark();
}
diff --git
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
index 0011a4cc8a..cac6a8f6d1 100644
---
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
+++
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
@@ -26,7 +26,6 @@ import org.apache.wicket.Component;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.springframework.lang.Nullable;
-import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.applib.services.bookmark.Bookmark;
import org.apache.causeway.applib.services.hint.HintStore;
import org.apache.causeway.commons.internal.assertions._Assert;
@@ -272,9 +271,6 @@ implements
// -- TAB AND COLUMN (metadata if any)
- @Getter @Setter
- private CollectionLayoutData collectionLayoutData;
-
@Setter
private @Nullable Bookmark contextBookmarkIfAny;
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
index e4743f74f8..2c0c96ba27 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
@@ -26,6 +26,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.causeway.applib.annotation.TableDecorator;
import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.Consent;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
@@ -76,11 +77,13 @@ implements HasDynamicallyVisibleContent {
@Getter(value = AccessLevel.PROTECTED)
private CollectionPresentationSelectorPanel selectorDropdownPanel;
+ private final CollectionLayoutData layoutData;
private final WebMarkupContainer div;
- public EntityCollectionPanel(final String id, final UiObjectWkt
entityModel) {
+ public EntityCollectionPanel(final String id, final UiObjectWkt
entityModel, final CollectionLayoutData layoutData) {
super(id, entityModel);
+ this.layoutData = layoutData;
this.div = new WebMarkupContainer(ID_COLLECTION_GROUP);
selectedItemHintKey =
ComponentHintKey.create(super.getMetaModelContext(),
@@ -90,7 +93,6 @@ implements HasDynamicallyVisibleContent {
buildGui();
}
-
/**
* Attach UI only after added to parent.
*/
@@ -119,7 +121,7 @@ implements HasDynamicallyVisibleContent {
private void buildGui() {
- val collectionModel =
EntityCollectionModelParented.forParentObjectModel(getModel());
+ val collectionModel =
EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData);
div.setMarkupId("collection-" +
collectionModel.getLayoutData().getId());
val collectionMetaModel = collectionModel.getMetaModel();
@@ -168,7 +170,7 @@ implements HasDynamicallyVisibleContent {
private transient Optional<TableDecorator> tableDecorator;
private Optional<TableDecorator> tableDecorator() {
if(tableDecorator==null) {
- val collectionModel =
EntityCollectionModelParented.forParentObjectModel(getModel());
+ val collectionModel =
EntityCollectionModelParented.forParentObjectModel(getModel(), layoutData);
val collectionMetaModel = collectionModel.getMetaModel();
this.tableDecorator = Facets.tableDecorator(collectionMetaModel);
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanelFactory.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanelFactory.java
index b5e2ecae8d..77ca208835 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanelFactory.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/collection/EntityCollectionPanelFactory.java
@@ -18,14 +18,22 @@
*/
package org.apache.causeway.viewer.wicket.ui.components.entity.collection;
+import java.io.Serializable;
+
import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;
+import org.apache.causeway.applib.layout.component.CollectionLayoutData;
import org.apache.causeway.viewer.commons.model.components.UiComponentType;
import org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
import org.apache.causeway.viewer.wicket.ui.ComponentFactory;
import
org.apache.causeway.viewer.wicket.ui.components.entity.EntityComponentFactoryAbstract;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
/**
* {@link ComponentFactory} for {@link EntityCollectionPanel}.
*/
@@ -33,13 +41,34 @@ public class EntityCollectionPanelFactory extends
EntityComponentFactoryAbstract
private static final long serialVersionUID = 1L;
+ /**
+ * Helper class, used to call this factory.
+ */
+ @RequiredArgsConstructor
+ @Getter
+ public static class CollectionOwnerAndLayout implements Serializable {
+ private static final long serialVersionUID = 1L;
+ final @NonNull UiObjectWkt owner;
+ final @NonNull CollectionLayoutData layout;
+ }
+
public EntityCollectionPanelFactory() {
super(UiComponentType.ENTITY_COLLECTION, EntityCollectionPanel.class);
}
+ @Override
+ protected ApplicationAdvice appliesTo(final IModel<?> model) {
+ if (!(model instanceof org.apache.wicket.model.Model)) {
+ return ApplicationAdvice.DOES_NOT_APPLY;
+ }
+ return (model.getObject() instanceof CollectionOwnerAndLayout)
+ ? ApplicationAdvice.APPLIES
+ : ApplicationAdvice.DOES_NOT_APPLY;
+ }
+
@Override
public Component createComponent(final String id, final IModel<?> model) {
- final UiObjectWkt entityModel = (UiObjectWkt) model;
- return new EntityCollectionPanel(id, entityModel);
+ val collectionOwnerAndId = (CollectionOwnerAndLayout)
model.getObject();
+ return new EntityCollectionPanel(id, collectionOwnerAndId.getOwner(),
collectionOwnerAndId.getLayout());
}
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
index d160937a4f..536406eafd 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
@@ -19,11 +19,13 @@
package org.apache.causeway.viewer.wicket.ui.components.layout.bs.col;
import java.util.List;
-import java.util.function.Predicate;
+import java.util.Map;
+import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.Model;
import org.apache.causeway.applib.layout.component.ActionLayoutData;
import org.apache.causeway.applib.layout.component.CollectionLayoutData;
@@ -42,6 +44,7 @@ import
org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
import org.apache.causeway.viewer.wicket.ui.ComponentFactory;
import
org.apache.causeway.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
import
org.apache.causeway.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelFactory;
+import
org.apache.causeway.viewer.wicket.ui.components.entity.collection.EntityCollectionPanelFactory.CollectionOwnerAndLayout;
import
org.apache.causeway.viewer.wicket.ui.components.entity.fieldset.PropertyGroup;
import org.apache.causeway.viewer.wicket.ui.components.layout.bs.row.Row;
import
org.apache.causeway.viewer.wicket.ui.components.layout.bs.tabs.TabGroupPanel;
@@ -229,49 +232,35 @@ implements HasDynamicallyVisibleContent {
WktComponents.permanentlyHide(div, ID_FIELD_SETS);
}
+ final UiObjectWkt entityModel = getModel();
+ val ownerSpec = entityModel.getManagedObject().getSpecification();
- // collections
- final List<CollectionLayoutData> collections =
+ // collection layout data by collection id (the collection's member-id)
+ final Map<String, CollectionLayoutData> collectionLayoutById =
_NullSafe.stream(bsCol.getCollections())
- .filter(
- new Predicate<CollectionLayoutData>() {
- @Override
- public boolean test(final CollectionLayoutData
collectionLayoutData) {
- return collectionLayoutData.getMetadataError()
== null;
- }
- })
- .collect(Collectors.toList());
- if(!collections.isEmpty()) {
+ .filter(collectionLayoutData ->
collectionLayoutData.getMetadataError() == null)
+ .filter(collectionLayoutData ->
!ownerSpec.getCollection(collectionLayoutData.getId()).isEmpty())
+
.collect(Collectors.toUnmodifiableMap(CollectionLayoutData::getId,
UnaryOperator.identity()));
+
+ if(!collectionLayoutById.isEmpty()) {
final RepeatingViewWithDynamicallyVisibleContent collectionRv =
new
RepeatingViewWithDynamicallyVisibleContent(ID_COLLECTIONS);
- final UiObjectWkt entityModel = getModel();
- final CollectionLayoutData snapshot =
entityModel.getCollectionLayoutData();
-
- for (CollectionLayoutData collection : collections) {
-
- if
(entityModel.getManagedObject().getSpecification().getAssociation(collection.getId()).isEmpty())
{
- continue;
- }
-
- final String id = collectionRv.newChildId();
+ collectionLayoutById.forEach((id, layout)->{
- // we successively trample over the layout data; but that's
ok, this is synchronous code anyway...
- entityModel.setCollectionLayoutData(collection);
+ val helperModel = Model.of(new
CollectionOwnerAndLayout(entityModel, layout));
- // the entityModel's getLayoutData() provides the hint as to
which collection of the entity to render.
final ComponentFactory componentFactory =
getComponentFactoryRegistry().findComponentFactory(
- UiComponentType.ENTITY_COLLECTION,
entityModel);
- final Component collectionPanel =
componentFactory.createComponent(id, entityModel);
+ UiComponentType.ENTITY_COLLECTION,
helperModel);
+
+ final Component collectionPanel =
componentFactory.createComponent(collectionRv.newChildId(), helperModel);
collectionRv.add(collectionPanel);
- }
+ });
+
div.add(collectionRv);
visible = visible || collectionRv.isVisible();
- //XXX CAUSEWAY-1698 restore original state after trampling over
- entityModel.setCollectionLayoutData(snapshot);
-
} else {
WktComponents.permanentlyHide(div, ID_COLLECTIONS);
}