You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/07/26 06:03:18 UTC

[causeway] branch spring6 updated (46fce8884d -> a75b7d8071)

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

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


    from 46fce8884d Merge pull request #1801 from apache/dependabot/maven/spring6/ognl-ognl-3.4.1
     add 7aaf72ea71 CAUSEWAY-3532: another regr. test concurrency fix attempt
     add 3c93fe2133 Bump ognl:ognl from 3.4.0 to 3.4.1
     add d96cf9d1eb Merge pull request #1800 from apache/dependabot/maven/master/ognl-ognl-3.4.1
     add 581a6a96f7 CAUSEWAY-3500: simplify EntityState enum names
     add 7a051ca3b0 CAUSEWAY-3500: EntityState: align predicate names with enum names
     add aae90324a7 CAUSEWAY-3500: [Persistence] Cleanup ambiguous EntityState Terminolgy
     add 0a2ee6cd36 CAUSEWAY-3500: EntityState: adds explicit REMOVED state
     add 63e1a5adf4 CAUSEWAY-3500: regr. tests: more concurrent test sync.
     add 1468db16c4 CAUSEWAY-3500: EntityState: remove hasOidLegacy()
     add d65492d165 CAUSEWAY-3500: EntityState: finally remove confusing predicates
     add a6612d0f39 CAUSEWAY-3500: MmEntityUtils: remove confusing predicates
     add 7d55462be5 CAUSEWAY-3500: disable failing graphql test to rescue CI build
     add b117e8efe9 CAUSEWAY-2650: removes workaround on Object_logicalTypeName
     add f450d5c68e CAUSEWAY-3536: if table has no property columns, allow to force rendering of titles
     new a75b7d8071 Merge remote-tracking branch 'origin/master' into spring6

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../mixins/metamodel/Object_logicalTypeName.java   |  17 ++-
 .../applib/services/repository/EntityState.java    | 127 ++++++++-----------
 .../core/config/CausewayConfiguration.java         |  11 +-
 .../core/metamodel/object/MmEntityUtils.java       |  26 +---
 .../core/metamodel/object/MmVisibilityUtils.java   |   2 +-
 .../object/_ManagedObjectEntityBookmarked.java     |   7 +-
 .../object/_ManagedObjectEntityHybrid.java         |   4 +-
 .../object/_ManagedObjectEntityRemoved.java        |   2 +-
 .../services/title/TitleServiceDefault.java        |   3 +-
 .../executor/MemberExecutorServiceDefault.java     |  16 +--
 .../repository/RepositoryServiceDefault.java       |   8 +-
 .../ApplicationFeatureIdTransformer.java           |  14 +--
 .../PermissionsEvaluationServiceForSecman.java     |   9 +-
 ...onFeatureIdTransformerV1Compatibility_Test.java |  18 ++-
 .../viewer/test/source/EndToEnd_IntegTest.java     |   4 +-
 .../changetracking/EntityChangeTrackerDefault.java |   3 +-
 .../entities/DnEntityStateProvider.java            |   8 +-
 .../metamodel/facets/entity/JdoEntityFacet.java    |  16 +--
 .../jpa/integration/entity/JpaEntityFacet.java     |  39 +-----
 .../integration/entity/_JpaEntityStateUtil.java    | 137 +++++++++++++++++++++
 .../injecting/jdo/JdoEntityInjectingTest.java      |  15 ++-
 .../persistence/jdo/JdoBootstrappingTest.java      |  19 ++-
 ...TransactionRollbackTest_usingTransactional.java |   7 +-
 .../JpaGeneratedLongIdEntityLifecycleTest.java     |  16 ++-
 ...JpaNonGeneratedStringIdEntityLifecycleTest.java |  16 ++-
 .../viewers/jpa/wkt/InteractionTestJpaWkt.java     |   1 -
 .../wicket/ui/CollectionContentsAsFactory.java     |  19 ++-
 .../CollectionContentsAsAjaxTablePanel.java        |  37 +++---
 .../ajaxtable/columns/GenericTitleColumn.java      |  14 ++-
 ...ggleWkt.java => GenericTitleColumnOptions.java} |  40 +++---
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  17 ++-
 .../entitysimplelink/EntityLinkSimplePanel.java    |   6 +
 32 files changed, 394 insertions(+), 284 deletions(-)
 create mode 100644 persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/_JpaEntityStateUtil.java
 copy viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/{BulkToggleWkt.java => GenericTitleColumnOptions.java} (52%)


[causeway] 01/01: Merge remote-tracking branch 'origin/master' into spring6

