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

gtchaboussie pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 5ec0e993f4 OFBIZ-13313 (#923)
5ec0e993f4 is described below

commit 5ec0e993f456a8576e8462114a03c065d12abec5
Author: Gaetan <[email protected]>
AuthorDate: Wed Feb 18 16:41:46 2026 +0100

    OFBIZ-13313 (#923)
    
    Improved: Creates a DelegatorProvider interface for all objects that holds 
a delegator  (OFBIZ-13313)
    Creates a DelegatorProvider interface for all objects that holds a 
delegator.
    This allows the entity query to be built with other objects than the 
delegator (such as a dispatcher)
    
    Thanks: to Jacopo and Nicolas for the feedback.
---
 .../java/org/apache/ofbiz/entity/Delegator.java    |  3 +-
 .../org/apache/ofbiz/entity/GenericDelegator.java  |  5 ++++
 .../org/apache/ofbiz/entity/GenericEntity.java     |  4 ++-
 .../ofbiz/entity/test/EntityQueryTestSuite.java    | 14 +++++++++
 .../ofbiz/entity/util/DelegatorProvider.java       | 34 ++++++++++++++++++++++
 .../org/apache/ofbiz/entity/util/EntityQuery.java  |  7 ++---
 .../org/apache/ofbiz/service/LocalDispatcher.java  | 10 ++-----
 .../apache/ofbiz/widget/model/ModelFormTest.java   |  1 +
 8 files changed, 64 insertions(+), 14 deletions(-)

diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/Delegator.java 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/Delegator.java
index 49928adbc8..c414b287e0 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/Delegator.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/Delegator.java
@@ -43,12 +43,13 @@ import org.apache.ofbiz.entity.util.EntityCrypto;
 import org.apache.ofbiz.entity.util.EntityFindOptions;
 import org.apache.ofbiz.entity.util.EntityListIterator;
 import org.apache.ofbiz.entity.util.EntityStoreOptions;
+import org.apache.ofbiz.entity.util.DelegatorProvider;
 import org.apache.ofbiz.entity.util.SequenceUtil;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
-public interface Delegator {
+public interface Delegator extends DelegatorProvider {
 
     enum OperationType { INSERT, UPDATE, DELETE }
 
diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericDelegator.java 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericDelegator.java
index 2c0f34efde..5e9c6f08e8 100644
--- 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericDelegator.java
+++ 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericDelegator.java
@@ -494,6 +494,11 @@ public class GenericDelegator implements Delegator {
         return this.delegatorInfo.getGroupDataSource(groupName);
     }
 
+    @Override
+    public Delegator getDelegator() {
+        return this;
+    }
+
     @Override
     public GenericHelperInfo getGroupHelperInfo(String entityGroupName) {
         if (entityGroupName == null) {
diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
index 50a5ed227d..f2a61c50e5 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/GenericEntity.java
@@ -61,6 +61,7 @@ import org.apache.ofbiz.entity.model.ModelKeyMap;
 import org.apache.ofbiz.entity.model.ModelRelation;
 import org.apache.ofbiz.entity.model.ModelViewEntity;
 import org.apache.ofbiz.entity.model.ModelViewEntity.ModelAlias;
+import org.apache.ofbiz.entity.util.DelegatorProvider;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -74,7 +75,8 @@ import org.w3c.dom.Element;
  * then it should be made immutable by calling the <code>setImmutable()</code> 
method.</p>
  */
 @SuppressWarnings("serial")
-public class GenericEntity implements Map<String, Object>, 
LocalizedMap<Object>, Serializable, Comparable<GenericEntity>, Cloneable {
+public class GenericEntity implements Map<String, Object>, 
LocalizedMap<Object>,
+        Serializable, Comparable<GenericEntity>, Cloneable, DelegatorProvider {
 
     private static final String MODULE = GenericEntity.class.getName();
     public static final GenericEntity NULL_ENTITY = new NullGenericEntity();
diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/test/EntityQueryTestSuite.java
 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/test/EntityQueryTestSuite.java
index 66b16f542d..e0a0d13752 100644
--- 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/test/EntityQueryTestSuite.java
+++ 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/test/EntityQueryTestSuite.java
@@ -544,4 +544,18 @@ public class EntityQueryTestSuite extends EntityTestCase {
             TransactionUtil.rollback(transactionStarted, "Transaction is 
Rolled Back", e);
         }
     }
+
+    /**
+     * Check that init function use() work well with a GenericValue that 
implements DelegatorProvider
+     * assert: ensure delegator present on GV is the same that created and 
EntityQuery.use on GV not return null
+     */
+    public void testUseFromDelegatorProvider() throws GenericEntityException {
+        Delegator delegator = getDelegator();
+        GenericValue testGv = delegator.makeValue("TestingType",
+                "testingTypeId", "useDelegProv",
+                "description", "Use delegator Provider");
+        assertNotNull(testGv.getDelegator().getDelegatorName());
+        assertEquals(delegator.getDelegatorName(), 
testGv.getDelegator().getDelegatorName());
+        assertNotNull(EntityQuery.use(testGv));
+    }
 }
diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/util/DelegatorProvider.java
 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/DelegatorProvider.java
new file mode 100644
index 0000000000..5c307ad302
--- /dev/null
+++ 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/DelegatorProvider.java
@@ -0,0 +1,34 @@
+/*
+ * 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.ofbiz.entity.util;
+
+import org.apache.ofbiz.entity.Delegator;
+
+/**
+ * Interface for classes that hold a delegator that is meant to be used by 
other classes (for queries for example)
+ */
+public interface DelegatorProvider {
+
+    /**
+     * Gets the Delegator associated with current object instance
+     * @return Delegator associated with current object instance
+     */
+    Delegator getDelegator();
+
+}
diff --git 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntityQuery.java 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntityQuery.java
index 2fae14bfa0..e32f73f65e 100644
--- 
a/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntityQuery.java
+++ 
b/framework/entity/src/main/java/org/apache/ofbiz/entity/util/EntityQuery.java
@@ -73,12 +73,11 @@ public class EntityQuery {
     private Integer offset;
     private Integer limit;
 
-
     /** Construct an EntityQuery object for use against the specified Delegator
-     * @param delegator The delegator instance to use for the query
+     * @param delegatorProvider The delegator provider instance to use for the 
query
      */
-    public static EntityQuery use(Delegator delegator) {
-        return new EntityQuery(delegator);
+    public static EntityQuery use(DelegatorProvider delegatorProvider) {
+        return new EntityQuery(delegatorProvider.getDelegator());
     }
 
     /** Construct an EntityQuery object for use against the specified Delegator
diff --git 
a/framework/service/src/main/java/org/apache/ofbiz/service/LocalDispatcher.java 
b/framework/service/src/main/java/org/apache/ofbiz/service/LocalDispatcher.java
index 666e12cad2..4ce55241b2 100644
--- 
a/framework/service/src/main/java/org/apache/ofbiz/service/LocalDispatcher.java
+++ 
b/framework/service/src/main/java/org/apache/ofbiz/service/LocalDispatcher.java
@@ -20,7 +20,7 @@ package org.apache.ofbiz.service;
 
 import java.util.Map;
 
-import org.apache.ofbiz.entity.Delegator;
+import org.apache.ofbiz.entity.util.DelegatorProvider;
 import org.apache.ofbiz.security.Security;
 import org.apache.ofbiz.service.jms.JmsListenerFactory;
 import org.apache.ofbiz.service.job.JobManager;
@@ -32,7 +32,7 @@ import org.apache.ofbiz.service.job.JobManager;
  * by calling the {@link 
org.apache.ofbiz.service.ServiceDispatcher#getLocalDispatcher(String, 
Delegator)}
  * factory method.</p>
  */
-public interface LocalDispatcher {
+public interface LocalDispatcher extends DelegatorProvider {
 
     /**
      * Initialize a dispatch context for this dispatch after the creation is ok
@@ -343,12 +343,6 @@ public interface LocalDispatcher {
      */
     JmsListenerFactory getJMSListeneFactory();
 
-    /**
-     * Gets the GenericEntityDelegator associated with this dispatcher
-     * @return GenericEntityDelegator associated with this dispatcher
-     */
-    Delegator getDelegator();
-
 
     /**
      * Gets the Security object associated with this dispatcher
diff --git 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
index 80b6af32af..1b7f7f0f22 100644
--- 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
+++ 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
@@ -49,6 +49,7 @@ public class ModelFormTest {
         list.add(genericValue);
         when(delegator.findList(any(), any(), any(), any(), any(), any(), 
Mockito.anyBoolean()))
                 .thenReturn(list);
+        when(delegator.getDelegator()).thenReturn(delegator);
         context = new HashMap<>();
         context.put("delegator", delegator);
     }

Reply via email to