This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit f4ec5c8b7b0c0b6d2f7fd610e836dca2466281ac
Merge: 4388b827a9 6ebd2b91c2
Author: Andi Huber <[email protected]>
AuthorDate: Thu Sep 28 10:01:31 2023 +0200

    Merge remote-tracking branch 'origin/master' into spring6

 .../index/services/repository/EntityState.adoc     |   5 +-
 .../causeway/applib/services/command/Command.java  |  22 +--
 .../applib/services/repository/EntityState.java    |   5 +-
 .../applib/util/schema/CommonDtoUtils.java         |  11 +-
 .../value/semantics/ValueSemanticsAbstract.java    |   2 +-
 .../core/config/CausewayConfiguration.java         |  99 +++++++++++---
 .../core/config/DatanucleusConfiguration.java      |   4 +-
 .../core/config/util/ValueMaskingUtil.java         |   2 +-
 .../core/metamodel/facets/DomainEventHelper.java   |   3 +-
 .../ValueSemanticsAnnotationFacetFactory.java      |   7 +-
 .../managed/ParameterNegotiationModel.java         |   7 +-
 .../core/metamodel/spec/feature/ObjectAction.java  |  17 ++-
 .../spec/feature/ObjectActionParameter.java        |  37 ++++--
 .../specloader/specimpl/ObjectActionDefault.java   |  10 +-
 .../specloader/specimpl/ObjectMemberAbstract.java  |   2 +-
 .../valuesemantics/BigDecimalValueSemantics.java   |  21 ++-
 ...ionParameterAbstractTest_getId_and_getName.java |   2 +-
 ...anticsProvider_configureDecimalFormat_Test.java | 147 +++++++++++++++++++++
 .../command/CommandDtoFactoryDefault.java          |  13 +-
 .../command/CommandExecutorServiceDefault.java     |  10 +-
 .../EntityPropertyChangePublisherDefault.java      |   3 +
 .../session/InteractionServiceDefault.java         |  20 ++-
 .../applib/job/RunBackgroundCommandsJob.java       |  25 ++++
 .../BackgroundService_IntegTestAbstract.java       |   4 -
 .../commons/CausewayModulePersistenceCommons.java  |   3 +-
 .../changetracking/EntityChangeTrackerDefault.java |   7 +-
 .../PreAndPostValueEvaluatorService.java}          |  27 ++--
 .../PreAndPostValueEvaluatorServiceDefault.java    |  49 +++++++
 .../CausewayModulePersistenceJdoDatanucleus.java   |   3 +
 .../PreAndPostValueEvaluatorServiceJdo.java        |  99 ++++++++++++++
 ...DecimalFromJdoColumnAnnotationFacetFactory.java |   2 +-
 ...DecimalFromJpaColumnAnnotationFacetFactory.java |   2 +-
 .../stubs/CommandPublishingTestAbstract.java       |   4 +-
 .../applib/domaintypes/DomainTypeResource.java     |   4 +-
 .../ActionParameterDescriptionReprRenderer.java    |  22 ++-
 .../domaintypes/DomainTypeReprRenderer.java        |   4 +-
 ...entNegotiationServiceForRestfulObjectsV1_0.java |   3 +-
 .../swagger/internal/_OpenApiModelFactory.java     |   3 +
 .../viewer/context/ResourceContext.java            |  11 +-
 .../resources/DomainTypeResourceServerside.java    |  24 ++--
 .../viewer/resources/ObjectActionArgHelper.java    |   2 +-
 .../bootstrap/css/bootstrap-overrides-all-v2.css   |   7 +-
 .../js/causeway-jquery-wicket-viewer.nocompress.js |  11 +-
 43 files changed, 589 insertions(+), 176 deletions(-)

diff --cc 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index b39234403c,0c92ddf786..6f06a98ad5
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@@ -20,6 -20,9 +20,9 @@@ package org.apache.causeway.core.metamo
  
  import java.util.Optional;
  
 -import javax.inject.Inject;
 -import javax.validation.constraints.Digits;
++import jakarta.inject.Inject;
++import jakarta.validation.constraints.Digits;
+ 
  import org.apache.causeway.applib.annotation.ValueSemantics;
  import org.apache.causeway.core.metamodel.context.MetaModelContext;
  import org.apache.causeway.core.metamodel.facetapi.FeatureType;