Posted by ah...@apache.org.
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 a75b7d8071b3340cd9f2e85ef4790bbb27b41eff
Merge: 46fce8884d f450d5c68e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jul 26 07:59:42 2023 +0200

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

 .../mixins/metamodel/Object_logicalTypeName.java   |  17 ++-
 .../applib/services/repository/EntityState.java    | 127 ++++++++-----------
 .../core/config/CausewayConfiguration.java         |  11 +-
 .../core/metamodel/object/MmEntityUtils.java       |  26 +---
 .../core/metamodel/object/MmVisibilityUtils.java   |   2 +-
 .../object/_ManagedObjectEntityBookmarked.java     |   7 +-
 .../object/_ManagedObjectEntityHybrid.java         |   4 +-
 .../object/_ManagedObjectEntityRemoved.java        |   2 +-
 .../services/title/TitleServiceDefault.java        |   3 +-
 .../executor/MemberExecutorServiceDefault.java     |  16 +--
 .../repository/RepositoryServiceDefault.java       |   8 +-
 .../ApplicationFeatureIdTransformer.java           |  14 +--
 .../PermissionsEvaluationServiceForSecman.java     |   9 +-
 ...onFeatureIdTransformerV1Compatibility_Test.java |  18 ++-
 .../viewer/test/source/EndToEnd_IntegTest.java     |   4 +-
 .../changetracking/EntityChangeTrackerDefault.java |   3 +-
 .../entities/DnEntityStateProvider.java            |   8 +-
 .../metamodel/facets/entity/JdoEntityFacet.java    |  16 +--
 .../jpa/integration/entity/JpaEntityFacet.java     |  39 +-----
 .../integration/entity/_JpaEntityStateUtil.java    | 137 +++++++++++++++++++++
 .../injecting/jdo/JdoEntityInjectingTest.java      |  15 ++-
 .../persistence/jdo/JdoBootstrappingTest.java      |  19 ++-
 ...TransactionRollbackTest_usingTransactional.java |   7 +-
 .../JpaGeneratedLongIdEntityLifecycleTest.java     |  16 ++-
 ...JpaNonGeneratedStringIdEntityLifecycleTest.java |  16 ++-
 .../viewers/jpa/wkt/InteractionTestJpaWkt.java     |   1 -
 .../wicket/ui/CollectionContentsAsFactory.java     |  19 ++-
 .../CollectionContentsAsAjaxTablePanel.java        |  37 +++---
 .../ajaxtable/columns/GenericTitleColumn.java      |  14 ++-
 .../columns/GenericTitleColumnOptions.java         |  59 +++++++++
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  17 ++-
 .../entitysimplelink/EntityLinkSimplePanel.java    |   6 +
 32 files changed, 429 insertions(+), 268 deletions(-)

diff --cc api/applib/src/main/java/org/apache/causeway/applib/mixins/metamodel/Object_logicalTypeName.java
index 6ac715781f,9ef4e5f97e..3b3a80e149
--- a/api/applib/src/main/java/org/apache/causeway/applib/mixins/metamodel/Object_logicalTypeName.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/mixins/metamodel/Object_logicalTypeName.java
@@@ -18,7 -18,8 +18,8 @@@
   */
  package org.apache.causeway.applib.mixins.metamodel;
  
- import org.apache.causeway.applib.annotation.Action;
 -import javax.inject.Inject;
++import jakarta.inject.Inject;
+ 
  import org.apache.causeway.applib.annotation.DomainObject;
  import org.apache.causeway.applib.annotation.MemberSupport;
  import org.apache.causeway.applib.annotation.Property;
diff --cc extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
index 0895a1b85e,d62a09d851..6268a40e0a
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
@@@ -20,15 -20,11 +20,11 @@@ package org.apache.causeway.extensions.
  
  import java.util.Collection;
  import java.util.Collections;
- import java.util.List;
  import java.util.Optional;
  
 -import javax.inject.Inject;
 -import javax.inject.Named;
 +import jakarta.inject.Inject;
 +import jakarta.inject.Named;
  
- import lombok.Builder;
- import lombok.NoArgsConstructor;
- 
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.stereotype.Service;
  
diff --cc persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacet.java
index ebf559ba40,994e164e3c..556ae9173a
--- a/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacet.java
+++ b/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/JpaEntityFacet.java
@@@ -21,12 -21,10 +21,10 @@@ package org.apache.causeway.persistence
  import java.lang.reflect.Method;
  import java.util.Optional;
  
 -import javax.inject.Inject;
 -import javax.persistence.EntityManager;
 -import javax.persistence.PersistenceUnitUtil;
 +import jakarta.inject.Inject;
 +import jakarta.persistence.EntityManager;
- import jakarta.persistence.PersistenceException;
 +import jakarta.persistence.PersistenceUnitUtil;
  
- import org.eclipse.persistence.exceptions.DescriptorException;
  import org.springframework.data.jpa.repository.JpaContext;
  import org.springframework.lang.Nullable;
  
