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 f6f73ade2f CAUSEWAY-3484: caches usability and visibility within param
neg. model
f6f73ade2f is described below
commit f6f73ade2ff749cd7c4115fba4caeeb79b402593
Author: andi-huber <[email protected]>
AuthorDate: Thu Apr 25 13:11:05 2024 +0200
CAUSEWAY-3484: caches usability and visibility within param neg. model
---
.../managed/ParameterNegotiationModel.java | 45 +++++++++++++++-------
.../components/actions/ActionParametersForm.java | 3 +-
.../ui/components/scalars/ScalarPanelAbstract.java | 7 +++-
3 files changed, 39 insertions(+), 16 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index 2867d87b43..e626fcc542 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -169,22 +169,22 @@ public class ParameterNegotiationModel {
@NonNull public Bindable<String> getBindableParamSearchArgument(final int
paramNr) {
return
paramModels.getElseFail(paramNr).getBindableParamSearchArgument();
}
+
+ @NonNull public Observable<Consent> getObservableVisibilityConsent(final
int paramNr) {
+ return
paramModels.getElseFail(paramNr).getObservableVisibilityConsent();
+ }
+
+ @NonNull public Observable<Consent> getObservableUsabilityConsent(final
int paramNr) {
+ return
paramModels.getElseFail(paramNr).getObservableUsabilityConsent();
+ }
@NonNull public Consent getVisibilityConsent(final int paramNr) {
- val pendingArgValues = getParamValues();
- val paramMeta = getParamMetamodel(paramNr);
- val isVisible = paramMeta
- .isVisible(getHead(), pendingArgValues,
InteractionInitiatedBy.USER);
- return isVisible;
+ return getObservableVisibilityConsent(paramNr).getValue();
}
@NonNull public Consent getUsabilityConsent(final int paramNr) {
- val pendingArgValues = getParamValues();
- val paramMeta = getParamMetamodel(paramNr);
- val isUsable = paramMeta
- .isUsable(getHead(), pendingArgValues,
InteractionInitiatedBy.USER);
- return isUsable;
+ return getObservableUsabilityConsent(paramNr).getValue();
}
-
+
// -- MULTI SELECT
public MultiselectChoices getMultiselectChoices() {
@@ -271,7 +271,9 @@ public class ParameterNegotiationModel {
* Returns whether the pending parameter changed during reassessment.
* @see ObjectActionParameter#reassessDefault(ParameterNegotiationModel)
*/
- public boolean reassessDefaults(final int paramIndexForReassessment) {
+ public boolean reassessVisibilityAndUsabilityAndDefaults(final int
paramIndexForReassessment) {
+ paramModels.get(paramIndexForReassessment)
+ .ifPresent(ParameterModel::invalidateVisibilityAndUsability);
return
getParamMetamodel(paramIndexForReassessment).reassessDefault(this);
}
@@ -317,6 +319,8 @@ public class ParameterNegotiationModel {
@Getter @NonNull private final LazyObservable<String>
observableParamValidation;
@Getter @NonNull private final _BindableAbstract<String>
bindableParamSearchArgument;
@Getter @NonNull private final LazyObservable<Can<ManagedObject>>
observableParamChoices;
+ @Getter @NonNull private final LazyObservable<Consent>
observableVisibilityConsent;
+ @Getter @NonNull private final LazyObservable<Consent>
observableUsabilityConsent;
private Observable<String> bindableParamAsTitle;
private Observable<String> bindableParamAsHtml;
private Bindable<String> bindableParamAsParsableText;
@@ -374,13 +378,28 @@ public class ParameterNegotiationModel {
.isValid(getNegotiationModel().getHead(),
getNegotiationModel().getParamValues(), InteractionInitiatedBy.USER)
.getReasonAsString().orElse(null)
: (String)null);
-
+
+ observableVisibilityConsent = _Observables.lazy(()->
+ metaModel.isVisible(
+ negotiationModel.getHead(),
+ negotiationModel.getParamValues(),
+ InteractionInitiatedBy.USER));
+ observableUsabilityConsent = _Observables.lazy(()->
+ metaModel.isUsable(
+ negotiationModel.getHead(),
+ negotiationModel.getParamValues(),
+ InteractionInitiatedBy.USER));
}
public void invalidateChoicesAndValidation() {
observableParamChoices.invalidate();
observableParamValidation.invalidate();
}
+
+ public void invalidateVisibilityAndUsability() {
+ observableVisibilityConsent.invalidate();
+ observableUsabilityConsent.invalidate();
+ }
private boolean isValidationFeedbackActive() {
return
getNegotiationModel().getObservableValidationFeedbackActive().getValue();
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 4a386113d7..076f13be19 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -143,7 +143,8 @@ extends PromptFormAbstract<ActionModel> {
.forEach(paramIndexForReassessment->{
var paramRepaint =
// potentially updates the paramNegotiationModel
-
Repaint.required(paramNegotiationModel.reassessDefaults(paramIndexForReassessment));
+ Repaint.required(paramNegotiationModel
+
.reassessVisibilityAndUsabilityAndDefaults(paramIndexForReassessment));
_Xray.reassessedDefault(paramIndexForReassessment,
paramNegotiationModel);
val paramPanel = paramPanels.get(paramIndexForReassessment);
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 507def362e..f55cc2a951 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -662,6 +662,9 @@ implements ScalarModelChangeListener {
public Repaint updateIfNecessary(
final @NonNull UiParameter paramModel) {
+ val paramNegotiationModel = paramModel.getParameterNegotiationModel();
+ final int paramIndex = paramModel.getParameterIndex();
+
/*
* VISIBILITY, cases to consider:
* (1) start showing -> Repaint.REQUIRED_ON_PARENT
@@ -671,7 +674,7 @@ implements ScalarModelChangeListener {
*/
val visibilityBefore = isVisibilityAllowed();
- val visibilityConsent =
paramModel.getParameterNegotiationModel().getVisibilityConsent(paramModel.getParameterIndex());
+ val visibilityConsent =
paramNegotiationModel.getVisibilityConsent(paramIndex);
val visibilityAfter = visibilityConsent.isAllowed();
setVisibilityAllowed(visibilityAfter);
@@ -684,7 +687,7 @@ implements ScalarModelChangeListener {
*/
val usabilityBefore = isEnabled();
- val usabilityConsent =
paramModel.getParameterNegotiationModel().getUsabilityConsent(paramModel.getParameterIndex());
+ val usabilityConsent =
paramNegotiationModel.getUsabilityConsent(paramIndex);
val usabilityAfter = usabilityConsent.isAllowed();
if(usabilityAfter) {
onMakeEditable();