@@@ -122,8 -123,8 +123,8 @@@ extends FacetFactoryAbstract 
                  MinFractionalDigitsFacetAbstract.minimum(
                          MinFractionalDigitsFacetFromValueSemanticsAnnotation
                                  .create(valueSemanticsIfAny, facetHolder),
 -                        // support for @javax.validation.constraints.Digits 
(if supported)
 +                        // support for @jakarta.validation.constraints.Digits 
(if supported)
-                         
getConfiguration().getCore().getMetaModel().getProgrammingModel().isUseScaleForMinFractionalFacet()
+                         
getConfiguration().getValueTypes().getBigDecimal().isUseScaleForMinFractionalFacet()
                                  ? 
MinFractionalDigitsFacetFromJavaxValidationDigitsAnnotation
                                              .create(digitsIfAny, facetHolder)
                                  : Optional.empty()
diff --cc 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index 2fab949b74,628ad9bf79..15ef1c9610
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@@ -20,12 -20,16 +20,16 @@@ package org.apache.causeway.core.metamo
  
  import java.math.BigDecimal;
  import java.text.DecimalFormat;
+ import java.util.Optional;
+ import java.util.OptionalInt;
  import java.util.function.UnaryOperator;
  
 -import javax.annotation.Priority;
 -import javax.inject.Inject;
 -import javax.inject.Named;
 +import jakarta.annotation.Priority;
 +import jakarta.inject.Inject;
 +import jakarta.inject.Named;
  
+ import org.apache.causeway.core.config.CausewayConfiguration;
+ 
  import org.springframework.stereotype.Component;
  
  import org.apache.causeway.applib.annotation.PriorityPrecedence;
diff --cc 
core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
index 484049fafe,cd77ffc77c..dd86acaceb
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/EntityPropertyChangePublisherDefault.java
@@@ -20,12 -20,14 +20,14 @@@ package org.apache.causeway.core.runtim
  
  import java.util.List;
  
 -import javax.annotation.PostConstruct;
 -import javax.annotation.Priority;
 -import javax.inject.Inject;
 -import javax.inject.Named;
 -import javax.inject.Provider;
 +import jakarta.annotation.PostConstruct;
 +import jakarta.annotation.Priority;
 +import jakarta.inject.Inject;
 +import jakarta.inject.Named;
 +import jakarta.inject.Provider;
  
+ import org.apache.causeway.applib.services.iactnlayer.InteractionService;
+ 
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.lang.Nullable;
  import org.springframework.stereotype.Service;
diff --cc 
extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/job/RunBackgroundCommandsJob.java
index df9d3d1a93,ed55916c44..c3c214baba
--- 
a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/job/RunBackgroundCommandsJob.java
+++ 
b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/job/RunBackgroundCommandsJob.java
@@@ -23,8 -23,10 +23,10 @@@ import java.util.Optional
  import java.util.UUID;
  import java.util.stream.Collectors;
  
 -import javax.inject.Inject;
 +import jakarta.inject.Inject;
  
+ import org.apache.causeway.applib.annotation.Programmatic;
+ 
  import org.quartz.DisallowConcurrentExecution;
  import org.quartz.Job;
  import org.quartz.JobExecutionContext;
diff --cc 
persistence/commons/src/main/java/org/apache/causeway/persistence/jpa/integration/changetracking/PreAndPostValueEvaluatorServiceDefault.java
index 0000000000,5b6274ca78..5a3df04dee
mode 000000,100644..100644
--- 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/jpa/integration/changetracking/PreAndPostValueEvaluatorServiceDefault.java
+++ 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/jpa/integration/changetracking/PreAndPostValueEvaluatorServiceDefault.java
@@@ -1,0 -1,49 +1,49 @@@
+ /*
+  *  Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *        http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  *
+  */
+ package org.apache.causeway.persistence.jpa.integration.changetracking;
+ 
 -import javax.annotation.Priority;
 -import javax.inject.Inject;
 -import javax.inject.Named;
++import jakarta.annotation.Priority;
++import jakarta.inject.Inject;
++import jakarta.inject.Named;
+ 
+ import org.springframework.beans.factory.annotation.Qualifier;
+ import org.springframework.stereotype.Service;
+ 
+ import org.apache.causeway.applib.annotation.InteractionScope;
+ import org.apache.causeway.applib.annotation.PriorityPrecedence;
+ import 
org.apache.causeway.core.metamodel.services.objectlifecycle.PreAndPostValue;
+ 
+ import lombok.RequiredArgsConstructor;
+ import lombok.extern.log4j.Log4j2;
+ 
+ @Service
+ @Named("causeway.persistence.commons.PreAndPostValueEvaluatorServiceDefault")
+ @Priority(PriorityPrecedence.LATE)
+ @Qualifier("default")
+ @InteractionScope   // see note above regarding this
+ @RequiredArgsConstructor(onConstructor_ = {@Inject})
+ @Log4j2
+ public class PreAndPostValueEvaluatorServiceDefault implements 
PreAndPostValueEvaluatorService {
+ 
+     @Override
+     public boolean differ(PreAndPostValue preAndPostValue) {
+         return preAndPostValue.shouldPublish();
+     }
+ }
diff --cc 
persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/PreAndPostValueEvaluatorServiceJdo.java
index 0000000000,48509818b4..d46a4697d4
mode 000000,100644..100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/PreAndPostValueEvaluatorServiceJdo.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/PreAndPostValueEvaluatorServiceJdo.java
@@@ -1,0 -1,99 +1,99 @@@
+ /*
+  *  Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *        http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  *
+  */
+ package org.apache.causeway.persistence.jdo.datanucleus.changetracking;
+ 
+ import java.util.Objects;
+ import java.util.Optional;
+ 
 -import javax.annotation.Priority;
 -import javax.inject.Inject;
 -import javax.inject.Named;
++import jakarta.annotation.Priority;
++import jakarta.inject.Inject;
++import jakarta.inject.Named;
+ 
+ import org.datanucleus.enhancement.Persistable;
+ 
+ import org.springframework.beans.factory.annotation.Qualifier;
+ import org.springframework.stereotype.Service;
+ 
+ import org.apache.causeway.applib.annotation.InteractionScope;
+ import org.apache.causeway.applib.annotation.PriorityPrecedence;
+ import 
org.apache.causeway.core.metamodel.services.objectlifecycle.PreAndPostValue;
+ import 
org.apache.causeway.core.metamodel.services.objectlifecycle.PropertyValuePlaceholder;
+ import 
org.apache.causeway.persistence.jdo.datanucleus.entities.DnOidStoreAndRecoverHelper;
+ import 
org.apache.causeway.persistence.jpa.integration.changetracking.PreAndPostValueEvaluatorService;
+ 
+ import lombok.RequiredArgsConstructor;
+ import lombok.extern.log4j.Log4j2;
+ 
+ @Service
+ @Named("causeway.persistence.jdo.PreAndPostValueEvaluatorServiceJdo")
+ @Priority(PriorityPrecedence.MIDPOINT) // before the default
+ @Qualifier("jdo")
+ @InteractionScope   // see note above regarding this
+ @RequiredArgsConstructor(onConstructor_ = {@Inject})
+ @Log4j2
+ public class PreAndPostValueEvaluatorServiceJdo implements 
PreAndPostValueEvaluatorService {
+ 
+     @Override
+     public boolean differ(PreAndPostValue papv) {
+ 
+         // don't audit objects that were created and then immediately deleted 
within the same xactn
+         if (papv.getPre() == PropertyValuePlaceholder.NEW
+                 && papv.getPost() == PropertyValuePlaceholder.DELETED) {
+             return false;
+         }
+         // but do always audit objects that have just been created or deleted
+         if (papv.getPre() == PropertyValuePlaceholder.NEW
+                 || papv.getPost() == PropertyValuePlaceholder.DELETED) {
+             return true;
+         }
+         if (papv.getPre() instanceof Persistable) {
+             Persistable prePersistable = (Persistable) papv.getPre();
+ 
+             if (!(papv.getPost() instanceof Persistable)) {
+                 // must be different, so publish
+                 return true;
+             }
+             Persistable postPersistable = ((Persistable) papv.getPost());
+ 
+             Optional<String> preOidIfAny = 
DnOidStoreAndRecoverHelper.forEntity(prePersistable).recoverOid();
+             Optional<String> postOidIfAny = 
DnOidStoreAndRecoverHelper.forEntity(postPersistable).recoverOid();
+ 
+             if (preOidIfAny.isPresent() || postOidIfAny.isPresent()) {
+                 // at least one of the Persistables is hollow
+                 return !Objects.equals(preOidIfAny, postOidIfAny);
+             }
+ 
+             // neither of the Persistables is hollow; should be safe to fall 
through.
+ 
+         } else {
+ 
+             if (papv.getPost() instanceof Persistable) {
+                 // must be different, so publish
+                 return true;
+             }
+ 
+             // should be safe to fall through.
+         }
+ 
+         // else - for updated objects - audit only if the property value has 
changed
+         return !Objects.equals(papv.getPre(), papv.getPost());
+     }
+ 
+ }

Reply via email to