diff --cc persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/_JpaEntityStateUtil.java
index 0000000000,a37cbdf76c..c6a2e15239
mode 000000,100644..100644
--- a/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/_JpaEntityStateUtil.java
+++ b/persistence/jpa/integration/src/main/java/org/apache/causeway/persistence/jpa/integration/entity/_JpaEntityStateUtil.java
@@@ -1,0 -1,137 +1,137 @@@
+ /*
+  *  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.entity;
+ 
 -import javax.persistence.EntityManager;
 -import javax.persistence.PersistenceException;
 -import javax.persistence.PersistenceUnitUtil;
++import jakarta.persistence.EntityManager;
++import jakarta.persistence.PersistenceException;
++import jakarta.persistence.PersistenceUnitUtil;
+ 
+ import org.eclipse.persistence.exceptions.DescriptorException;
+ import org.eclipse.persistence.sessions.UnitOfWork;
+ 
+ import org.apache.causeway.applib.services.repository.EntityState;
+ import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet.PrimaryKeyType;
+ 
+ import lombok.val;
+ import lombok.experimental.UtilityClass;
+ 
+ @UtilityClass
+ class _JpaEntityStateUtil {
+ 
+     EntityState getEntityState(
+             final EntityManager entityManager,
+             final PersistenceUnitUtil persistenceUnitUtil,
+             final Class<?> entityClass,
+             final PrimaryKeyType<?> primaryKeyType,
+             final Object pojo) {
+ 
+         if (entityManager.contains(pojo)) {
+             val primaryKey = persistenceUnitUtil.getIdentifier(pojo);
+             if (primaryKey == null) {
+                 return EntityState.ATTACHED_NO_OID;
+             }
+             return EntityState.ATTACHED;
+         }
+ 
+         /*
+          * With JPA there is no obvious way to distinguish between TRANSIENT, REMOVED or DETACHED.
+          *
+          * Presence of a primary key AND a successful call to UnitOfWork#getReference(...) suggests
+          * that the state is DETACHED.
+          */
+ 
+         final Object primaryKey;
+         try {
+             primaryKey = persistenceUnitUtil.getIdentifier(pojo);
+         } catch (PersistenceException ex) {
+             /* horrible hack, but encountered NPEs if using a composite key (eg CommandLogEntry)
+             (this was without any weaving) */
+             final Throwable cause = ex.getCause();
+             if (cause instanceof DescriptorException) {
+                 val descriptorException = (DescriptorException) cause;
+                 final Throwable internalException = descriptorException.getInternalException();
+                 if (internalException instanceof NullPointerException) {
+                     return EntityState.TRANSIENT_OR_REMOVED;
+                 }
+             }
+             if (cause instanceof NullPointerException) {
+                 // horrible hack, encountered if using composite key (eg ExecutionLogEntry) with dynamic weaving
+                 return EntityState.TRANSIENT_OR_REMOVED;
+             }
+             throw ex;
+         }
+ 
+         if(primaryKey == null
+                 || !primaryKeyType.isValid(primaryKey)) {
+             return EntityState.TRANSIENT_OR_REMOVED;
+         }
+ 
+         final UnitOfWork session = entityManager.unwrap(UnitOfWork.class);
+         final Object reference = session.getReference(entityClass, primaryKey);
+         return reference != null
+                 ? EntityState.DETACHED
+                 : EntityState.TRANSIENT_OR_REMOVED;
+     }
+ 
+     @Deprecated
+     EntityState getEntityStateLegacy(
+             final EntityManager entityManager,
+             final PersistenceUnitUtil persistenceUnitUtil,
+             final Class<?> entityClass,
+             final PrimaryKeyType<?> primaryKeyType,
+             final Object pojo) {
+         if (entityManager.contains(pojo)) {
+             val primaryKey = persistenceUnitUtil.getIdentifier(pojo);
+             if (primaryKey == null) {
+                 return EntityState.ATTACHED_NO_OID;
+             }
+             return EntityState.ATTACHED;
+         }
+ 
+         try {
+             val primaryKey = persistenceUnitUtil.getIdentifier(pojo);
+             if (primaryKey == null) {
+                 return EntityState.TRANSIENT_OR_REMOVED;
+             } else {
+                 // detect shallow primary key
+                 //TODO this is a hack - see whether we can actually ask the EntityManager to give us an accurate answer
+                 return primaryKeyType.isValid(primaryKey)
+                     ? EntityState.DETACHED
+                     : EntityState.TRANSIENT_OR_REMOVED;
+             }
+         } catch (PersistenceException ex) {
+             /* horrible hack, but encountered NPEs if using a composite key (eg CommandLogEntry)
+                 (this was without any weaving) */
+             Throwable cause = ex.getCause();
+             if (cause instanceof DescriptorException) {
+                 DescriptorException descriptorException = (DescriptorException) cause;
+                 Throwable internalException = descriptorException.getInternalException();
+                 if (internalException instanceof NullPointerException) {
+                     return EntityState.TRANSIENT_OR_REMOVED;
+                 }
+             }
+             if (cause instanceof NullPointerException) {
+                 // horrible hack, encountered if using composite key (eg ExecutionLogEntry) with dynamic weaving
+                 return EntityState.TRANSIENT_OR_REMOVED;
+             }
+             throw ex;
+         }
+     }
+ 
 -}
++}